Update Gst.Buffer bindings
authorSebastian Dröge <sebastian.droege@collabora.co.uk>
Tue, 22 Sep 2009 05:40:57 +0000 (07:40 +0200)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Tue, 22 Sep 2009 05:40:57 +0000 (07:40 +0200)
configure.ac
doc/en/Gst/Buffer.xml
gstreamer-sharp/Buffer.custom
gstreamer-sharp/Gstreamer.metadata
gstreamer-sharp/glue/buffer.c
samples/AppSrc.cs
tests/BufferTest.cs

index 5d95e1c..b4773f8 100644 (file)
@@ -14,7 +14,7 @@ AC_HEADER_STDC
 PACKAGE_VERSION=gstreamer-sharp-0.10
 AC_SUBST(PACKAGE_VERSION)
 
-API_VERSION=0.9.1.0
+API_VERSION=0.9.2.0
 AC_SUBST(API_VERSION)
 
 MONO_REQUIRED_VERSION=2.4
index ac98a90..c01f9e6 100644 (file)
         <remarks>To be added.</remarks>
       </Docs>
     </Member>
+    <Member MemberName=".ctor">
+      <MemberSignature Language="C#" Value="public Buffer (IntPtr data, uint size);" />
+      <MemberType>Constructor</MemberType>
+      <AssemblyInfo>
+        <AssemblyVersion>0.9.1.0</AssemblyVersion>
+      </AssemblyInfo>
+      <Parameters>
+        <Parameter Name="data" Type="System.IntPtr" />
+        <Parameter Name="size" Type="System.UInt32" />
+      </Parameters>
+      <Docs>
+        <param name="data">To be added.</param>
+        <param name="size">To be added.</param>
+        <summary>To be added.</summary>
+        <remarks>To be added.</remarks>
+      </Docs>
+    </Member>
     <Member MemberName="Caps">
       <MemberSignature Language="C#" Value="public Gst.Caps Caps { set; get; }" />
       <MemberType>Property</MemberType>
       </Docs>
     </Member>
     <Member MemberName="Data">
-      <MemberSignature Language="C#" Value="public byte[] Data { set; get; }" />
+      <MemberSignature Language="C#" Value="public IntPtr Data { get; }" />
       <MemberType>Property</MemberType>
       <AssemblyInfo>
         <AssemblyVersion>0.9.0.0</AssemblyVersion>
         <AssemblyVersion>0.9.5.99</AssemblyVersion>
       </AssemblyInfo>
       <ReturnValue>
-        <ReturnType>System.Byte[]</ReturnType>
+        <ReturnType>System.IntPtr</ReturnType>
       </ReturnValue>
       <Docs>
         <summary>To be added.</summary>
       <MemberType>Property</MemberType>
       <AssemblyInfo>
         <AssemblyVersion>0.9.0.0</AssemblyVersion>
-        <AssemblyVersion>0.9.1.0</AssemblyVersion>
         <AssemblyVersion>0.9.5.99</AssemblyVersion>
       </AssemblyInfo>
       <ReturnValue>
         <remarks>To be added.</remarks>
       </Docs>
     </Member>
+    <Member MemberName="SetData">
+      <MemberSignature Language="C#" Value="public void SetData (byte[] data);" />
+      <MemberType>Method</MemberType>
+      <AssemblyInfo>
+        <AssemblyVersion>0.9.1.0</AssemblyVersion>
+      </AssemblyInfo>
+      <ReturnValue>
+        <ReturnType>System.Void</ReturnType>
+      </ReturnValue>
+      <Parameters>
+        <Parameter Name="data" Type="System.Byte[]" />
+      </Parameters>
+      <Docs>
+        <param name="data">To be added.</param>
+        <summary>To be added.</summary>
+        <remarks>To be added.</remarks>
+      </Docs>
+    </Member>
+    <Member MemberName="SetData">
+      <MemberSignature Language="C#" Value="public void SetData (IntPtr data, uint size);" />
+      <MemberType>Method</MemberType>
+      <AssemblyInfo>
+        <AssemblyVersion>0.9.1.0</AssemblyVersion>
+      </AssemblyInfo>
+      <ReturnValue>
+        <ReturnType>System.Void</ReturnType>
+      </ReturnValue>
+      <Parameters>
+        <Parameter Name="data" Type="System.IntPtr" />
+        <Parameter Name="size" Type="System.UInt32" />
+      </Parameters>
+      <Docs>
+        <param name="data">To be added.</param>
+        <param name="size">To be added.</param>
+        <summary>To be added.</summary>
+        <remarks>To be added.</remarks>
+      </Docs>
+    </Member>
     <Member MemberName="Size">
