Implement Adapter.Peek() that returns a GstBuffer
authorSebastian Dröge <sebastian.droege@collabora.co.uk>
Thu, 28 May 2009 13:31:01 +0000 (15:31 +0200)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Thu, 28 May 2009 13:31:01 +0000 (15:31 +0200)
gstreamer-sharp/Adapter.custom
gstreamer-sharp/glue/Makefile.am
gstreamer-sharp/glue/adapter.c [new file with mode: 0644]

index 1e0ea64..da49141 100644 (file)
@@ -5,3 +5,10 @@
                        gst_adapter_push(Handle, buf == null ? IntPtr.Zero : buf.OwnedHandle);
                }
 
+
+               [DllImport ("gstreamersharpglue-0.10.dll") ]
+               static extern IntPtr gstsharp_gst_adapter_peek_buffer (IntPtr adapter, uint size);
+
+               public Gst.Buffer Peek (uint size) {
+                 return (Gst.Buffer) Gst.MiniObject.GetObject (gstsharp_gst_adapter_peek_buffer (Handle, size), true);                 
+               }
index 110c2bd..d7963eb 100644 (file)
@@ -17,7 +17,8 @@ libgstreamersharpglue_0_10_la_SOURCES =       \
        indexentry.c \
        indexfactory.c \
        mixertrack.c \
-       tunernorm.c
+       tunernorm.c \
+       adapter.c
 
 nodist_libgstreamersharpglue_0_10_la_SOURCES = generated.c 
 
diff --git a/gstreamer-sharp/glue/adapter.c b/gstreamer-sharp/glue/adapter.c
new file mode 100644 (file)
index 0000000..aa767bb
--- /dev/null
@@ -0,0 +1,13 @@
+#include <gst/gst.h>
+#include <gst/base/gstadapter.h>
+
+GstBuffer *
+gstsharp_gst_adapter_peek_buffer (GstAdapter *adapter, guint size) {
+  GstBuffer *ret = gst_buffer_new_and_try_alloc (size);
+
+  if (ret == NULL)
+    return NULL;
+
+  gst_adapter_copy (adapter, GST_BUFFER_DATA (ret), 0, size);
+  return ret;
+}