v4l2object: Use default colorimetry if that in caps is unknown
authorHou Qi <qi.hou@nxp.com>
Fri, 26 Mar 2021 08:26:22 +0000 (16:26 +0800)
committerHou Qi <qi.hou@nxp.com>
Thu, 1 Apr 2021 00:50:05 +0000 (08:50 +0800)
Some streams have unknown colorimetry in caps, but v4l2object sets
default values for each primaries. It will cause check colorimetry
fail when do gst_v4l2_video_colorimetry_matches().

To fix this, need to keep the unknown colorimetry in caps same as
the default value set by v4l2object.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/923>

sys/v4l2/gstv4l2object.c

index b5af59b..8ffd7e3 100644 (file)
@@ -3406,6 +3406,16 @@ gst_v4l2_video_colorimetry_matches (const GstVideoColorimetry * cinfo,
   if (!gst_video_info_from_caps (&info, caps))
     return FALSE;
 
+  /* if colorimetry in caps is unknown, use the default one */
+  if (info.colorimetry.primaries == GST_VIDEO_COLOR_PRIMARIES_UNKNOWN)
+    info.colorimetry.primaries = cinfo->primaries;
+  if (info.colorimetry.range == GST_VIDEO_COLOR_RANGE_UNKNOWN)
+    info.colorimetry.range = cinfo->range;
+  if (info.colorimetry.matrix == GST_VIDEO_COLOR_MATRIX_UNKNOWN)
+    info.colorimetry.matrix = cinfo->matrix;
+  if (info.colorimetry.transfer == GST_VIDEO_TRANSFER_UNKNOWN)
+    info.colorimetry.transfer = cinfo->transfer;
+
   if (gst_video_colorimetry_is_equal (&info.colorimetry, cinfo))
     return TRUE;