mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 12:11:13 +00:00
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.
This commit is contained in:
parent
c884a3b3a5
commit
8c116cfcd8
1 changed files with 4 additions and 2 deletions
|
@ -1753,7 +1753,7 @@ gst_v4l2_object_add_interlace_mode (GstV4l2Object * v4l2object,
|
||||||
{
|
{
|
||||||
struct v4l2_format fmt;
|
struct v4l2_format fmt;
|
||||||
GValue interlace_formats = { 0, };
|
GValue interlace_formats = { 0, };
|
||||||
GstVideoInterlaceMode interlace_mode;
|
GstVideoInterlaceMode interlace_mode, prev = -1;
|
||||||
|
|
||||||
const gchar *mode_strings[] = { "progressive",
|
const gchar *mode_strings[] = { "progressive",
|
||||||
"interleaved",
|
"interleaved",
|
||||||
|
@ -1784,6 +1784,7 @@ gst_v4l2_object_add_interlace_mode (GstV4l2Object * v4l2object,
|
||||||
g_value_init (&interlace_enum, G_TYPE_STRING);
|
g_value_init (&interlace_enum, G_TYPE_STRING);
|
||||||
g_value_set_string (&interlace_enum, mode_strings[interlace_mode]);
|
g_value_set_string (&interlace_enum, mode_strings[interlace_mode]);
|
||||||
gst_value_list_append_and_take_value (&interlace_formats, &interlace_enum);
|
gst_value_list_append_and_take_value (&interlace_formats, &interlace_enum);
|
||||||
|
prev = interlace_mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
memset (&fmt, 0, sizeof (fmt));
|
memset (&fmt, 0, sizeof (fmt));
|
||||||
|
@ -1794,7 +1795,8 @@ gst_v4l2_object_add_interlace_mode (GstV4l2Object * v4l2object,
|
||||||
fmt.fmt.pix.field = V4L2_FIELD_INTERLACED;
|
fmt.fmt.pix.field = V4L2_FIELD_INTERLACED;
|
||||||
|
|
||||||
if (gst_v4l2_object_try_fmt (v4l2object, &fmt) == 0 &&
|
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, };
|
GValue interlace_enum = { 0, };
|
||||||
g_value_init (&interlace_enum, G_TYPE_STRING);
|
g_value_init (&interlace_enum, G_TYPE_STRING);
|
||||||
g_value_set_string (&interlace_enum, mode_strings[interlace_mode]);
|
g_value_set_string (&interlace_enum, mode_strings[interlace_mode]);
|
||||||
|
|
Loading…
Reference in a new issue