summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim-Philipp Müller <tim.muller@collabora.co.uk>2010-06-18 12:00:53 +0100
committerTim-Philipp Müller <tim.muller@collabora.co.uk>2010-06-18 12:00:53 +0100
commite1573f194c8e6d4ca55314d9c4477cf4f25c90a1 (patch)
tree096047e55a185622212ffb6469d65d37d731a651
parent18119636266d0aa39cd1711bd64e52a9f4dbef4e (diff)
typefind: make sure buffers' metadata is writable before setting caps on them
Fixes warnings when using playbin2 with dvb:// streams, where typefind comes after mpegtsparse.
-rw-r--r--plugins/elements/gsttypefindelement.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/plugins/elements/gsttypefindelement.c b/plugins/elements/gsttypefindelement.c
index 433dbb9438..1a3891676e 100644
--- a/plugins/elements/gsttypefindelement.c
+++ b/plugins/elements/gsttypefindelement.c
@@ -477,8 +477,9 @@ stop_typefinding (GstTypeFindElement * typefind)
GST_OBJECT_LOCK (typefind);
if (typefind->store) {
- GstBuffer *store = typefind->store;
+ GstBuffer *store;
+ store = gst_buffer_make_metadata_writable (typefind->store);
typefind->store = NULL;
gst_buffer_set_caps (store, typefind->caps);
GST_OBJECT_UNLOCK (typefind);
@@ -646,6 +647,7 @@ gst_type_find_element_setcaps (GstPad * pad, GstCaps * caps)
typefind->store = NULL;
GST_DEBUG_OBJECT (typefind, "Pushing store: %d", GST_BUFFER_SIZE (store));
+ store = gst_buffer_make_metadata_writable (store);
gst_buffer_set_caps (store, typefind->caps);
GST_OBJECT_UNLOCK (typefind);
@@ -754,6 +756,7 @@ gst_type_find_element_chain (GstPad * pad, GstBuffer * buffer)
return GST_FLOW_ERROR;
case MODE_NORMAL:
GST_OBJECT_LOCK (typefind);
+ buffer = gst_buffer_make_metadata_writable (buffer);
gst_buffer_set_caps (buffer, typefind->caps);
GST_OBJECT_UNLOCK (typefind);
return gst_pad_push (typefind->src, buffer);
@@ -862,6 +865,8 @@ gst_type_find_element_getrange (GstPad * srcpad,
if (ret == GST_FLOW_OK && buffer && *buffer) {
GST_OBJECT_LOCK (typefind);
+
+ /* we assume that pulled buffers are meta-data writable */
gst_buffer_set_caps (*buffer, typefind->caps);
GST_OBJECT_UNLOCK (typefind);
}