From dfdc15c548a0df957bfd9cb6944f4f099bd52b03 Mon Sep 17 00:00:00 2001 From: "Reynaldo H. Verdejo Pinochet" Date: Fri, 1 Jul 2016 22:53:33 -0700 Subject: [PATCH] v4l2src: use gst_caps_intersect_full in negotiate() Instead of reimplementing the GST_CAPS_INTERSECT_FIRST interection mode. https://bugzilla.gnome.org/show_bug.cgi?id=768195 --- sys/v4l2/gstv4l2src.c | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/sys/v4l2/gstv4l2src.c b/sys/v4l2/gstv4l2src.c index a6d34b1..3b722b2 100644 --- a/sys/v4l2/gstv4l2src.c +++ b/sys/v4l2/gstv4l2src.c @@ -308,27 +308,13 @@ gst_v4l2src_negotiate (GstBaseSrc * basesrc) peercaps = gst_pad_peer_query_caps (GST_BASE_SRC_PAD (basesrc), NULL); GST_DEBUG_OBJECT (basesrc, "caps of peer: %" GST_PTR_FORMAT, peercaps); LOG_CAPS (basesrc, peercaps); + if (peercaps && !gst_caps_is_any (peercaps)) { GstCaps *icaps = NULL; - int i; /* Prefer the first caps we are compatible with that the peer proposed */ - for (i = 0; i < gst_caps_get_size (peercaps); i++) { - /* get intersection */ - GstCaps *ipcaps = gst_caps_copy_nth (peercaps, i); - - GST_DEBUG_OBJECT (basesrc, "peer: %" GST_PTR_FORMAT, ipcaps); - LOG_CAPS (basesrc, ipcaps); - - icaps = gst_caps_intersect (thiscaps, ipcaps); - gst_caps_unref (ipcaps); - - if (!gst_caps_is_empty (icaps)) - break; - - gst_caps_unref (icaps); - icaps = NULL; - } + icaps = gst_caps_intersect_full (peercaps, thiscaps, + GST_CAPS_INTERSECT_FIRST); GST_DEBUG_OBJECT (basesrc, "intersect: %" GST_PTR_FORMAT, icaps); LOG_CAPS (basesrc, icaps); @@ -343,6 +329,7 @@ gst_v4l2src_negotiate (GstBaseSrc * basesrc) if (gst_structure_get_int (s, "width", &twidth) && gst_structure_get_int (s, "height", &theight)) { + int i; /* Walk the structure backwards to get the first entry of the * smallest resolution bigger (or equal to) the preferred resolution) -- 2.7.4