From a75cfa522deabf6cbed2af3ef4bf801b23ae9cde Mon Sep 17 00:00:00 2001 From: Hou Qi Date: Fri, 26 Mar 2021 16:26:22 +0800 Subject: [PATCH] v4l2object: Use default colorimetry if that in caps is unknown 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: --- sys/v4l2/gstv4l2object.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/sys/v4l2/gstv4l2object.c b/sys/v4l2/gstv4l2object.c index b5af59bdb7..8ffd7e30e6 100644 --- a/sys/v4l2/gstv4l2object.c +++ b/sys/v4l2/gstv4l2object.c @@ -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;