mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-10-05 18:22:23 +00:00
Update Gst.Buffer bindings
This commit is contained in:
parent
80a5794fc1
commit
7f30940050
7 changed files with 141 additions and 53 deletions
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
set {
|
||||
if (!IsWritable)
|
||||
throw new ApplicationException ();
|
||||
|
||||
IntPtr raw_ptr = g_try_malloc (value.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);
|
||||
return raw_ptr;
|
||||
}
|
||||
}
|
||||
|
||||
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 ();
|
||||
public void SetData (IntPtr data, uint size) {
|
||||
if (!IsWritable)
|
||||
throw new ApplicationException ();
|
||||
|
||||
unsafe {
|
||||
byte **raw_ptr = (byte **) ( ( (byte*) Handle) + data_offset);
|
||||
* ( (*raw_ptr) + index) = value;
|
||||
}
|
||||
}
|
||||
gstsharp_gst_buffer_set_data (Handle, data, size);
|
||||
}
|
||||
|
||||
public void SetData (byte[] data) {
|
||||
if (!IsWritable)
|
||||
throw new ApplicationException ();
|
||||
|
||||
IntPtr raw_ptr = g_try_malloc (data.Length);
|
||||
if (raw_ptr == IntPtr.Zero)
|
||||
throw new OutOfMemoryException ();
|
||||
|
||||
Marshal.Copy (data, 0, raw_ptr, data.Length);
|
||||
gstsharp_gst_buffer_set_data (Handle, raw_ptr, (uint) data.Length);
|
||||
}
|
||||
|
||||
public byte[] ToByteArray () {
|
||||
byte[] data = new byte[Size];
|
||||
Marshal.Copy (Data, data, 0, (int) Size);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
[DllImport ("libgstreamer-0.10.dll") ]
|
||||
|
@ -101,6 +94,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 ();
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -15,6 +15,12 @@ gstsharp_gst_buffer_set_data (GstBuffer * buffer, guint8 * new_data, guint size)
|
|||
buffer->free_func = g_free;
|
||||
}
|
||||
|
||||
guint
|
||||
gstsharp_gst_buffer_get_size_offset (void)
|
||||
{
|
||||
return (guint)G_STRUCT_OFFSET (GstBuffer, size);
|
||||
}
|
||||
|
||||
guint
|
||||
gstsharp_gst_buffer_get_data_offset (void)
|
||||
{
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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 ());
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue