From 8c116cfcd8eacb18d04c17ba0e1ae17c02a52f50 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Wed, 22 Apr 2015 18:05:24 +0200 Subject: [PATCH] v4l2: don't add the same interlace mode twice Some drivers modify the interlace mode to progressive, no matter what input you give them, make sure that we don't add the same interlace mode twice. --- sys/v4l2/gstv4l2object.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sys/v4l2/gstv4l2object.c b/sys/v4l2/gstv4l2object.c index 1f4b84e2fc..816b42c911 100644 --- a/sys/v4l2/gstv4l2object.c +++ b/sys/v4l2/gstv4l2object.c @@ -1753,7 +1753,7 @@ gst_v4l2_object_add_interlace_mode (GstV4l2Object * v4l2object, { struct v4l2_format fmt; GValue interlace_formats = { 0, }; - GstVideoInterlaceMode interlace_mode; + GstVideoInterlaceMode interlace_mode, prev = -1; const gchar *mode_strings[] = { "progressive", "interleaved", @@ -1784,6 +1784,7 @@ gst_v4l2_object_add_interlace_mode (GstV4l2Object * v4l2object, g_value_init (&interlace_enum, G_TYPE_STRING); g_value_set_string (&interlace_enum, mode_strings[interlace_mode]); gst_value_list_append_and_take_value (&interlace_formats, &interlace_enum); + prev = interlace_mode; } memset (&fmt, 0, sizeof (fmt)); @@ -1794,7 +1795,8 @@ gst_v4l2_object_add_interlace_mode (GstV4l2Object * v4l2object, fmt.fmt.pix.field = V4L2_FIELD_INTERLACED; if (gst_v4l2_object_try_fmt (v4l2object, &fmt) == 0 && - gst_v4l2_object_get_interlace_mode (fmt.fmt.pix.field, &interlace_mode)) { + gst_v4l2_object_get_interlace_mode (fmt.fmt.pix.field, &interlace_mode) && + prev != interlace_mode) { GValue interlace_enum = { 0, }; g_value_init (&interlace_enum, G_TYPE_STRING); g_value_set_string (&interlace_enum, mode_strings[interlace_mode]);