From fcebc2b4f548bcb9d6b8f0b4aaa7c1272205bf2d Mon Sep 17 00:00:00 2001
From: Edgard Lima <edgard.lima@indt.org.br>
Date: Mon, 26 Nov 2007 09:38:24 +0000
Subject: Now works when get_range is not available upstream.

Original commit message from CVS:
Now works when get_range is not available upstream.
---
 ChangeLog                       |  6 ++++++
 ext/metadata/gstmetadataparse.c | 17 ++++++++++++++++-
 2 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/ChangeLog b/ChangeLog
index 447e4f16..8d95b5ba 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2007-11-26  Edgard Lima  <edgard.lima@indt.org.br>
+
+	* ext/metadata/gstmetadataparse.c: (gst_metadata_parse_init),
+	(gst_metadata_parse_chain), (gst_metadata_parse_checkgetrange):
+	  Now works when get_range is not available upstream.
+
 2007-11-26  Sebastian Dröge  <slomo@circular-chaos.org>
 
 	* gst/speexresample/README:
diff --git a/ext/metadata/gstmetadataparse.c b/ext/metadata/gstmetadataparse.c
index dfe7502e..cf7783db 100644
--- a/ext/metadata/gstmetadataparse.c
+++ b/ext/metadata/gstmetadataparse.c
@@ -137,6 +137,8 @@ static gboolean gst_metadata_parse_sink_event (GstPad * pad, GstEvent * event);
 
 static GstFlowReturn gst_metadata_parse_chain (GstPad * pad, GstBuffer * buf);
 
+static gboolean gst_metadata_parse_checkgetrange (GstPad * srcpad);
+
 static gboolean
 gst_metadata_parse_get_range (GstPad * pad, guint64 offset_orig, guint size,
     GstBuffer ** buf);
@@ -272,6 +274,8 @@ gst_metadata_parse_init (GstMetadataParse * filter,
       GST_DEBUG_FUNCPTR (gst_metadata_parse_get_query_types));
   gst_pad_use_fixed_caps (filter->srcpad);
 
+  gst_pad_set_checkgetrange_function (filter->srcpad,
+      GST_DEBUG_FUNCPTR (gst_metadata_parse_checkgetrange));
   gst_pad_set_getrange_function (filter->srcpad, gst_metadata_parse_get_range);
 
   gst_pad_set_activatepull_function (filter->srcpad,
@@ -982,7 +986,8 @@ gst_metadata_parse_chain (GstPad * pad, GstBuffer * buf)
           new_buf =
               gst_buffer_new_and_alloc (GST_BUFFER_SIZE (buf) -
               filter->next_offset);
-          memcpy (GST_BUFFER_DATA (new_buf), GST_BUFFER_DATA (buf),
+          memcpy (GST_BUFFER_DATA (new_buf),
+              GST_BUFFER_DATA (buf) + filter->next_offset,
               GST_BUFFER_SIZE (buf) - filter->next_offset);
           filter->next_offset = 0;
           gst_adapter_push (filter->adapter_parsing, new_buf);
@@ -1592,6 +1597,16 @@ done:
 
 }
 
+static gboolean
+gst_metadata_parse_checkgetrange (GstPad * srcpad)
+{
+  GstMetadataParse *filter = NULL;
+
+  filter = GST_METADATA_PARSE (GST_PAD_PARENT (srcpad));
+
+  return gst_pad_check_pull_range (filter->sinkpad);
+}
+
 static gboolean
 gst_metadata_parse_get_range (GstPad * pad,
     guint64 offset, guint size, GstBuffer ** buf)
-- 
cgit v1.2.1