summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--configure.ac2
-rw-r--r--doc/en/Gst/Buffer.xml78
-rw-r--r--gstreamer-sharp/Buffer.custom77
-rw-r--r--gstreamer-sharp/Gstreamer.metadata1
-rw-r--r--gstreamer-sharp/glue/buffer.c6
-rw-r--r--samples/AppSrc.cs15
-rw-r--r--tests/BufferTest.cs5
7 files changed, 136 insertions, 48 deletions
diff --git a/configure.ac b/configure.ac
index 5d95e1c..b4773f8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -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
diff --git a/doc/en/Gst/Buffer.xml b/doc/en/Gst/Buffer.xml
index ac98a90..c01f9e6 100644
--- a/doc/en/Gst/Buffer.xml
+++ b/doc/en/Gst/Buffer.xml
@@ -111,6 +111,23 @@
<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>
@@ -174,7 +191,7 @@
</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>
@@ -182,7 +199,7 @@
<AssemblyVersion>0.9.5.99</AssemblyVersion>
</AssemblyInfo>
<ReturnValue>
- <ReturnType>System.Byte[]</ReturnType>
+ <ReturnType>System.IntPtr</ReturnType>
</ReturnValue>
<Docs>
<summary>To be added.</summary>
@@ -267,7 +284,6 @@
<MemberType>Property</MemberType>
<AssemblyInfo>
<AssemblyVersion>0.9.0.0</AssemblyVersion>
- <AssemblyVersion>0.9.1.0</AssemblyVersion>
<AssemblyVersion>0.9.5.99</AssemblyVersion>
</AssemblyInfo>
<ReturnValue>
@@ -355,8 +371,46 @@
<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>
@@ -414,5 +468,21 @@
<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>
diff --git a/gstreamer-sharp/Buffer.custom b/gstreamer-sharp/Buffer.custom
index 8bb3ae2..3b72ccd 100644
--- a/gstreamer-sharp/Buffer.custom
+++ b/gstreamer-sharp/Buffer.custom
@@ -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 ();
diff --git a/gstreamer-sharp/Gstreamer.metadata b/gstreamer-sharp/Gstreamer.metadata
index 32fa22e..f3963e0 100644
--- a/gstreamer-sharp/Gstreamer.metadata
+++ b/gstreamer-sharp/Gstreamer.metadata
@@ -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>
diff --git a/gstreamer-sharp/glue/buffer.c b/gstreamer-sharp/glue/buffer.c
index 081eeef..144f328 100644
--- a/gstreamer-sharp/glue/buffer.c
+++ b/gstreamer-sharp/glue/buffer.c
@@ -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);
diff --git a/samples/AppSrc.cs b/samples/AppSrc.cs
index 7a9a3df..da7f676 100644
--- a/samples/AppSrc.cs
+++ b/samples/AppSrc.cs
@@ -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) {
diff --git a/tests/BufferTest.cs b/tests/BufferTest.cs
index b0f2d70..9123d41 100644
--- a/tests/BufferTest.cs
+++ b/tests/BufferTest.cs
@@ -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 ());
}
}