Description: gstreamer hangs when accessing webcam (on specific hardware)
 This fixes cases where starting to play a webcam stream would
 make gstreamer (or part of it at least) hang.
 .
 This is a cherry-pick of upstream commit: 401f9b3de72de759c76da155a339c754b653bf9d
Origin: upstream, http://cgit.freedesktop.org/gstreamer/gstreamer/commit/?id=401f9b3de72de759c76da155a339c754b653bf9d
Bug: https://bugzilla.gnome.org/show_bug.cgi?id=684981
Bug-Debian: http://bugs.debian.org/676648
Bug-Ubuntu: https://launchpad.net/bugs/966294
Reviewed-By: Micha Lenk <micha@debian.org>
Last-Update: 2013-04-21

--- gstreamer0.10-0.10.36.orig/gst/gstvalue.c
+++ gstreamer0.10-0.10.36/gst/gstvalue.c
@@ -2755,7 +2755,7 @@ gst_value_intersect_list (GValue * dest,
 
         gst_value_init_and_copy (&temp, dest);
         g_value_unset (dest);
-        gst_value_list_concat (dest, &temp, &intersection);
+        gst_value_list_merge (dest, &temp, &intersection);
         g_value_unset (&temp);
       }
       g_value_unset (&intersection);
--- gstreamer0.10-0.10.36.orig/tests/check/gst/gstcaps.c
+++ gstreamer0.10-0.10.36/tests/check/gst/gstcaps.c
@@ -788,6 +788,70 @@ GST_START_TEST (test_intersect2)
 
 GST_END_TEST;
 
+GST_START_TEST (test_intersect_list_duplicate)
+{
+  GstCaps *caps1, *caps2, *icaps;
+
+  /* make sure we don't take too long to intersect these.. */
+  caps1 = gst_caps_from_string ("video/x-raw, format=(string)YV12; "
+      "video/x-raw, format=(string)I420; video/x-raw, format=(string)YUY2; "
+      "video/x-raw, format=(string)UYVY; "
+      "video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx,"
+      " xRGB, xBGR, { RGBA, RGBA, { RGBA, RGBA }, "
+      "{ RGBA, RGBA, { RGBA, RGBA } }, { RGBA, RGBA, { RGBA, RGBA }, "
+      "{ RGBA, RGBA, { RGBA, RGBA } } }, { RGBA, RGBA, { RGBA, RGBA }, "
+      "{ RGBA, RGBA, { RGBA, RGBA } }, { RGBA, RGBA, { RGBA, RGBA }, "
+      "{ RGBA, RGBA, { RGBA, RGBA } } } }, { RGBA, RGBA, { RGBA, RGBA }, "
+      "{ RGBA, RGBA, { RGBA, RGBA } }, { RGBA, RGBA, { RGBA, RGBA }, "
+      "{ RGBA, RGBA, { RGBA, RGBA } } }, { RGBA, RGBA, { RGBA, RGBA }, "
+      "{ RGBA, RGBA, { RGBA, RGBA } }, { RGBA, RGBA, { RGBA, RGBA }, "
+      "{ RGBA, RGBA, { RGBA, RGBA } } } } } }, BGRA, ARGB, { ABGR, ABGR, "
+      "{ ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } }, "
+      "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } } }, "
+      "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } }, "
+      "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } } } }, "
+      "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } }, "
+      "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } } }, "
+      "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } }, "
+      "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } } } } } }, "
+      "RGB, BGR, Y41B, Y42B, YVYU, Y444 }; "
+      "video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, "
+      "xRGB, xBGR, { RGBA, RGBA, { RGBA, RGBA }, "
+      "{ RGBA, RGBA, { RGBA, RGBA } }, { RGBA, RGBA, { RGBA, RGBA }, "
+      "{ RGBA, RGBA, { RGBA, RGBA } } }, { RGBA, RGBA, { RGBA, RGBA }, "
+      "{ RGBA, RGBA, { RGBA, RGBA } }, { RGBA, RGBA, { RGBA, RGBA }, "
+      "{ RGBA, RGBA, { RGBA, RGBA } } } }, { RGBA, RGBA, { RGBA, RGBA }, "
+      "{ RGBA, RGBA, { RGBA, RGBA } }, { RGBA, RGBA, { RGBA, RGBA }, "
+      "{ RGBA, RGBA, { RGBA, RGBA } } }, { RGBA, RGBA, { RGBA, RGBA }, "
+      "{ RGBA, RGBA, { RGBA, RGBA } }, { RGBA, RGBA, { RGBA, RGBA }, "
+      "{ RGBA, RGBA, { RGBA, RGBA } } } } } }, BGRA, ARGB, "
+      "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } }, "
+      "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } } }, "
+      "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } }, "
+      "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } } } }, "
+      "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } }, "
+      "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } } }, "
+      "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } }, "
+      "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } } } } } }, "
+      "RGB, BGR, Y41B, Y42B, YVYU, Y444, NV12, NV21 }; "
+      "video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, "
+      "BGRx, xRGB, xBGR, { RGBA, RGBA, { RGBA, RGBA }, "
+      "{ RGBA, RGBA, { RGBA, RGBA } }, { RGBA, RGBA, { RGBA, RGBA }, "
+      "{ RGBA, RGBA, { RGBA, RGBA } } } }, BGRA, ARGB, "
+      "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } }, "
+      "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } } } }, "
+      "RGB, BGR, Y41B, Y42B, YVYU, Y444, NV12, NV21 }");
+
+  caps2 = gst_caps_copy (caps1);
+
+  icaps = gst_caps_intersect (caps1, caps2);
+
+  gst_caps_unref (caps1);
+  gst_caps_unref (caps2);
+  gst_caps_unref (icaps);
+}
+
+GST_END_TEST;
 
 GST_START_TEST (test_intersect_zigzag)
 {
@@ -997,6 +1061,7 @@ gst_caps_suite (void)
   tcase_add_test (tc_chain, test_merge_subset);
   tcase_add_test (tc_chain, test_intersect);
   tcase_add_test (tc_chain, test_intersect2);
+  tcase_add_test (tc_chain, test_intersect_list_duplicate);
   tcase_add_test (tc_chain, test_intersect_zigzag);
   tcase_add_test (tc_chain, test_intersect_first);
   tcase_add_test (tc_chain, test_intersect_first2);
