From 78dec1e4039c27b37ce62e70faa84d3f84543a0c Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Mon, 18 Jan 2021 15:54:43 +0100 Subject: [PATCH] v4l2object: handle GST_VIDEO_TRANSFER_BT601 V4L2 makes no difference between the BT.601 and BT.709 transfer functions [1], but GStreamer does since 1.18 [2]. Adapt gst_v4l2_object_get_colorspace() and gst_v4l2_object_set_format_full(). [1] https://linuxtv.org/downloads/v4l-dvb-apis-new/userspace-api/v4l/colorspaces-details.html#colorspace-smpte-170m-v4l2-colorspace-smpte170m [2] https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/724 Part-of: --- sys/v4l2/gstv4l2object.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sys/v4l2/gstv4l2object.c b/sys/v4l2/gstv4l2object.c index a0a599c57e..efe01a94f7 100644 --- a/sys/v4l2/gstv4l2object.c +++ b/sys/v4l2/gstv4l2object.c @@ -2054,7 +2054,7 @@ gst_v4l2_object_get_colorspace (GstV4l2Object * v4l2object, case V4L2_COLORSPACE_SMPTE170M: cinfo->range = GST_VIDEO_COLOR_RANGE_16_235; cinfo->matrix = GST_VIDEO_COLOR_MATRIX_BT601; - cinfo->transfer = GST_VIDEO_TRANSFER_BT709; + cinfo->transfer = GST_VIDEO_TRANSFER_BT601; cinfo->primaries = GST_VIDEO_COLOR_PRIMARIES_SMPTE170M; break; case V4L2_COLORSPACE_REC709: @@ -2183,6 +2183,8 @@ gst_v4l2_object_get_colorspace (GstV4l2Object * v4l2object, case V4L2_XFER_FUNC_709: if (colorspace == V4L2_COLORSPACE_BT2020 && fmt->fmt.pix.height >= 2160) cinfo->transfer = GST_VIDEO_TRANSFER_BT2020_12; + else if (colorspace == V4L2_COLORSPACE_SMPTE170M) + cinfo->transfer = GST_VIDEO_TRANSFER_BT601; else cinfo->transfer = GST_VIDEO_TRANSFER_BT709; @@ -3589,6 +3591,7 @@ gst_v4l2_object_set_format_full (GstV4l2Object * v4l2object, GstCaps * caps, case GST_VIDEO_TRANSFER_GAMMA10: transfer = V4L2_XFER_FUNC_NONE; break; + case GST_VIDEO_TRANSFER_BT601: case GST_VIDEO_TRANSFER_BT2020_12: case GST_VIDEO_TRANSFER_BT2020_10: case GST_VIDEO_TRANSFER_BT709: