From 8750bdae707711a64df490485efc63192853b1d2 Mon Sep 17 00:00:00 2001 From: Jakub Jezek Date: Fri, 25 Feb 2022 17:27:18 +0100 Subject: [PATCH 01/12] global: letter box calculated on output as last process --- openpype/plugins/publish/extract_review.py | 133 ++++++++++++++------- 1 file changed, 88 insertions(+), 45 deletions(-) diff --git a/openpype/plugins/publish/extract_review.py b/openpype/plugins/publish/extract_review.py index 5f286a53e6..9d7ad26a40 100644 --- a/openpype/plugins/publish/extract_review.py +++ b/openpype/plugins/publish/extract_review.py @@ -972,11 +972,8 @@ class ExtractReview(pyblish.api.InstancePlugin): def get_letterbox_filters( self, letter_box_def, - input_res_ratio, - output_res_ratio, - pixel_aspect, - scale_factor_by_width, - scale_factor_by_height + output_width, + output_height ): output = [] @@ -996,70 +993,119 @@ class ExtractReview(pyblish.api.InstancePlugin): l_red, l_green, l_blue ) line_color_alpha = float(l_alpha) / 255 - - if input_res_ratio == output_res_ratio: - ratio /= pixel_aspect - elif input_res_ratio < output_res_ratio: - ratio /= scale_factor_by_width - else: - ratio /= scale_factor_by_height - + height_letterbox = int(output_height - (output_width * (1 / ratio))) if state == "letterbox": if fill_color_alpha > 0: top_box = ( - "drawbox=0:0:iw:round((ih-(iw*(1/{})))/2):t=fill:c={}@{}" - ).format(ratio, fill_color_hex, fill_color_alpha) + "drawbox=0:0:{widht}:round(" + "({height}-({widht}*(1/{ratio})))/2)" + ":t=fill:c={color}@{alpha}" + ).format( + widht=output_width, + height=output_height, + ratio=ratio, + color=fill_color_hex, + alpha=fill_color_alpha + ) bottom_box = ( - "drawbox=0:ih-round((ih-(iw*(1/{0})))/2)" - ":iw:round((ih-(iw*(1/{0})))/2):t=fill:c={1}@{2}" - ).format(ratio, fill_color_hex, fill_color_alpha) + "drawbox=0:{height}-round(" + "({height}-({widht}*(1/{ratio})))/2)" + ":{widht}:round(({height}-({widht}" + "*(1/{ratio})))/2):t=fill:" + "c={color}@{alpha}" + ).format( + widht=output_width, + height=output_height, + ratio=ratio, + color=fill_color_hex, + alpha=fill_color_alpha + ) - output.extend([top_box, bottom_box]) + if height_letterbox > 0: + output.extend([top_box, bottom_box]) if line_color_alpha > 0 and line_thickness > 0: top_line = ( - "drawbox=0:round((ih-(iw*(1/{0})))/2)-{1}:iw:{1}:" - "t=fill:c={2}@{3}" + "drawbox=0:round(({height}-({widht}" + "*(1/{ratio})))/2)-{l_thick}:{widht}:{l_thick}:" + "t=fill:c={l_color}@{l_alpha}" ).format( - ratio, line_thickness, line_color_hex, line_color_alpha + widht=output_width, + height=output_height, + ratio=ratio, + l_thick=line_thickness, + l_color=line_color_hex, + l_alpha=line_color_alpha ) bottom_line = ( - "drawbox=0:ih-round((ih-(iw*(1/{})))/2)" - ":iw:{}:t=fill:c={}@{}" + "drawbox=0:{height}-round(({height}-({widht}" + "*(1/{ratio})))/2)" + ":{widht}:{l_thick}:t=fill:c={l_color}@{l_alpha}" ).format( - ratio, line_thickness, line_color_hex, line_color_alpha + widht=output_width, + height=output_height, + ratio=ratio, + l_thick=line_thickness, + l_color=line_color_hex, + l_alpha=line_color_alpha ) - output.extend([top_line, bottom_line]) + if height_letterbox > 0: + output.extend([top_line, bottom_line]) elif state == "pillar": if fill_color_alpha > 0: left_box = ( - "drawbox=0:0:round((iw-(ih*{}))/2):ih:t=fill:c={}@{}" - ).format(ratio, fill_color_hex, fill_color_alpha) + "drawbox=0:0:round(({widht}-({height}" + "*{ratio}))/2):{height}:t=fill:c={color}@{alpha}" + ).format( + widht=output_width, + height=output_height, + ratio=ratio, + color=fill_color_hex, + alpha=fill_color_alpha + ) right_box = ( - "drawbox=iw-round((iw-(ih*{0}))/2))" - ":0:round((iw-(ih*{0}))/2):ih:t=fill:c={1}@{2}" - ).format(ratio, fill_color_hex, fill_color_alpha) - - output.extend([left_box, right_box]) + "drawbox={widht}-round(({widht}-({height}*{ratio}))/2))" + ":0:round(({widht}-({height}*{ratio}))/2):{height}" + ":t=fill:c={color}@{alpha}" + ).format( + widht=output_width, + height=output_height, + ratio=ratio, + color=fill_color_hex, + alpha=fill_color_alpha + ) + if height_letterbox > 0: + output.extend([left_box, right_box]) if line_color_alpha > 0 and line_thickness > 0: left_line = ( - "drawbox=round((iw-(ih*{}))/2):0:{}:ih:t=fill:c={}@{}" + "drawbox=round(({widht}-({height}*{ratio}))/2)" + ":0:{l_thick}:{height}:t=fill:c={l_color}@{l_alpha}" ).format( - ratio, line_thickness, line_color_hex, line_color_alpha + widht=output_width, + height=output_height, + ratio=ratio, + l_thick=line_thickness, + l_color=line_color_hex, + l_alpha=line_color_alpha ) right_line = ( - "drawbox=iw-round((iw-(ih*{}))/2))" - ":0:{}:ih:t=fill:c={}@{}" + "drawbox={widht}-round(({widht}-({height}*{ratio}))/2))" + ":0:{l_thick}:{height}:t=fill:c={l_color}@{l_alpha}" ).format( - ratio, line_thickness, line_color_hex, line_color_alpha + widht=output_width, + height=output_height, + ratio=ratio, + l_thick=line_thickness, + l_color=line_color_hex, + l_alpha=line_color_alpha ) - - output.extend([left_line, right_line]) + if height_letterbox > 0: + output.extend([left_line, right_line]) else: raise ValueError( @@ -1259,11 +1305,8 @@ class ExtractReview(pyblish.api.InstancePlugin): filters.extend( self.get_letterbox_filters( letter_box_def, - input_res_ratio, - output_res_ratio, - pixel_aspect, - scale_factor_by_width, - scale_factor_by_height + output_width, + output_height ) ) From 8f92f392586b9e43d8c27317b0ab118dd9185582 Mon Sep 17 00:00:00 2001 From: Jakub Jezek Date: Thu, 3 Mar 2022 12:57:33 +0100 Subject: [PATCH 02/12] general: improving letter/pillar box ratio exception --- openpype/plugins/publish/extract_review.py | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/openpype/plugins/publish/extract_review.py b/openpype/plugins/publish/extract_review.py index 9d7ad26a40..ae96f668f2 100644 --- a/openpype/plugins/publish/extract_review.py +++ b/openpype/plugins/publish/extract_review.py @@ -993,8 +993,13 @@ class ExtractReview(pyblish.api.InstancePlugin): l_red, l_green, l_blue ) line_color_alpha = float(l_alpha) / 255 - height_letterbox = int(output_height - (output_width * (1 / ratio))) - if state == "letterbox": + test_ratio_width = int( + (output_height - (output_width * (1 / ratio))) / 2 + ) + test_ratio_height = int( + (output_width - (output_height * ratio)) / 2 + ) + if state == "letterbox" and test_ratio_width: if fill_color_alpha > 0: top_box = ( "drawbox=0:0:{widht}:round(" @@ -1022,8 +1027,7 @@ class ExtractReview(pyblish.api.InstancePlugin): alpha=fill_color_alpha ) - if height_letterbox > 0: - output.extend([top_box, bottom_box]) + output.extend([top_box, bottom_box]) if line_color_alpha > 0 and line_thickness > 0: top_line = ( @@ -1050,10 +1054,10 @@ class ExtractReview(pyblish.api.InstancePlugin): l_color=line_color_hex, l_alpha=line_color_alpha ) - if height_letterbox > 0: - output.extend([top_line, bottom_line]) - elif state == "pillar": + output.extend([top_line, bottom_line]) + + elif state == "pillar" and test_ratio_height: if fill_color_alpha > 0: left_box = ( "drawbox=0:0:round(({widht}-({height}" From 62695b36c4c559cb461a6d4438a754e251e53112 Mon Sep 17 00:00:00 2001 From: Jakub Jezek Date: Thu, 3 Mar 2022 13:00:33 +0100 Subject: [PATCH 03/12] hound catches --- openpype/plugins/publish/extract_review.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/openpype/plugins/publish/extract_review.py b/openpype/plugins/publish/extract_review.py index ae96f668f2..c75eea4e06 100644 --- a/openpype/plugins/publish/extract_review.py +++ b/openpype/plugins/publish/extract_review.py @@ -1026,7 +1026,6 @@ class ExtractReview(pyblish.api.InstancePlugin): color=fill_color_hex, alpha=fill_color_alpha ) - output.extend([top_box, bottom_box]) if line_color_alpha > 0 and line_thickness > 0: @@ -1054,7 +1053,6 @@ class ExtractReview(pyblish.api.InstancePlugin): l_color=line_color_hex, l_alpha=line_color_alpha ) - output.extend([top_line, bottom_line]) elif state == "pillar" and test_ratio_height: @@ -1081,8 +1079,7 @@ class ExtractReview(pyblish.api.InstancePlugin): color=fill_color_hex, alpha=fill_color_alpha ) - if height_letterbox > 0: - output.extend([left_box, right_box]) + output.extend([left_box, right_box]) if line_color_alpha > 0 and line_thickness > 0: left_line = ( @@ -1108,8 +1105,7 @@ class ExtractReview(pyblish.api.InstancePlugin): l_color=line_color_hex, l_alpha=line_color_alpha ) - if height_letterbox > 0: - output.extend([left_line, right_line]) + output.extend([left_line, right_line]) else: raise ValueError( From 4c305b16772e56c4d3e7e4dce6e22a73040f0435 Mon Sep 17 00:00:00 2001 From: Jakub Jezek Date: Mon, 7 Mar 2022 16:04:21 +0100 Subject: [PATCH 04/12] global: settings removing pillar/letter box enumerator --- .../settings/defaults/project_settings/global.json | 1 - .../schemas/schema_global_publish.json | 13 ------------- 2 files changed, 14 deletions(-) diff --git a/openpype/settings/defaults/project_settings/global.json b/openpype/settings/defaults/project_settings/global.json index f08bee8b2d..9c44d9bc86 100644 --- a/openpype/settings/defaults/project_settings/global.json +++ b/openpype/settings/defaults/project_settings/global.json @@ -107,7 +107,6 @@ "letter_box": { "enabled": false, "ratio": 0.0, - "state": "letterbox", "fill_color": [ 0, 0, diff --git a/openpype/settings/entities/schemas/projects_schema/schemas/schema_global_publish.json b/openpype/settings/entities/schemas/projects_schema/schemas/schema_global_publish.json index e608e9ff63..3eea7ccb30 100644 --- a/openpype/settings/entities/schemas/projects_schema/schemas/schema_global_publish.json +++ b/openpype/settings/entities/schemas/projects_schema/schemas/schema_global_publish.json @@ -366,19 +366,6 @@ "minimum": 0, "maximum": 10000 }, - { - "key": "state", - "label": "Type", - "type": "enum", - "enum_items": [ - { - "letterbox": "Letterbox" - }, - { - "pillar": "Pillar" - } - ] - }, { "type": "color", "label": "Fill Color", From e1dd41274344533eee44759672a17175f9fadd1b Mon Sep 17 00:00:00 2001 From: Jakub Jezek Date: Mon, 7 Mar 2022 16:05:16 +0100 Subject: [PATCH 05/12] global: extract review with dynamic letter/pillar box switch --- openpype/plugins/publish/extract_review.py | 48 +++++++++++----------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/openpype/plugins/publish/extract_review.py b/openpype/plugins/publish/extract_review.py index a76c0fa450..b70b81e18d 100644 --- a/openpype/plugins/publish/extract_review.py +++ b/openpype/plugins/publish/extract_review.py @@ -978,7 +978,6 @@ class ExtractReview(pyblish.api.InstancePlugin): output = [] ratio = letter_box_def["ratio"] - state = letter_box_def["state"] fill_color = letter_box_def["fill_color"] f_red, f_green, f_blue, f_alpha = fill_color fill_color_hex = "{0:0>2X}{1:0>2X}{2:0>2X}".format( @@ -993,13 +992,13 @@ class ExtractReview(pyblish.api.InstancePlugin): l_red, l_green, l_blue ) line_color_alpha = float(l_alpha) / 255 - test_ratio_width = int( - (output_height - (output_width * (1 / ratio))) / 2 - ) - test_ratio_height = int( - (output_width - (output_height * ratio)) / 2 - ) - if state == "letterbox" and test_ratio_width: + + # test ratios and define if pillar or letter boxes + output_ratio = output_width / output_height + pillar = output_ratio > ratio + need_mask = format(output_ratio, ".3f") != format(ratio, ".3f") + + if need_mask and not pillar: if fill_color_alpha > 0: top_box = ( "drawbox=0:0:{widht}:round(" @@ -1055,7 +1054,7 @@ class ExtractReview(pyblish.api.InstancePlugin): ) output.extend([top_line, bottom_line]) - elif state == "pillar" and test_ratio_height: + elif need_mask and pillar: if fill_color_alpha > 0: left_box = ( "drawbox=0:0:round(({widht}-({height}" @@ -1308,21 +1307,6 @@ class ExtractReview(pyblish.api.InstancePlugin): "scale_factor_by_height: `{}`".format(scale_factor_by_height) ) - # letter_box - if letter_box_enabled: - filters.extend([ - "scale={}x{}:flags=lanczos".format( - output_width, output_height - ), - "setsar=1" - ]) - filters.extend( - self.get_letterbox_filters( - letter_box_def, - output_width, - output_height - ) - ) # scaling none square pixels and 1920 width if ( @@ -1362,6 +1346,22 @@ class ExtractReview(pyblish.api.InstancePlugin): "setsar=1" ]) + # letter_box + if letter_box_enabled: + filters.extend([ + "scale={}x{}:flags=lanczos".format( + output_width, output_height + ), + "setsar=1" + ]) + filters.extend( + self.get_letterbox_filters( + letter_box_def, + output_width, + output_height + ) + ) + new_repre["resolutionWidth"] = output_width new_repre["resolutionHeight"] = output_height From f566779531e83df670f474fcc2652f84408f0234 Mon Sep 17 00:00:00 2001 From: Jakub Jezek Date: Mon, 7 Mar 2022 16:30:01 +0100 Subject: [PATCH 06/12] global: shifting order for `reformated` tag processing --- openpype/plugins/publish/extract_review.py | 33 +++++++++++----------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/openpype/plugins/publish/extract_review.py b/openpype/plugins/publish/extract_review.py index b70b81e18d..fedeee6f08 100644 --- a/openpype/plugins/publish/extract_review.py +++ b/openpype/plugins/publish/extract_review.py @@ -1124,6 +1124,9 @@ class ExtractReview(pyblish.api.InstancePlugin): """ filters = [] + # Get instance data + pixel_aspect = temp_data["pixel_aspect"] + # NOTE Skipped using instance's resolution full_input_path_single_file = temp_data["full_input_path_single_file"] try: @@ -1158,6 +1161,19 @@ class ExtractReview(pyblish.api.InstancePlugin): output_width = output_def.get("width") or None output_height = output_def.get("height") or None + # if nuke baking profile was having set reformat node + reformat_in_baking = bool("reformated" in new_repre["tags"]) + self.log.debug("reformat_in_baking: `{}`".format(reformat_in_baking)) + + if reformat_in_baking: + self.log.debug(( + "Using resolution from input. It is already " + "reformated from baking process" + )) + output_width = output_width or input_width + output_height = output_height or input_height + pixel_aspect = 1 + # Overscal color overscan_color_value = "black" overscan_color = output_def.get("overscan_color") @@ -1189,9 +1205,6 @@ class ExtractReview(pyblish.api.InstancePlugin): letter_box_def = output_def["letter_box"] letter_box_enabled = letter_box_def["enabled"] - # Get instance data - pixel_aspect = temp_data["pixel_aspect"] - # Make sure input width and height is not an odd number input_width_is_odd = bool(input_width % 2 != 0) input_height_is_odd = bool(input_height % 2 != 0) @@ -1216,9 +1229,6 @@ class ExtractReview(pyblish.api.InstancePlugin): self.log.debug("input_width: `{}`".format(input_width)) self.log.debug("input_height: `{}`".format(input_height)) - reformat_in_baking = bool("reformated" in new_repre["tags"]) - self.log.debug("reformat_in_baking: `{}`".format(reformat_in_baking)) - # Use instance resolution if output definition has not set it. if output_width is None or output_height is None: output_width = temp_data["resolution_width"] @@ -1230,17 +1240,6 @@ class ExtractReview(pyblish.api.InstancePlugin): output_width = input_width output_height = input_height - if reformat_in_baking: - self.log.debug(( - "Using resolution from input. It is already " - "reformated from baking process" - )) - output_width = input_width - output_height = input_height - pixel_aspect = 1 - new_repre["resolutionWidth"] = input_width - new_repre["resolutionHeight"] = input_height - output_width = int(output_width) output_height = int(output_height) From 8617b6d3892684c6e9dfd255e4c563151dd315b1 Mon Sep 17 00:00:00 2001 From: Jakub Jezek Date: Tue, 8 Mar 2022 11:57:06 +0100 Subject: [PATCH 07/12] processing review feedback --- openpype/plugins/publish/extract_review.py | 42 ++++++++++------------ 1 file changed, 18 insertions(+), 24 deletions(-) diff --git a/openpype/plugins/publish/extract_review.py b/openpype/plugins/publish/extract_review.py index fedeee6f08..fb0e553a9e 100644 --- a/openpype/plugins/publish/extract_review.py +++ b/openpype/plugins/publish/extract_review.py @@ -1107,8 +1107,10 @@ class ExtractReview(pyblish.api.InstancePlugin): output.extend([left_line, right_line]) else: - raise ValueError( - "Letterbox state \"{}\" is not recognized".format(state) + raise ValueError(( + "Letterbox not working: ratio set \"{}\", " + "Image ratio\"{}\"").format( + format(ratio, ".3f"), format(output_ratio, ".3f")) ) return output @@ -1124,9 +1126,20 @@ class ExtractReview(pyblish.api.InstancePlugin): """ filters = [] + # if reformat input video file is already reforamted from upstream + reformat_in_baking = bool("reformated" in new_repre["tags"]) + self.log.debug("reformat_in_baking: `{}`".format(reformat_in_baking)) + # Get instance data pixel_aspect = temp_data["pixel_aspect"] + if reformat_in_baking: + self.log.debug(( + "Using resolution from input. It is already " + "reformated from upstream process" + )) + pixel_aspect = 1 + # NOTE Skipped using instance's resolution full_input_path_single_file = temp_data["full_input_path_single_file"] try: @@ -1161,19 +1174,6 @@ class ExtractReview(pyblish.api.InstancePlugin): output_width = output_def.get("width") or None output_height = output_def.get("height") or None - # if nuke baking profile was having set reformat node - reformat_in_baking = bool("reformated" in new_repre["tags"]) - self.log.debug("reformat_in_baking: `{}`".format(reformat_in_baking)) - - if reformat_in_baking: - self.log.debug(( - "Using resolution from input. It is already " - "reformated from baking process" - )) - output_width = output_width or input_width - output_height = output_height or input_height - pixel_aspect = 1 - # Overscal color overscan_color_value = "black" overscan_color = output_def.get("overscan_color") @@ -1202,9 +1202,6 @@ class ExtractReview(pyblish.api.InstancePlugin): output_width = input_width output_height = input_height - letter_box_def = output_def["letter_box"] - letter_box_enabled = letter_box_def["enabled"] - # Make sure input width and height is not an odd number input_width_is_odd = bool(input_width % 2 != 0) input_height_is_odd = bool(input_height % 2 != 0) @@ -1263,6 +1260,9 @@ class ExtractReview(pyblish.api.InstancePlugin): "Output resolution is {}x{}".format(output_width, output_height) ) + letter_box_def = output_def["letter_box"] + letter_box_enabled = letter_box_def["enabled"] + # Skip processing if resolution is same as input's and letterbox is # not set if ( @@ -1347,12 +1347,6 @@ class ExtractReview(pyblish.api.InstancePlugin): # letter_box if letter_box_enabled: - filters.extend([ - "scale={}x{}:flags=lanczos".format( - output_width, output_height - ), - "setsar=1" - ]) filters.extend( self.get_letterbox_filters( letter_box_def, From f753143eec7fb1328838aca2ae12338ae4ac2fd8 Mon Sep 17 00:00:00 2001 From: Jakub Jezek Date: Tue, 8 Mar 2022 11:59:22 +0100 Subject: [PATCH 08/12] removing what was already removed --- repos/avalon-unreal-integration | 1 - 1 file changed, 1 deletion(-) delete mode 160000 repos/avalon-unreal-integration diff --git a/repos/avalon-unreal-integration b/repos/avalon-unreal-integration deleted file mode 160000 index 43f6ea9439..0000000000 --- a/repos/avalon-unreal-integration +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 43f6ea943980b29c02a170942b566ae11f2b7080 From 365901656f5ef395d394b051a2483c39a68d0cf2 Mon Sep 17 00:00:00 2001 From: Jakub Jezek Date: Tue, 8 Mar 2022 13:50:59 +0100 Subject: [PATCH 09/12] redundant code --- openpype/plugins/publish/extract_review.py | 1 - 1 file changed, 1 deletion(-) diff --git a/openpype/plugins/publish/extract_review.py b/openpype/plugins/publish/extract_review.py index fb0e553a9e..d2d361228a 100644 --- a/openpype/plugins/publish/extract_review.py +++ b/openpype/plugins/publish/extract_review.py @@ -19,7 +19,6 @@ from openpype.lib import ( should_convert_for_ffmpeg, convert_for_ffmpeg, - get_transcode_temp_directory, get_transcode_temp_directory ) import speedcopy From 2d9cecd1ae4cd9bfbd8ac40ffe0d1395591d097d Mon Sep 17 00:00:00 2001 From: Jakub Trllo Date: Tue, 8 Mar 2022 15:20:02 +0100 Subject: [PATCH 10/12] replace widht with width --- openpype/plugins/publish/extract_review.py | 42 +++++++++++----------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/openpype/plugins/publish/extract_review.py b/openpype/plugins/publish/extract_review.py index d2d361228a..96a90a63b7 100644 --- a/openpype/plugins/publish/extract_review.py +++ b/openpype/plugins/publish/extract_review.py @@ -1000,11 +1000,11 @@ class ExtractReview(pyblish.api.InstancePlugin): if need_mask and not pillar: if fill_color_alpha > 0: top_box = ( - "drawbox=0:0:{widht}:round(" - "({height}-({widht}*(1/{ratio})))/2)" + "drawbox=0:0:{width}:round(" + "({height}-({width}*(1/{ratio})))/2)" ":t=fill:c={color}@{alpha}" ).format( - widht=output_width, + width=output_width, height=output_height, ratio=ratio, color=fill_color_hex, @@ -1013,12 +1013,12 @@ class ExtractReview(pyblish.api.InstancePlugin): bottom_box = ( "drawbox=0:{height}-round(" - "({height}-({widht}*(1/{ratio})))/2)" - ":{widht}:round(({height}-({widht}" + "({height}-({width}*(1/{ratio})))/2)" + ":{width}:round(({height}-({width}" "*(1/{ratio})))/2):t=fill:" "c={color}@{alpha}" ).format( - widht=output_width, + width=output_width, height=output_height, ratio=ratio, color=fill_color_hex, @@ -1028,11 +1028,11 @@ class ExtractReview(pyblish.api.InstancePlugin): if line_color_alpha > 0 and line_thickness > 0: top_line = ( - "drawbox=0:round(({height}-({widht}" - "*(1/{ratio})))/2)-{l_thick}:{widht}:{l_thick}:" + "drawbox=0:round(({height}-({width}" + "*(1/{ratio})))/2)-{l_thick}:{width}:{l_thick}:" "t=fill:c={l_color}@{l_alpha}" ).format( - widht=output_width, + width=output_width, height=output_height, ratio=ratio, l_thick=line_thickness, @@ -1040,11 +1040,11 @@ class ExtractReview(pyblish.api.InstancePlugin): l_alpha=line_color_alpha ) bottom_line = ( - "drawbox=0:{height}-round(({height}-({widht}" + "drawbox=0:{height}-round(({height}-({width}" "*(1/{ratio})))/2)" - ":{widht}:{l_thick}:t=fill:c={l_color}@{l_alpha}" + ":{width}:{l_thick}:t=fill:c={l_color}@{l_alpha}" ).format( - widht=output_width, + width=output_width, height=output_height, ratio=ratio, l_thick=line_thickness, @@ -1056,10 +1056,10 @@ class ExtractReview(pyblish.api.InstancePlugin): elif need_mask and pillar: if fill_color_alpha > 0: left_box = ( - "drawbox=0:0:round(({widht}-({height}" + "drawbox=0:0:round(({width}-({height}" "*{ratio}))/2):{height}:t=fill:c={color}@{alpha}" ).format( - widht=output_width, + width=output_width, height=output_height, ratio=ratio, color=fill_color_hex, @@ -1067,11 +1067,11 @@ class ExtractReview(pyblish.api.InstancePlugin): ) right_box = ( - "drawbox={widht}-round(({widht}-({height}*{ratio}))/2))" - ":0:round(({widht}-({height}*{ratio}))/2):{height}" + "drawbox={width}-round(({width}-({height}*{ratio}))/2))" + ":0:round(({width}-({height}*{ratio}))/2):{height}" ":t=fill:c={color}@{alpha}" ).format( - widht=output_width, + width=output_width, height=output_height, ratio=ratio, color=fill_color_hex, @@ -1081,10 +1081,10 @@ class ExtractReview(pyblish.api.InstancePlugin): if line_color_alpha > 0 and line_thickness > 0: left_line = ( - "drawbox=round(({widht}-({height}*{ratio}))/2)" + "drawbox=round(({width}-({height}*{ratio}))/2)" ":0:{l_thick}:{height}:t=fill:c={l_color}@{l_alpha}" ).format( - widht=output_width, + width=output_width, height=output_height, ratio=ratio, l_thick=line_thickness, @@ -1093,10 +1093,10 @@ class ExtractReview(pyblish.api.InstancePlugin): ) right_line = ( - "drawbox={widht}-round(({widht}-({height}*{ratio}))/2))" + "drawbox={width}-round(({width}-({height}*{ratio}))/2))" ":0:{l_thick}:{height}:t=fill:c={l_color}@{l_alpha}" ).format( - widht=output_width, + width=output_width, height=output_height, ratio=ratio, l_thick=line_thickness, From 404232c37a498af5712b1cb8683fd5b8c883121e Mon Sep 17 00:00:00 2001 From: Jakub Trllo Date: Tue, 8 Mar 2022 15:21:07 +0100 Subject: [PATCH 11/12] skip need mask checks --- openpype/plugins/publish/extract_review.py | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/openpype/plugins/publish/extract_review.py b/openpype/plugins/publish/extract_review.py index 96a90a63b7..ce7c06bd3c 100644 --- a/openpype/plugins/publish/extract_review.py +++ b/openpype/plugins/publish/extract_review.py @@ -996,8 +996,10 @@ class ExtractReview(pyblish.api.InstancePlugin): output_ratio = output_width / output_height pillar = output_ratio > ratio need_mask = format(output_ratio, ".3f") != format(ratio, ".3f") + if not need_mask: + return [] - if need_mask and not pillar: + if not pillar: if fill_color_alpha > 0: top_box = ( "drawbox=0:0:{width}:round(" @@ -1053,7 +1055,7 @@ class ExtractReview(pyblish.api.InstancePlugin): ) output.extend([top_line, bottom_line]) - elif need_mask and pillar: + else: if fill_color_alpha > 0: left_box = ( "drawbox=0:0:round(({width}-({height}" @@ -1105,13 +1107,6 @@ class ExtractReview(pyblish.api.InstancePlugin): ) output.extend([left_line, right_line]) - else: - raise ValueError(( - "Letterbox not working: ratio set \"{}\", " - "Image ratio\"{}\"").format( - format(ratio, ".3f"), format(output_ratio, ".3f")) - ) - return output def rescaling_filters(self, temp_data, output_def, new_repre): From 70e158792bac4d9d638e1c2838ef335213aeee64 Mon Sep 17 00:00:00 2001 From: Jakub Trllo Date: Tue, 8 Mar 2022 15:22:34 +0100 Subject: [PATCH 12/12] fixed pillar boxes --- openpype/plugins/publish/extract_review.py | 45 +++++++++++++--------- 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/openpype/plugins/publish/extract_review.py b/openpype/plugins/publish/extract_review.py index ce7c06bd3c..bec1f75425 100644 --- a/openpype/plugins/publish/extract_review.py +++ b/openpype/plugins/publish/extract_review.py @@ -993,7 +993,10 @@ class ExtractReview(pyblish.api.InstancePlugin): line_color_alpha = float(l_alpha) / 255 # test ratios and define if pillar or letter boxes - output_ratio = output_width / output_height + output_ratio = float(output_width) / float(output_height) + self.log.debug("Output ratio: {} LetterBox ratio: {}".format( + output_ratio, ratio + )) pillar = output_ratio > ratio need_mask = format(output_ratio, ".3f") != format(ratio, ".3f") if not need_mask: @@ -1002,8 +1005,8 @@ class ExtractReview(pyblish.api.InstancePlugin): if not pillar: if fill_color_alpha > 0: top_box = ( - "drawbox=0:0:{width}:round(" - "({height}-({width}*(1/{ratio})))/2)" + "drawbox=0:0:{width}" + ":round(({height}-({width}/{ratio}))/2)" ":t=fill:c={color}@{alpha}" ).format( width=output_width, @@ -1014,11 +1017,11 @@ class ExtractReview(pyblish.api.InstancePlugin): ) bottom_box = ( - "drawbox=0:{height}-round(" - "({height}-({width}*(1/{ratio})))/2)" - ":{width}:round(({height}-({width}" - "*(1/{ratio})))/2):t=fill:" - "c={color}@{alpha}" + "drawbox=0" + ":{height}-round(({height}-({width}/{ratio}))/2)" + ":{width}" + ":round(({height}-({width}/{ratio}))/2)" + ":t=fill:c={color}@{alpha}" ).format( width=output_width, height=output_height, @@ -1030,9 +1033,9 @@ class ExtractReview(pyblish.api.InstancePlugin): if line_color_alpha > 0 and line_thickness > 0: top_line = ( - "drawbox=0:round(({height}-({width}" - "*(1/{ratio})))/2)-{l_thick}:{width}:{l_thick}:" - "t=fill:c={l_color}@{l_alpha}" + "drawbox=0" + ":round(({height}-({width}/{ratio}))/2)-{l_thick}" + ":{width}:{l_thick}:t=fill:c={l_color}@{l_alpha}" ).format( width=output_width, height=output_height, @@ -1042,8 +1045,8 @@ class ExtractReview(pyblish.api.InstancePlugin): l_alpha=line_color_alpha ) bottom_line = ( - "drawbox=0:{height}-round(({height}-({width}" - "*(1/{ratio})))/2)" + "drawbox=0" + ":{height}-round(({height}-({width}/{ratio}))/2)" ":{width}:{l_thick}:t=fill:c={l_color}@{l_alpha}" ).format( width=output_width, @@ -1058,8 +1061,10 @@ class ExtractReview(pyblish.api.InstancePlugin): else: if fill_color_alpha > 0: left_box = ( - "drawbox=0:0:round(({width}-({height}" - "*{ratio}))/2):{height}:t=fill:c={color}@{alpha}" + "drawbox=0:0" + ":round(({width}-({height}*{ratio}))/2)" + ":{height}" + ":t=fill:c={color}@{alpha}" ).format( width=output_width, height=output_height, @@ -1069,8 +1074,11 @@ class ExtractReview(pyblish.api.InstancePlugin): ) right_box = ( - "drawbox={width}-round(({width}-({height}*{ratio}))/2))" - ":0:round(({width}-({height}*{ratio}))/2):{height}" + "drawbox=" + "{width}-round(({width}-({height}*{ratio}))/2)" + ":0" + ":round(({width}-({height}*{ratio}))/2)" + ":{height}" ":t=fill:c={color}@{alpha}" ).format( width=output_width, @@ -1095,7 +1103,7 @@ class ExtractReview(pyblish.api.InstancePlugin): ) right_line = ( - "drawbox={width}-round(({width}-({height}*{ratio}))/2))" + "drawbox={width}-round(({width}-({height}*{ratio}))/2)" ":0:{l_thick}:{height}:t=fill:c={l_color}@{l_alpha}" ).format( width=output_width, @@ -1300,7 +1308,6 @@ class ExtractReview(pyblish.api.InstancePlugin): "scale_factor_by_height: `{}`".format(scale_factor_by_height) ) - # scaling none square pixels and 1920 width if ( input_height != output_height