From 30ac118362f10d327b113f22c71320436ee5cde1 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Tim-Philipp=20M=C3=BCller?= Date: Tue, 10 Jul 2012 00:59:40 +0100 Subject: [PATCH] dataurisrc: copy into provided buffer if a buffer is provided --- plugins/elements/gstdataurisrc.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/plugins/elements/gstdataurisrc.c b/plugins/elements/gstdataurisrc.c index 4bac770..7b4101f 100644 --- a/plugins/elements/gstdataurisrc.c +++ b/plugins/elements/gstdataurisrc.c @@ -227,10 +227,24 @@ gst_data_uri_src_create (GstBaseSrc * basesrc, guint64 offset, guint size, * larger than the max. available size if a segment at the end is requested */ if (offset + size > gst_buffer_get_size (src->buffer)) { ret = GST_FLOW_EOS; - } else { + } else if (*buf != NULL) { + GstMapInfo src_info; + GstMapInfo dest_info; + gsize fill_size; + + gst_buffer_map (src->buffer, &src_info, GST_MAP_READ); + gst_buffer_map (*buf, &dest_info, GST_MAP_WRITE); + + fill_size = gst_buffer_fill (*buf, 0, src_info.data + offset, size); + + gst_buffer_unmap (*buf, &dest_info); + gst_buffer_unmap (src->buffer, &src_info); + gst_buffer_set_size (*buf, fill_size); ret = GST_FLOW_OK; + } else { *buf = gst_buffer_copy_region (src->buffer, GST_BUFFER_COPY_ALL, offset, size); + ret = GST_FLOW_OK; } GST_OBJECT_UNLOCK (src); -- 2.7.4