streamsplitter: Fix getcaps src pad caps merge
authorRobert Swain <robert.swain@collabora.co.uk>
Wed, 29 Jun 2011 09:30:51 +0000 (11:30 +0200)
committerRobert Swain <robert.swain@collabora.co.uk>
Wed, 29 Jun 2011 09:57:52 +0000 (11:57 +0200)
Caps returned from gst_pad_peer_get_caps_reffed () may not be writable.
If they are not is should cause an assertion in gst_caps_merge (),
however, sometimes assertions are disabled in binary builds of -base and
it's safer to just be sure the caps are writable. Also, check that the
reffed caps pointer is not NULL.

gst/encoding/gststreamsplitter.c

index c473386..c531b4c 100644 (file)
@@ -268,10 +268,13 @@ resync:
     GstPad *srcpad = (GstPad *) tmp->data;
 
     STREAMS_UNLOCK (stream_splitter);
-    if (res)
-      gst_caps_merge (res, gst_pad_peer_get_caps_reffed (srcpad));
-    else
+    if (res) {
+      GstCaps *peercaps = gst_pad_peer_get_caps_reffed (srcpad);
+      if (peercaps)
+        gst_caps_merge (res, gst_caps_make_writable (peercaps));
+    } else {
       res = gst_pad_peer_get_caps (srcpad);
+    }
     STREAMS_LOCK (stream_splitter);
 
     if (G_UNLIKELY (cookie != stream_splitter->cookie)) {