Skip to content

Commit 21c311d

Browse files
Hangjie22Coderuartie
authored andcommitted
[ffmpeg-qsv] add encode/hevc playback_seek test case
Signed-off-by: Wang Hangjie <[email protected]> squash_commit
1 parent 153a57f commit 21c311d

File tree

3 files changed

+109
-1
lines changed

3 files changed

+109
-1
lines changed

lib/ffmpeg/encoderbase.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ def hwformat(self):
6565
pict = property(lambda s: s.ifprop("vpict", " -pic_timing_sei 0"))
6666
roi = property(lambda s: s.ifprop("roi", ",addroi=0:0:{width}/2:{height}/2:-1/3"))
6767
strict = property(lambda s: s.ifprop("strict", " -strict {strict}"))
68+
seek = property(lambda s: s.ifprop("seek", " -ss {seek}"))
6869
hwupload = property(lambda s: ",hwupload")
6970

7071
@property
@@ -109,7 +110,7 @@ def encparams(self):
109110
f"{self.bframes}{self.slices}{self.minrate}{self.maxrate}{self.refs}"
110111
f"{self.extbrc}{self.loopshp}{self.looplvl}{self.tilecols}{self.tilerows}"
111112
f"{self.level}{self.ladepth}{self.forced_idr}{self.intref}{self.lowpower}"
112-
f"{self.maxframesize}{self.pict}{self.rqp}{self.strict}"
113+
f"{self.maxframesize}{self.pict}{self.rqp}{self.strict}{self.seek}"
113114
)
114115

115116
@property

lib/parameters.py

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -516,6 +516,70 @@ def gen_hevc_pict_lp_parameters(spec, profiles):
516516
params = gen_hevc_pict_lp_variants(spec, profiles)
517517
return keys, params
518518

519+
def gen_hevc_seek_variants(spec, profiles):
520+
for case, params in spec.items():
521+
for variant in copy.deepcopy(params.get("variants", dict()).get("seek", [])):
522+
uprofile = variant.get("profile", None)
523+
cprofiles = [uprofile] if uprofile else profiles
524+
gop = variant.get("gop", None)
525+
bframes = variant.get("bframes", None)
526+
bitrate = variant.get("bitrate", None)
527+
qp = variant.get("qp", None)
528+
fps = variant.get("fps", 25)
529+
rcmode = variant["rcmode"]
530+
seek = variant["seek"]
531+
if "cqp" == rcmode:
532+
assert bitrate == None, "We shouldn't set a value to bitrate for CQP."
533+
variant.update(maxrate = None)
534+
else:
535+
assert qp == None, "We shouldn't set a value to qp for CBR/VBR."
536+
if "cbr" == rcmode:
537+
variant.update(maxrate = bitrate)
538+
elif "vbr" == rcmode:
539+
variant.update(maxrate = bitrate * 2)
540+
for profile in cprofiles:
541+
yield [
542+
case, gop, bframes, bitrate, qp, variant["maxrate"],
543+
profile, rcmode, seek, fps,
544+
]
545+
546+
def gen_hevc_seek_parameters(spec, profiles):
547+
keys = ("case", "gop", "bframes", "bitrate", "qp", "maxrate", "profile", "rcmode", "seek", "fps")
548+
params = gen_hevc_seek_variants(spec, profiles)
549+
return keys, params
550+
551+
def gen_hevc_seek_lp_variants(spec, profiles):
552+
for case, params in spec.items():
553+
for variant in copy.deepcopy(params.get("variants", dict()).get("seek_lp", [])):
554+
uprofile = variant.get("profile", None)
555+
cprofiles = [uprofile] if uprofile else profiles
556+
gop = variant.get("gop", None)
557+
bframes = variant.get("bframes", None)
558+
bitrate = variant.get("bitrate", None)
559+
qp = variant.get("qp", None)
560+
fps = variant.get("fps", 25)
561+
rcmode = variant["rcmode"]
562+
seek = variant["seek"]
563+
if "cqp" == rcmode:
564+
assert bitrate == None, "We shouldn't set a value to bitrate for CQP."
565+
variant.update(maxrate = None)
566+
else:
567+
assert qp == None, "We shouldn't set a value to qp for CBR/VBR."
568+
if "cbr" == rcmode:
569+
variant.update(maxrate = bitrate)
570+
elif "vbr" == rcmode:
571+
variant.update(maxrate = bitrate * 2)
572+
for profile in cprofiles:
573+
yield [
574+
case, gop, bframes, bitrate, qp, variant["maxrate"],
575+
profile, rcmode, seek, fps,
576+
]
577+
578+
def gen_hevc_seek_lp_parameters(spec, profiles):
579+
keys = ("case", "gop", "bframes", "bitrate", "qp", "maxrate", "profile", "rcmode", "seek", "fps")
580+
params = gen_hevc_seek_lp_variants(spec, profiles)
581+
return keys, params
582+
519583
gen_hevc_cqp_parameters = gen_avc_cqp_parameters
520584
gen_hevc_cbr_parameters = gen_avc_cbr_parameters
521585
gen_hevc_vbr_parameters = gen_avc_vbr_parameters

test/ffmpeg-qsv/encode/hevc.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -363,3 +363,46 @@ def test(self, case, gop, bframes, bitrate, maxrate, profile, rcmode):
363363
self.init(spec, case, gop, bframes, bitrate, maxrate, profile, rcmode)
364364
self.encode()
365365

366+
class seek(HEVC8EncoderTest):
367+
def init(self, tspec, case, gop, bframes, bitrate, qp, maxrate, profile, rcmode, seek, fps):
368+
vars(self).update(tspec[case].copy())
369+
vars(self).update(
370+
rcmode = rcmode,
371+
bframes = bframes,
372+
bitrate = bitrate,
373+
case = case,
374+
maxrate = maxrate,
375+
minrate = bitrate,
376+
profile = profile,
377+
qp = qp,
378+
gop = gop,
379+
seek = seek,
380+
fps = fps,
381+
)
382+
383+
@slash.parametrize(*gen_hevc_seek_parameters(spec, ['main']))
384+
def test(self, case, gop, bframes, bitrate, qp, maxrate, profile, rcmode, seek, fps):
385+
self.init(spec, case, gop, bframes, bitrate, qp, maxrate, profile, rcmode, seek, fps)
386+
self.encode()
387+
388+
class seek_lp(HEVC8EncoderLPTest):
389+
def init(self, tspec, case, gop, bframes, bitrate, qp, maxrate, profile, rcmode, seek, fps):
390+
vars(self).update(tspec[case].copy())
391+
vars(self).update(
392+
rcmode = rcmode,
393+
bframes = bframes,
394+
bitrate = bitrate,
395+
case = case,
396+
maxrate = maxrate,
397+
minrate = bitrate,
398+
profile = profile,
399+
qp = qp,
400+
gop = gop,
401+
seek = seek,
402+
fps = fps,
403+
)
404+
405+
@slash.parametrize(*gen_hevc_seek_lp_parameters(spec, ['main']))
406+
def test(self, case, gop, bframes, bitrate, qp, maxrate, profile, rcmode, seek, fps):
407+
self.init(spec, case, gop, bframes, bitrate, qp, maxrate, profile, rcmode, seek, fps)
408+
self.encode()

0 commit comments

Comments
 (0)