-      <MemberSignature Language="C#" Value="public uint Size { get; }" />
+      <MemberSignature Language="C#" Value="public uint Size { set; get; }" />
       <MemberType>Property</MemberType>
       <AssemblyInfo>
         <AssemblyVersion>0.9.0.0</AssemblyVersion>
         <remarks>To be added.</remarks>
       </Docs>
     </Member>
+    <Member MemberName="ToByteArray">
+      <MemberSignature Language="C#" Value="public byte[] ToByteArray ();" />
+      <MemberType>Method</MemberType>
+      <AssemblyInfo>
+        <AssemblyVersion>0.9.1.0</AssemblyVersion>
+      </AssemblyInfo>
+      <ReturnValue>
+        <ReturnType>System.Byte[]</ReturnType>
+      </ReturnValue>
+      <Parameters />
+      <Docs>
+        <summary>To be added.</summary>
+        <returns>To be added.</returns>
+        <remarks>To be added.</remarks>
+      </Docs>
+    </Member>
   </Members>
 </Type>
index 8bb3ae2..3b72ccd 100644 (file)
@@ -10,8 +10,12 @@ public Buffer (uint size) {
   Raw = raw;
 }
 
+public Buffer (IntPtr data, uint size) : this () {
+  SetData (data, size);
+}
+
 public Buffer (byte[] data) : this () {
-  Data = data;
+  SetData (data);
 }
 
 [DllImport ("gstreamersharpglue-0.10.dll") ]
