diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..8d98ca21 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,8 @@ +# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file + +version: 2 +updates: + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" diff --git a/.github/workflows/unit.yml b/.github/workflows/unit.yml index 01c9bcc5..b1023fa4 100644 --- a/.github/workflows/unit.yml +++ b/.github/workflows/unit.yml @@ -2,6 +2,9 @@ name: unit on: [ push, pull_request ] +permissions: + contents: read + jobs: test: strategy: @@ -13,11 +16,11 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: lfs: 'true' - name: Setup python - uses: actions/setup-python@v5 + uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 # v5.2.0 with: python-version: ${{ matrix.python-version }} - name: Install dependencies diff --git a/lib/parameters.py b/lib/parameters.py index d74dd05b..c8a497ef 100755 --- a/lib/parameters.py +++ b/lib/parameters.py @@ -853,6 +853,31 @@ def gen_vp9_vbr_parameters(spec): params = gen_vp9_vbr_variants(spec) return keys, params +def gen_vp9_seek_variants(spec): + for case, params in spec.items(): + variants = params.get("variants", dict()).get("seek", []) + for variant in variants: + rcmode = variant["rcmode"] + bitrate = variant["bitrate"] + + # Update maxrate according to rcmode + if "cbr" == rcmode: + variant.update(maxrate = bitrate) + elif "vbr" == rcmode: + variant.update(maxrate = bitrate * 2) + else: + variant.update(maxrate = None) + + yield [ + case, rcmode, bitrate, variant.get("maxrate", None), + variant.get("fps", 25), variant.get("seek", 1) + ] + +def gen_vp9_seek_parameters(spec): + keys = ("case", "rcmode", "bitrate", "maxrate", "fps", "seek") + params = gen_vp9_seek_variants(spec) + return keys, params + def gen_vp9_cqp_lp_variants(spec): for case, params in spec.items(): variants = params.get("variants", dict()).get("cqp_lp", []) @@ -898,6 +923,31 @@ def gen_vp9_vbr_lp_parameters(spec): params = gen_vp9_vbr_lp_variants(spec) return keys, params +def gen_vp9_seek_lp_variants(spec): + for case, params in spec.items(): + variants = params.get("variants", dict()).get("seek_lp", []) + for variant in variants: + rcmode = variant["rcmode"] + bitrate = variant["bitrate"] + + # Update maxrate according to rcmode + if "cbr" == rcmode: + variant.update(maxrate = bitrate) + elif "vbr" == rcmode: + variant.update(maxrate = bitrate * 2) + else: + variant.update(maxrate = None) + + yield [ + case, rcmode, bitrate, variant.get("maxrate", None), + variant.get("fps", 25), variant.get("seek", 1) + ] + +def gen_vp9_seek_lp_parameters(spec): + keys = ("case", "rcmode", "bitrate", "maxrate", "fps", "seek") + params = gen_vp9_seek_lp_variants(spec) + return keys, params + def gen_av1_cqp_variants(spec, strapi=False): for case, params in spec.items(): if strapi: diff --git a/test/ffmpeg-qsv/encode/vp9.py b/test/ffmpeg-qsv/encode/vp9.py index efbd1874..304383b5 100644 --- a/test/ffmpeg-qsv/encode/vp9.py +++ b/test/ffmpeg-qsv/encode/vp9.py @@ -125,3 +125,38 @@ def test(self, case, gop, bitrate, fps, slices, refmode, quality, looplvl, loops self.init(spec, case, gop, bitrate, fps, slices, quality) self.encode() +class seek(VP9_8EncoderTest): + def init(self, tspec, case, rcmode, bitrate, maxrate, fps, seek): + vars(self).update(tspec[case].copy()) + vars(self).update( + case = case, + bitrate = bitrate, + maxrate = maxrate, + minrate = bitrate, + rcmode = rcmode, + fps = fps, + seek = seek, + ) + + @slash.parametrize(*gen_vp9_seek_parameters(spec)) + def test(self, case, rcmode, bitrate, maxrate, fps, seek): + self.init(spec, case, rcmode, bitrate, maxrate, fps, seek) + self.encode() + +class seek_lp(VP9_8EncoderLPTest): + def init(self, tspec, case, rcmode, bitrate, maxrate, fps, seek): + vars(self).update(tspec[case].copy()) + vars(self).update( + case = case, + bitrate = bitrate, + maxrate = maxrate, + minrate = bitrate, + rcmode = rcmode, + fps = fps, + seek = seek, + ) + + @slash.parametrize(*gen_vp9_seek_lp_parameters(spec)) + def test(self, case, rcmode, bitrate, maxrate, fps, seek): + self.init(spec, case, rcmode, bitrate, maxrate, fps, seek) + self.encode()