From 1c9fe19b23a74cfe6f184af4532b0ebe011a6218 Mon Sep 17 00:00:00 2001 From: Tim Blechmann Date: Wed, 28 Feb 2024 11:28:23 +0800 Subject: [PATCH] v4l2: enforce a pixel aspect ratio of 1/1 if no data are available Part-of: --- .../gst-plugins-good/sys/v4l2/gstv4l2object.c | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/subprojects/gst-plugins-good/sys/v4l2/gstv4l2object.c b/subprojects/gst-plugins-good/sys/v4l2/gstv4l2object.c index d6104dbea2..ff305f544d 100644 --- a/subprojects/gst-plugins-good/sys/v4l2/gstv4l2object.c +++ b/subprojects/gst-plugins-good/sys/v4l2/gstv4l2object.c @@ -5002,10 +5002,24 @@ gst_v4l2_object_probe_caps (GstV4l2Object * v4l2object, GstCaps * filter) cropcap.type = v4l2object->type; if (v4l2object->ioctl (v4l2object->video_fd, VIDIOC_CROPCAP, &cropcap) < 0) { - if (errno != ENOTTY) - GST_WARNING_OBJECT (v4l2object->dbg_obj, - "Failed to probe pixel aspect ratio with VIDIOC_CROPCAP: %s", - g_strerror (errno)); + + switch (errno) { + case ENODATA: + case ENOTTY: + GST_INFO_OBJECT (v4l2object->dbg_obj, + "Driver does not support VIDIOC_CROPCAP (%s), assuming pixel aspect ratio 1/1", + g_strerror (errno)); + break; + + default: + GST_WARNING_OBJECT (v4l2object->dbg_obj, + "Failed to probe pixel aspect ratio with VIDIOC_CROPCAP: %s", + g_strerror (errno)); + } + v4l2object->par = g_new0 (GValue, 1); + g_value_init (v4l2object->par, GST_TYPE_FRACTION); + gst_value_set_fraction (v4l2object->par, 1, 1); + } else if (cropcap.pixelaspect.numerator && cropcap.pixelaspect.denominator) { v4l2object->par = g_new0 (GValue, 1); g_value_init (v4l2object->par, GST_TYPE_FRACTION);