@@ -22,52 +26,41 @@ extern static void gstsharp_gst_buffer_set_data (IntPtr handle, IntPtr data, uin
 extern static IntPtr g_try_malloc (int size);
 
 static uint data_offset = gstsharp_gst_buffer_get_data_offset ();
-public byte[] Data {
+public IntPtr Data {
   get {
     IntPtr raw_ptr;
     unsafe {
       raw_ptr = * ( (IntPtr *) ( ( (byte*) Handle) + data_offset));
     }
 
-    byte[] data = new byte[Size];
-    Marshal.Copy (raw_ptr, data, 0, (int) Size);
-
-    return data;
+    return raw_ptr;
   }
+}
 
-  set {
+public void SetData (IntPtr data, uint size) {
+    if (!IsWritable)
+      throw new ApplicationException ();
+
+    gstsharp_gst_buffer_set_data (Handle, data, size);
+}
+
+public void SetData (byte[] data) {
     if (!IsWritable)
       throw new ApplicationException ();
 
-    IntPtr raw_ptr = g_try_malloc (value.Length);
+    IntPtr raw_ptr = g_try_malloc (data.Length);
     if (raw_ptr == IntPtr.Zero)
       throw new OutOfMemoryException ();
 
-    Marshal.Copy (value, 0, raw_ptr, value.Length);
-    gstsharp_gst_buffer_set_data (Handle, raw_ptr, (uint) value.Length);
-  }
+    Marshal.Copy (data, 0, raw_ptr, data.Length);
+    gstsharp_gst_buffer_set_data (Handle, raw_ptr, (uint) data.Length);
 }
 
-public byte this [uint index] {
-  get {
-    if (index >= Size)
-      throw new ArgumentOutOfRangeException ();
-
-    unsafe {
-      byte **raw_ptr = (byte **) ( ( (byte*) Handle) + data_offset);
-      return * ( (*raw_ptr) + index);
-    }
-  } set {
-    if (index >= Size)
-      throw new ArgumentOutOfRangeException ();
-    if (!IsWritable)
-      throw new ApplicationException ();
+public byte[] ToByteArray () {
+    byte[] data = new byte[Size];
+    Marshal.Copy (Data, data, 0, (int) Size);
 
-    unsafe {
-      byte **raw_ptr = (byte **) ( ( (byte*) Handle) + data_offset);
-      * ( (*raw_ptr) + index) = value;
-    }
-  }
+    return data;
 }
 
 [DllImport ("libgstreamer-0.10.dll") ]
@@ -102,6 +95,30 @@ public Gst.Caps Caps {
 }
 
 [DllImport ("gstreamersharpglue-0.10.dll") ]
+extern static uint gstsharp_gst_buffer_get_size_offset ();
+static uint size_offset = gstsharp_gst_buffer_get_size_offset ();
+
+public uint Size {
+  get {
+    unsafe {
+      uint *raw_ptr = ( (uint*) ( ( (byte*) Handle) + size_offset));
+      return *raw_ptr;
+    }
+  }
+
+  set {
+    if (!IsMetadataWritable)
+      throw new ApplicationException ();
+
+    unsafe {
+      uint *raw_ptr = ( (uint*) ( ( (byte*) Handle) + size_offset));
+      *raw_ptr = value;
+    }
+  }
+}
+
+
+[DllImport ("gstreamersharpglue-0.10.dll") ]
 extern static uint gstsharp_gst_buffer_get_timestamp_offset ();
 static uint timestamp_offset = gstsharp_gst_buffer_get_timestamp_offset ();
 
index 32fa22e..f3963e0 100644 (file)
@@ -56,6 +56,7 @@
   <attr path="/api/namespace/mini-object[@name='Buffer']/field[@name='Timestamp']" name="hidden">1</attr>
   <attr path="/api/namespace/mini-object[@name='Buffer']/field[@name='Caps']" name="hidden">1</attr>
   <attr path="/api/namespace/mini-object[@name='Buffer']/field[@name='FreeFunc']" name="hidden">1</attr>
+  <attr path="/api/namespace/mini-object[@name='Buffer']/field[@name='Size']" name="hidden">1</attr>
   <attr path="/api/namespace/mini-object[@name='Buffer']/method[@cname='gst_buffer_get_caps']" name="hidden">1</attr>
   <attr path="/api/namespace/mini-object[@name='Buffer']/method[@cname='gst_buffer_set_caps']" name="hidden">1</attr>
   <attr path="/api/namespace/mini-object[@name='Buffer']/method[@cname='gst_buffer_stamp']" name="hidden">1</attr>
index 081eeef..144f328 100644 (file)
@@ -16,6 +16,12 @@ gstsharp_gst_buffer_set_data (GstBuffer * buffer, guint8 * new_data, guint size)
 }
 
 guint
+gstsharp_gst_buffer_get_size_offset (void)
+{
+       return (guint)G_STRUCT_OFFSET (GstBuffer, size);
+}
+
+guint
 gstsharp_gst_buffer_get_data_offset (void)
 {
   return (guint) G_STRUCT_OFFSET (GstBuffer, data);
index 7a9a3df..da7f676 100644 (file)
@@ -52,15 +52,14 @@ public class AppSrcDemo {
     ulong mseconds = 0;
     if (appsrc.Clock != null)
       mseconds = appsrc.Clock.Time / Clock.MSecond;
-    byte[] data = DrawData (mseconds);
-
-    Gst.Buffer buffer = new Gst.Buffer (data);
+    Gst.Buffer buffer = DrawData (mseconds);
     appsrc.PushBuffer (buffer);
   }
 
-  // Returns a byte[] presentation of one 640x480 BGRA frame using Cairo
-  static byte[] DrawData (ulong seconds) {
-    Cairo.ImageSurface img = new Cairo.ImageSurface (Cairo.Format.Argb32, 640, 480);
+  // Returns a Gst.Buffer presentation of one 640x480 BGRA frame using Cairo
+  static Gst.Buffer DrawData (ulong seconds) {
+    Gst.Buffer buffer = new Gst.Buffer (640*480*4);
+    Cairo.ImageSurface img = new Cairo.ImageSurface (buffer.Data, Cairo.Format.Argb32, 640, 480, 640*4);
     using (Cairo.Context context = new Cairo.Context (img)) {
       double dx = (double) (seconds % 2180) / 5;
       context.Color = new Color (1.0, 1.0, 0);
@@ -71,10 +70,8 @@ public class AppSrcDemo {
       context.Color = new Color (0, 0, 1.0);
       context.Stroke();
     }
-
-    byte[] data = img.Data;
     img.Destroy();
-    return data;
+    return buffer;
   }
 
   static void MessageHandler (object sender, MessageArgs args) {
index b0f2d70..9123d41 100644 (file)
@@ -69,9 +69,6 @@ public class BufferTest {
 
     Gst.Buffer buffer = new Gst.Buffer (data);
 
-    ArrayIsEqual (data, buffer.Data);
-    for (uint i = 0; i < buffer.Size; i++)
-      Assert.IsTrue (buffer[i] == data[i]);
-
+    ArrayIsEqual (data, buffer.ToByteArray ());
   }
 }