From 36e5007c4bcde0b0962216a449b9e93bf024f573 Mon Sep 17 00:00:00 2001 From: Focus Luo Date: Mon, 19 Aug 2024 03:20:21 -0700 Subject: [PATCH] [strapi] consolidated strapi generators Signed-off-by: Focus Luo --- lib/parameters.py | 307 ++++++++++++++++++++++++++++------------------ 1 file changed, 189 insertions(+), 118 deletions(-) diff --git a/lib/parameters.py b/lib/parameters.py index bc6d85b7..c9f4eca4 100755 --- a/lib/parameters.py +++ b/lib/parameters.py @@ -22,71 +22,82 @@ def format_value(value, **params): return value.format(**augmented) -def gen_avc_cqp_variants(spec, profiles): +def gen_avc_cqp_variants(spec, profiles, strapi=False): for case, params in spec.items(): - variants = copy.deepcopy(params.get("variants", dict()).get("cqp", None)) - if variants is None: - keys = ["gop", "slices", "bframes", "qp", "quality", "profile"] - product = list(itertools.product([1], [1], [0], [14, 28], [1, 4, 7], profiles)) # I, single-slice - product += list(itertools.product([30], [1], [0], [14, 28], [1, 4, 7], profiles)) # IP, single-slice - product += list(itertools.product([30], [4], [2], [14, 28], [1, 4, 7], profiles)) # IPB, multi-slice - variants = [dict(zip(keys, vals)) for vals in product] - - for variant in variants: - uprofile = variant.get("profile", None) - cprofiles = [uprofile] if uprofile else profiles - - # backwards compatibility for ipbmode user config - ipbmode = variant.get("ipbmode", None) - if ipbmode is not None: - assert not variant.get("gop", None) - assert not variant.get("slices", None) - assert not variant.get("bframes", None) - variant.update( - slices = 4 if ipbmode == 2 else 1, - gop = 30 if ipbmode != 0 else 1, - bframes = 2 if ipbmode == 2 else 0) - - for profile in cprofiles: - yield [ - case, variant["gop"], variant["slices"], variant["bframes"], - variant["qp"], variant["quality"], profile - ] - -def gen_avc_cqp_parameters(spec, profiles): + if strapi is True: + variants = copy.deepcopy(params.get("variants", dict()).get("cqp_strapi", None)) + else: + variants = copy.deepcopy(params.get("variants", dict()).get("cqp", None)) + + if variants is None: + keys = ["gop", "slices", "bframes", "qp", "quality", "profile"] + product = list(itertools.product([1], [1], [0], [14, 28], [1, 4, 7], profiles)) # I, single-slice + product += list(itertools.product([30], [1], [0], [14, 28], [1, 4, 7], profiles)) # IP, single-slice + product += list(itertools.product([30], [4], [2], [14, 28], [1, 4, 7], profiles)) # IPB, multi-slice + variants = [dict(zip(keys, vals)) for vals in product] + + if variants is not None: + for variant in variants: + uprofile = variant.get("profile", None) + cprofiles = [uprofile] if uprofile else profiles + + # backwards compatibility for ipbmode user config + ipbmode = variant.get("ipbmode", None) + if ipbmode is not None: + assert not variant.get("gop", None) + assert not variant.get("slices", None) + assert not variant.get("bframes", None) + variant.update( + slices = 4 if ipbmode == 2 else 1, + gop = 30 if ipbmode != 0 else 1, + bframes = 2 if ipbmode == 2 else 0) + + for profile in cprofiles: + yield [ + case, variant["gop"], variant["slices"], variant["bframes"], + variant["qp"], variant["quality"], profile + ] + +def gen_avc_cqp_parameters(spec, profiles, strapi=False): keys = ("case", "gop", "slices", "bframes", "qp", "quality", "profile") - params = gen_avc_cqp_variants(spec, profiles) + params = gen_avc_cqp_variants(spec, profiles, strapi) return keys, params -def gen_avc_cbr_variants(spec, profiles): +def gen_avc_cbr_variants(spec, profiles, strapi=False): for case, params in spec.items(): - for variant in copy.deepcopy(params.get("variants", dict()).get("cbr", [])): - uprofile = variant.get("profile", None) - cprofiles = [uprofile] if uprofile else profiles - - # backwards compatibility for ipbmode user config - ipbmode = variant.get("ipbmode", None) - if ipbmode is not None: - assert not variant.get("gop", None) - assert not variant.get("slices", None) - assert not variant.get("bframes", None) - variant.update( - slices = 4 if ipbmode == 2 else 1, - gop = 30 if ipbmode != 0 else 1, - bframes = 2 if ipbmode == 2 else 0) - - for profile in cprofiles: - yield [ - case, variant["gop"], variant["slices"], variant["bframes"], - variant["bitrate"], variant.get("fps", 30), profile - ] - -def gen_avc_cbr_parameters(spec, profiles): + if strapi is True: + variants = copy.deepcopy(params.get("variants", dict()).get("cbr_strapi", None)) + else: + variants = copy.deepcopy(params.get("variants", dict()).get("cbr", None)) + + if variants is not None: + for variant in variants: + uprofile = variant.get("profile", None) + cprofiles = [uprofile] if uprofile else profiles + + # backwards compatibility for ipbmode user config + ipbmode = variant.get("ipbmode", None) + if ipbmode is not None: + assert not variant.get("gop", None) + assert not variant.get("slices", None) + assert not variant.get("bframes", None) + variant.update( + slices = 4 if ipbmode == 2 else 1, + gop = 30 if ipbmode != 0 else 1, + bframes = 2 if ipbmode == 2 else 0) + + for profile in cprofiles: + yield [ + case, variant["gop"], variant["slices"], variant["bframes"], + variant["bitrate"], variant.get("fps", 30), profile + ] + +def gen_avc_cbr_parameters(spec, profiles, strapi=False): keys = ("case", "gop", "slices", "bframes", "bitrate", "fps", "profile") - params = gen_avc_cbr_variants(spec, profiles) + params = gen_avc_cbr_variants(spec, profiles, strapi) return keys, params -def gen_hevc_cbr_level_variants(spec, profiles): +def gen_hevc_cbr_level_variants(spec, profiles, strapi=False): for case, params in spec.items(): for variant in copy.deepcopy(params.get("variants", dict()).get("cbr_level", [])): uprofile = variant.get("profile", None) @@ -102,26 +113,37 @@ def gen_hevc_cbr_level_parameters( spec, profiles): params = gen_hevc_cbr_level_variants(spec, profiles) return keys, params -def gen_avc_vbr_variants(spec, profiles): +def gen_avc_vbr_variants(spec, profiles, strapi=False): for case, params in spec.items(): - for variant in copy.deepcopy(params.get("variants", dict()).get("vbr", [])): - uprofile = variant.get("profile", None) - cprofiles = [uprofile] if uprofile else profiles - for profile in cprofiles: - yield [ - case, variant["gop"], variant["slices"], variant["bframes"], - variant["bitrate"], variant.get("fps", 30), variant.get("quality", 4), - variant.get("refs", 1), profile - ] - -def gen_avc_vbr_parameters(spec, profiles): + if strapi is True: + variants = copy.deepcopy(params.get("variants", dict()).get("vbr_strapi", None)) + else: + variants = copy.deepcopy(params.get("variants", dict()).get("vbr", None)) + + if variants is not None: + for variant in variants: + uprofile = variant.get("profile", None) + cprofiles = [uprofile] if uprofile else profiles + for profile in cprofiles: + yield [ + case, variant["gop"], variant["slices"], variant["bframes"], + variant["bitrate"], variant.get("fps", 30), variant.get("quality", 4), + variant.get("refs", 1), profile + ] + +def gen_avc_vbr_parameters(spec, profiles, strapi=False): keys = ("case", "gop", "slices", "bframes", "bitrate", "fps", "quality", "refs", "profile") - params = gen_avc_vbr_variants(spec, profiles) + params = gen_avc_vbr_variants(spec, profiles, strapi) return keys, params -def gen_avc_cqp_lp_variants(spec, profiles): +def gen_avc_cqp_lp_variants(spec, profiles, strapi=False): for case, params in spec.items(): - for variant in copy.deepcopy(params.get("variants", dict()).get("cqp_lp", [])): + if strapi is True: + variants = copy.deepcopy(params.get("variants", dict()).get("cqp_lp_strapi", [])) + else: + variants = copy.deepcopy(params.get("variants", dict()).get("cqp_lp", [])) + + for variant in variants: uprofile = variant.get("profile", None) cprofiles = [uprofile] if uprofile else profiles for profile in cprofiles: @@ -130,14 +152,19 @@ def gen_avc_cqp_lp_variants(spec, profiles): variant["quality"], profile ] -def gen_avc_cqp_lp_parameters(spec, profiles): +def gen_avc_cqp_lp_parameters(spec, profiles, strapi=False): keys = ("case", "gop", "slices", "bframes", "qp", "quality", "profile") - params = gen_avc_cqp_lp_variants(spec, profiles) + params = gen_avc_cqp_lp_variants(spec, profiles, strapi) return keys, params -def gen_avc_cbr_lp_variants(spec, profiles): +def gen_avc_cbr_lp_variants(spec, profiles, strapi=False): for case, params in spec.items(): - for variant in copy.deepcopy(params.get("variants", dict()).get("cbr_lp", [])): + if strapi is True: + variants = copy.deepcopy(params.get("variants", dict()).get("cbr_lp_strapi", [])) + else: + variants = copy.deepcopy(params.get("variants", dict()).get("cbr_lp", [])) + + for variant in variants: uprofile = variant.get("profile", None) cprofiles = [uprofile] if uprofile else profiles for profile in cprofiles: @@ -146,14 +173,19 @@ def gen_avc_cbr_lp_variants(spec, profiles): variant["bitrate"], variant.get("fps", 30), profile ] -def gen_avc_cbr_lp_parameters(spec, profiles): +def gen_avc_cbr_lp_parameters(spec, profiles, strapi=False): keys = ("case", "gop", "slices", "bframes", "bitrate", "fps", "profile") - params = gen_avc_cbr_lp_variants(spec, profiles) + params = gen_avc_cbr_lp_variants(spec, profiles, strapi) return keys, params -def gen_avc_vbr_lp_variants(spec, profiles): +def gen_avc_vbr_lp_variants(spec, profiles, strapi=False): for case, params in spec.items(): - for variant in copy.deepcopy(params.get("variants", dict()).get("vbr_lp", [])): + if strapi is True: + variants = copy.deepcopy(params.get("variants", dict()).get("vbr_lp_strapi", [])) + else: + variants = copy.deepcopy(params.get("variants", dict()).get("vbr_lp", [])) + + for variant in variants: uprofile = variant.get("profile", None) cprofiles = [uprofile] if uprofile else profiles for profile in cprofiles: @@ -163,9 +195,9 @@ def gen_avc_vbr_lp_variants(spec, profiles): variant.get("refs", 1), profile ] -def gen_avc_vbr_lp_parameters(spec, profiles): +def gen_avc_vbr_lp_parameters(spec, profiles, strapi=False): keys = ("case", "gop", "slices", "bframes", "bitrate", "fps", "quality", "refs", "profile") - params = gen_avc_vbr_lp_variants(spec, profiles) + params = gen_avc_vbr_lp_variants(spec, profiles, strapi) return keys, params def gen_avc_tcbrc_variants(spec, profiles): @@ -390,9 +422,14 @@ def gen_avc_rqp_parameters(spec, profiles): params = gen_avc_rqp_variants(spec, profiles) return keys, params -def gen_hevc_cqp_lp_variants(spec, profiles): +def gen_hevc_cqp_lp_variants(spec, profiles, strapi=False): for case, params in spec.items(): - for variant in copy.deepcopy(params.get("variants", dict()).get("cqp_lp", [])): + if strapi is True: + variants = copy.deepcopy(params.get("variants", dict()).get("cqp_lp_strapi", [])) + else: + variants = copy.deepcopy(params.get("variants", dict()).get("cqp_lp", [])) + + for variant in variants: uprofile = variant.get("profile", None) cprofiles = [uprofile] if uprofile else profiles for profile in cprofiles: @@ -401,14 +438,19 @@ def gen_hevc_cqp_lp_variants(spec, profiles): variant["quality"], profile ] -def gen_hevc_cqp_lp_parameters(spec, profiles): +def gen_hevc_cqp_lp_parameters(spec, profiles, strapi=False): keys = ("case", "gop", "slices", "qp", "quality", "profile") - params = gen_hevc_cqp_lp_variants(spec, profiles) + params = gen_hevc_cqp_lp_variants(spec, profiles, strapi) return keys, params -def gen_hevc_cbr_lp_variants(spec, profiles): +def gen_hevc_cbr_lp_variants(spec, profiles, strapi=False): for case, params in spec.items(): - for variant in copy.deepcopy(params.get("variants", dict()).get("cbr_lp", [])): + if strapi is True: + variants = copy.deepcopy(params.get("variants", dict()).get("cbr_lp_strapi", [])) + else: + variants = copy.deepcopy(params.get("variants", dict()).get("cbr_lp", [])) + + for variant in variants: uprofile = variant.get("profile", None) cprofiles = [uprofile] if uprofile else profiles for profile in cprofiles: @@ -417,14 +459,19 @@ def gen_hevc_cbr_lp_variants(spec, profiles): variant["bitrate"], variant.get("fps", 30), profile ] -def gen_hevc_cbr_lp_parameters(spec, profiles): +def gen_hevc_cbr_lp_parameters(spec, profiles, strapi=False): keys = ("case", "gop", "slices", "bitrate", "fps", "profile") - params = gen_hevc_cbr_lp_variants(spec, profiles) + params = gen_hevc_cbr_lp_variants(spec, profiles, strapi) return keys, params -def gen_hevc_vbr_lp_variants(spec, profiles): +def gen_hevc_vbr_lp_variants(spec, profiles, strapi=False): for case, params in spec.items(): - for variant in copy.deepcopy(params.get("variants", dict()).get("vbr_lp", [])): + if strapi is True: + variants = copy.deepcopy(params.get("variants", dict()).get("vbr_lp_strapi", [])) + else: + variants = copy.deepcopy(params.get("variants", dict()).get("vbr_lp", [])) + + for variant in variants: uprofile = variant.get("profile", None) cprofiles = [uprofile] if uprofile else profiles for profile in cprofiles: @@ -434,9 +481,9 @@ def gen_hevc_vbr_lp_variants(spec, profiles): variant.get("refs", 1), profile ] -def gen_hevc_vbr_lp_parameters(spec, profiles): +def gen_hevc_vbr_lp_parameters(spec, profiles, strapi=False): keys = ("case", "gop", "slices", "bitrate", "fps", "quality", "refs", "profile") - params = gen_hevc_vbr_lp_variants(spec, profiles) + params = gen_hevc_vbr_lp_variants(spec, profiles, strapi) return keys, params def gen_hevc_qvbr_variants(spec, profiles): @@ -802,17 +849,21 @@ def gen_vp9_vbr_lp_parameters(spec): params = gen_vp9_vbr_lp_variants(spec) return keys, params -def gen_av1_cqp_variants(spec): +def gen_av1_cqp_variants(spec, strapi=False): for case, params in spec.items(): - variants = params.get("variants", dict()).get("cqp", []) + if strapi is True: + variants = params.get("variants", dict()).get("cqp_strapi", []) + else: + variants = params.get("variants", dict()).get("cqp", []) + for variant in variants: yield [ case, variant["gop"], variant["bframes"], variant["qp"], variant["quality"], variant.get("tilecols", 0), variant.get("tilerows", 0), variant.get("profile", "profile0")] -def gen_av1_cqp_parameters(spec): +def gen_av1_cqp_parameters(spec, strapi=False): keys = ("case", "gop", "bframes", "qp", "quality", "tilecols", "tilerows", "profile") - params = gen_av1_cqp_variants(spec) + params = gen_av1_cqp_variants(spec, strapi) return keys, params def gen_av1_icq_variants(spec): @@ -841,73 +892,93 @@ def gen_av1_icq_lp_parameters(spec): params = gen_av1_icq_lp_variants(spec) return keys, params -def gen_av1_cbr_variants(spec): +def gen_av1_cbr_variants(spec, strapi=False): for case, params in spec.items(): - variants = params.get("variants", dict()).get("cbr", []) + if strapi is True: + variants = params.get("variants", dict()).get("cbr_strapi", []) + else: + variants = params.get("variants", dict()).get("cbr", []) + for variant in variants: yield [ case, variant["gop"], variant["bframes"], variant["bitrate"], variant.get("quality", 4), variant.get("tilecols", 0), variant.get("tilerows", 0), variant.get("fps", 30), variant.get("profile", "profile0")] -def gen_av1_cbr_parameters(spec): +def gen_av1_cbr_parameters(spec, strapi=False): keys = ("case", "gop", "bframes", "bitrate", "quality", "tilecols", "tilerows", "fps", "profile") - params = gen_av1_cbr_variants(spec) + params = gen_av1_cbr_variants(spec, strapi) return keys, params -def gen_av1_vbr_variants(spec): +def gen_av1_vbr_variants(spec, strapi=False): for case, params in spec.items(): - variants = params.get("variants", dict()).get("vbr", []) + if strapi is True: + variants = params.get("variants", dict()).get("vbr_strapi", []) + else: + variants = params.get("variants", dict()).get("vbr", []) + for variant in variants: yield [ case, variant["gop"], variant["bframes"], variant["bitrate"], variant.get("quality", 4), variant.get("tilecols", 0), variant.get("tilerows", 0), variant.get("fps", 30), variant.get("profile", "profile0")] -def gen_av1_vbr_parameters(spec): +def gen_av1_vbr_parameters(spec, strapi=False): keys = ("case", "gop", "bframes", "bitrate", "quality", "tilecols", "tilerows", "fps", "profile") - params = gen_av1_vbr_variants(spec) + params = gen_av1_vbr_variants(spec, strapi) return keys, params -def gen_av1_cqp_lp_variants(spec): +def gen_av1_cqp_lp_variants(spec, strapi=False): for case, params in spec.items(): - variants = params.get("variants", dict()).get("cqp_lp", []) + if strapi is True: + variants = params.get("variants", dict()).get("cqp_lp_strapi", []) + else: + variants = params.get("variants", dict()).get("cqp_lp", []) + for variant in variants: yield [ case, variant["gop"], variant["bframes"], variant["qp"], variant["quality"], variant.get("tilecols", 0), variant.get("tilerows", 0), variant.get("profile", "profile0")] -def gen_av1_cqp_lp_parameters(spec): +def gen_av1_cqp_lp_parameters(spec, strapi=False): keys = ("case", "gop", "bframes", "qp", "quality", "tilecols", "tilerows", "profile") - params = gen_av1_cqp_lp_variants(spec) + params = gen_av1_cqp_lp_variants(spec, strapi) return keys, params -def gen_av1_cbr_lp_variants(spec): +def gen_av1_cbr_lp_variants(spec, strapi=False): for case, params in spec.items(): - variants = params.get("variants", dict()).get("cbr_lp", []) + if strapi is True: + variants = params.get("variants", dict()).get("cbr_lp_strapi", []) + else: + variants = params.get("variants", dict()).get("cbr_lp", []) + for variant in variants: yield [ case, variant["gop"], variant["bframes"], variant["bitrate"], variant.get("quality", 4), variant.get("tilecols", 0), variant.get("tilerows", 0), variant.get("fps", 30), variant.get("profile", "profile0")] -def gen_av1_cbr_lp_parameters(spec): +def gen_av1_cbr_lp_parameters(spec, strapi=False): keys = ("case", "gop", "bframes", "bitrate", "quality", "tilecols", "tilerows", "fps", "profile") - params = gen_av1_cbr_lp_variants(spec) + params = gen_av1_cbr_lp_variants(spec, strapi) return keys, params -def gen_av1_vbr_lp_variants(spec): +def gen_av1_vbr_lp_variants(spec, strapi=False): for case, params in spec.items(): - variants = params.get("variants", dict()).get("vbr_lp", []) + if strapi is True: + variants = params.get("variants", dict()).get("vbr_lp_strapi", []) + else: + variants = params.get("variants", dict()).get("vbr_lp", []) + for variant in variants: yield [ case, variant["gop"], variant["bframes"], variant["bitrate"], variant.get("quality", 4), variant.get("tilecols", 0), variant.get("tilerows", 0), variant.get("fps", 30), variant.get("profile", "profile0")] -def gen_av1_vbr_lp_parameters(spec): +def gen_av1_vbr_lp_parameters(spec, strapi=False): keys = ("case", "gop", "bframes", "bitrate", "quality", "tilecols", "tilerows", "fps", "profile") - params = gen_av1_vbr_lp_variants(spec) + params = gen_av1_vbr_lp_variants(spec, strapi) return keys, params def gen_vpp_sharpen_variants(spec):