videoconvert: fix passthrough on equivalent transfer
authorMathieu Duponchelle <mathieu@centricular.com>
Tue, 23 Aug 2022 14:02:31 +0000 (16:02 +0200)
committerMathieu Duponchelle <mathieu@centricular.com>
Tue, 23 Aug 2022 14:02:31 +0000 (16:02 +0200)
When the input info and output info are equal, except for the
transfer functions that are *not* equivalent, we need to set up
a converter as we won't be passthrough.

Fixes an assertion in that case.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2929>

subprojects/gst-plugins-base/gst/videoconvertscale/gstvideoconvertscale.c

index f85ee5d..b885271 100644 (file)
@@ -792,12 +792,11 @@ gst_video_convert_scale_set_info (GstVideoFilter * filter, GstCaps * in,
    * we're converting between equivalent transfer functions, do passthrough */
   tmp_info = *in_info;
   tmp_info.colorimetry.transfer = out_info->colorimetry.transfer;
-  if (gst_video_info_is_equal (&tmp_info, out_info)) {
-    if (gst_video_transfer_function_is_equivalent (in_info->colorimetry.
-            transfer, in_info->finfo->bits, out_info->colorimetry.transfer,
-            out_info->finfo->bits)) {
-      gst_base_transform_set_passthrough (GST_BASE_TRANSFORM (filter), TRUE);
-    }
+  if (gst_video_info_is_equal (&tmp_info, out_info) &&
+      gst_video_transfer_function_is_equivalent (in_info->colorimetry.transfer,
+          in_info->finfo->bits, out_info->colorimetry.transfer,
+          out_info->finfo->bits)) {
+    gst_base_transform_set_passthrough (GST_BASE_TRANSFORM (filter), TRUE);
   } else {
     GstStructure *options;
     GST_CAT_DEBUG_OBJECT (CAT_PERFORMANCE, filter, "setup videoscaling");