diff options
author | Robert Swain <robert.swain@collabora.co.uk> | 2011-06-29 11:30:51 +0200 |
---|---|---|
committer | Robert Swain <robert.swain@collabora.co.uk> | 2011-06-29 11:57:52 +0200 |
commit | dc79c424849133d4ee1687beff40e33d472f8919 (patch) | |
tree | c1c5115034d34c9044006ab21163938a4df79027 /gst/encoding | |
parent | f3e65f1c9374df13e4fa082bc750ce94e38c58de (diff) |
streamsplitter: Fix getcaps src pad caps merge
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.
Diffstat (limited to 'gst/encoding')
-rw-r--r-- | gst/encoding/gststreamsplitter.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/gst/encoding/gststreamsplitter.c b/gst/encoding/gststreamsplitter.c index c473386e5..c531b4c6c 100644 --- a/gst/encoding/gststreamsplitter.c +++ b/gst/encoding/gststreamsplitter.c @@ -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)) { |