diff options
author | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2009-04-13 13:27:26 +0200 |
---|---|---|
committer | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2009-04-13 13:27:26 +0200 |
commit | 4b72aea9d53122363fdbdc2a4bc8d357ad25f85f (patch) | |
tree | 379028809d3babef3d6eff1c6e05a3ec107ff526 | |
parent | 5eef87e58a66c6026dcf6d541260b6ae2c2e8290 (diff) |
Fix Gst.Buffer bindings
-rw-r--r-- | doc/en/Gst/Buffer.xml | 46 | ||||
-rw-r--r-- | doc/en/Gst/BufferFlags.xml | 80 | ||||
-rw-r--r-- | doc/en/Gst/TagFlags.xml | 56 | ||||
-rw-r--r-- | gstreamer-sharp/Buffer.custom | 197 | ||||
-rw-r--r-- | gstreamer-sharp/Gstreamer.metadata | 21 | ||||
-rw-r--r-- | gstreamer-sharp/glue/Makefile.am | 1 | ||||
-rw-r--r-- | gstreamer-sharp/glue/buffer.c | 43 | ||||
-rw-r--r-- | gstreamer-sharp/glue/miniobject.c | 25 |
8 files changed, 316 insertions, 153 deletions
diff --git a/doc/en/Gst/Buffer.xml b/doc/en/Gst/Buffer.xml index 37d1805..00aecd4 100644 --- a/doc/en/Gst/Buffer.xml +++ b/doc/en/Gst/Buffer.xml @@ -35,7 +35,7 @@ - <Member MemberName=".ctor"><MemberSignature Language="C#" Value="public Buffer ();" /><MemberType>Constructor</MemberType><AssemblyInfo><AssemblyVersion>0.9.5.99</AssemblyVersion></AssemblyInfo><Parameters /><Docs><summary>To be added.</summary><remarks>To be added.</remarks></Docs></Member><Member MemberName=".ctor"> + <Member MemberName=".ctor"><MemberSignature Language="C#" Value="public Buffer ();" /><MemberType>Constructor</MemberType><AssemblyInfo><AssemblyVersion>0.9.5.99</AssemblyVersion></AssemblyInfo><Parameters /><Docs><summary>To be added.</summary><remarks>To be added.</remarks></Docs></Member><Member MemberName=".ctor"><MemberSignature Language="C#" Value="public Buffer (byte[] data);" /><MemberType>Constructor</MemberType><AssemblyInfo><AssemblyVersion>0.9.5.99</AssemblyVersion></AssemblyInfo><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=".ctor"> <MemberSignature Language="C#" Value="public Buffer (IntPtr raw);" /> <MemberType>Constructor</MemberType> <Parameters><Parameter Name="raw" Type="System.IntPtr" /></Parameters> @@ -57,12 +57,12 @@ <Parameters><Parameter Name="offset" Type="System.UInt32" /><Parameter Name="size" Type="System.UInt32" /></Parameters> <Docs><param name="offset">To be added.</param><param name="size">To be added.</param><summary>To be added.</summary><returns>To be added.</returns><remarks>To be added.</remarks></Docs> <AssemblyInfo><AssemblyVersion>0.9.5.99</AssemblyVersion></AssemblyInfo></Member><Member MemberName="Data"> - <MemberSignature Language="C#" Value="public byte Data { get; }" /> + <MemberSignature Language="C#" Value="public byte[] Data { set; get; }" /> <MemberType>Property</MemberType> - <ReturnValue><ReturnType>System.Byte</ReturnType></ReturnValue> + <ReturnValue><ReturnType>System.Byte[]</ReturnType></ReturnValue> <Docs><summary>To be added.</summary><value>To be added.</value><remarks>To be added.</remarks></Docs> <AssemblyInfo><AssemblyVersion>0.9.5.99</AssemblyVersion></AssemblyInfo></Member><Member MemberName="Duration"> - <MemberSignature Language="C#" Value="public ulong Duration { get; }" /> + <MemberSignature Language="C#" Value="public ulong Duration { set; get; }" /> <MemberType>Property</MemberType> <ReturnValue><ReturnType>System.UInt64</ReturnType></ReturnValue> <Docs><summary>To be added.</summary><value>To be added.</value><remarks>To be added.</remarks></Docs> @@ -82,36 +82,19 @@ <ReturnValue><ReturnType>System.Boolean</ReturnType></ReturnValue> <Parameters><Parameter Name="buf2" Type="Gst.Buffer" /></Parameters> <Docs><param name="buf2">To be added.</param><summary>To be added.</summary><returns>To be added.</returns><remarks>To be added.</remarks></Docs> - <AssemblyInfo><AssemblyVersion>0.9.5.99</AssemblyVersion></AssemblyInfo></Member><Member MemberName="Join"> - <MemberSignature Language="C#" Value="public Gst.Buffer Join (Gst.Buffer buf2);" /> - <MemberType>Method</MemberType> - <ReturnValue><ReturnType>Gst.Buffer</ReturnType></ReturnValue> - <Parameters><Parameter Name="buf2" Type="Gst.Buffer" /></Parameters> - <Docs><param name="buf2">To be added.</param><summary>To be added.</summary><returns>To be added.</returns><remarks>To be added.</remarks></Docs> - <AssemblyInfo><AssemblyVersion>0.9.5.99</AssemblyVersion></AssemblyInfo></Member><Member MemberName="MakeMetadataWritable"> - <MemberSignature Language="C#" Value="public Gst.Buffer MakeMetadataWritable ();" /> - <MemberType>Method</MemberType> - <ReturnValue><ReturnType>Gst.Buffer</ReturnType></ReturnValue> - <Parameters /> - <Docs><summary>To be added.</summary><returns>To be added.</returns><remarks>To be added.</remarks></Docs> - <AssemblyInfo><AssemblyVersion>0.9.5.99</AssemblyVersion></AssemblyInfo></Member><Member MemberName="MallocData"> - <MemberSignature Language="C#" Value="public byte MallocData { get; }" /> - <MemberType>Property</MemberType> - <ReturnValue><ReturnType>System.Byte</ReturnType></ReturnValue> - <Docs><summary>To be added.</summary><value>To be added.</value><remarks>To be added.</remarks></Docs> - <AssemblyInfo><AssemblyVersion>0.9.5.99</AssemblyVersion></AssemblyInfo></Member><Member MemberName="Merge"> + <AssemblyInfo><AssemblyVersion>0.9.5.99</AssemblyVersion></AssemblyInfo></Member><Member MemberName="Item"><MemberSignature Language="C#" Value="public byte this[uint index] { set; get; }" /><MemberType>Property</MemberType><AssemblyInfo><AssemblyVersion>0.9.5.99</AssemblyVersion></AssemblyInfo><ReturnValue><ReturnType>System.Byte</ReturnType></ReturnValue><Parameters><Parameter Name="index" Type="System.UInt32" /></Parameters><Docs><param name="index">To be added.</param><summary>To be added.</summary><value>To be added.</value><remarks>To be added.</remarks></Docs></Member><Member MemberName="MakeMetadataWritable"><MemberSignature Language="C#" Value="public void MakeMetadataWritable ();" /><MemberType>Method</MemberType><AssemblyInfo><AssemblyVersion>0.9.5.99</AssemblyVersion></AssemblyInfo><ReturnValue><ReturnType>System.Void</ReturnType></ReturnValue><Parameters /><Docs><summary>To be added.</summary><remarks>To be added.</remarks></Docs></Member><Member MemberName="Merge"> <MemberSignature Language="C#" Value="public Gst.Buffer Merge (Gst.Buffer buf2);" /> <MemberType>Method</MemberType> <ReturnValue><ReturnType>Gst.Buffer</ReturnType></ReturnValue> <Parameters><Parameter Name="buf2" Type="Gst.Buffer" /></Parameters> <Docs><param name="buf2">To be added.</param><summary>To be added.</summary><returns>To be added.</returns><remarks>To be added.</remarks></Docs> <AssemblyInfo><AssemblyVersion>0.9.5.99</AssemblyVersion></AssemblyInfo></Member><Member MemberName="Offset"> - <MemberSignature Language="C#" Value="public ulong Offset { get; }" /> + <MemberSignature Language="C#" Value="public ulong Offset { set; get; }" /> <MemberType>Property</MemberType> <ReturnValue><ReturnType>System.UInt64</ReturnType></ReturnValue> <Docs><summary>To be added.</summary><value>To be added.</value><remarks>To be added.</remarks></Docs> <AssemblyInfo><AssemblyVersion>0.9.5.99</AssemblyVersion></AssemblyInfo></Member><Member MemberName="OffsetEnd"> - <MemberSignature Language="C#" Value="public ulong OffsetEnd { get; }" /> + <MemberSignature Language="C#" Value="public ulong OffsetEnd { set; get; }" /> <MemberType>Property</MemberType> <ReturnValue><ReturnType>System.UInt64</ReturnType></ReturnValue> <Docs><summary>To be added.</summary><value>To be added.</value><remarks>To be added.</remarks></Docs> @@ -126,16 +109,15 @@ <ReturnValue><ReturnType>Gst.Buffer</ReturnType></ReturnValue> <Parameters><Parameter Name="offset" Type="System.UInt32" /><Parameter Name="buf2" Type="Gst.Buffer" /><Parameter Name="len" Type="System.UInt32" /></Parameters> <Docs><param name="offset">To be added.</param><param name="buf2">To be added.</param><param name="len">To be added.</param><summary>To be added.</summary><returns>To be added.</returns><remarks>To be added.</remarks></Docs> - <AssemblyInfo><AssemblyVersion>0.9.5.99</AssemblyVersion></AssemblyInfo></Member><Member MemberName="Stamp"> - <MemberSignature Language="C#" Value="public void Stamp (Gst.Buffer src);" /> - <MemberType>Method</MemberType> - <ReturnValue><ReturnType>System.Void</ReturnType></ReturnValue> - <Parameters><Parameter Name="src" Type="Gst.Buffer" /></Parameters> - <Docs><param name="src">To be added.</param><summary>To be added.</summary><remarks>To be added.</remarks></Docs> <AssemblyInfo><AssemblyVersion>0.9.5.99</AssemblyVersion></AssemblyInfo></Member><Member MemberName="Timestamp"> - <MemberSignature Language="C#" Value="public ulong Timestamp { get; }" /> + <MemberSignature Language="C#" Value="public ulong Timestamp { set; get; }" /> <MemberType>Property</MemberType> <ReturnValue><ReturnType>System.UInt64</ReturnType></ReturnValue> <Docs><summary>To be added.</summary><value>To be added.</value><remarks>To be added.</remarks></Docs> - <AssemblyInfo><AssemblyVersion>0.9.5.99</AssemblyVersion></AssemblyInfo></Member><Member MemberName="TryNewAndAlloc"><MemberSignature Language="C#" Value="public static Gst.Buffer TryNewAndAlloc (uint size);" /><MemberType>Method</MemberType><AssemblyInfo><AssemblyVersion>0.9.5.99</AssemblyVersion></AssemblyInfo><ReturnValue><ReturnType>Gst.Buffer</ReturnType></ReturnValue><Parameters><Parameter Name="size" Type="System.UInt32" /></Parameters><Docs><param name="size">To be added.</param><summary>To be added.</summary><returns>To be added.</returns><remarks>To be added.</remarks></Docs></Member></Members> + <AssemblyInfo><AssemblyVersion>0.9.5.99</AssemblyVersion></AssemblyInfo></Member></Members> + <Attributes> + <Attribute> + <AttributeName>System.Reflection.DefaultMember("Item")</AttributeName> + </Attribute> + </Attributes> </Type> diff --git a/doc/en/Gst/BufferFlags.xml b/doc/en/Gst/BufferFlags.xml index cf67b9c..03d8199 100644 --- a/doc/en/Gst/BufferFlags.xml +++ b/doc/en/Gst/BufferFlags.xml @@ -17,96 +17,68 @@ <remarks>To be added.</remarks> </Docs> <Members> + + + + + + <Member MemberName="DeltaUnit"> <MemberSignature Language="C#" Value="DeltaUnit" /> <MemberType>Field</MemberType> <AssemblyInfo> <AssemblyVersion>0.9.5.99</AssemblyVersion> </AssemblyInfo> - <ReturnValue> - <ReturnType>Gst.BufferFlags</ReturnType> - </ReturnValue> - <Docs> - <summary>To be added.</summary> - </Docs> - </Member> - <Member MemberName="Discont"> + <ReturnValue><ReturnType>Gst.BufferFlags</ReturnType></ReturnValue> + <Docs><summary>To be added.</summary></Docs> + </Member><Member MemberName="Discont"> <MemberSignature Language="C#" Value="Discont" /> <MemberType>Field</MemberType> <AssemblyInfo> <AssemblyVersion>0.9.5.99</AssemblyVersion> </AssemblyInfo> - <ReturnValue> - <ReturnType>Gst.BufferFlags</ReturnType> - </ReturnValue> - <Docs> - <summary>To be added.</summary> - </Docs> - </Member> - <Member MemberName="Gap"> + <ReturnValue><ReturnType>Gst.BufferFlags</ReturnType></ReturnValue> + <Docs><summary>To be added.</summary></Docs> + </Member><Member MemberName="Gap"> <MemberSignature Language="C#" Value="Gap" /> <MemberType>Field</MemberType> <AssemblyInfo> <AssemblyVersion>0.9.5.99</AssemblyVersion> </AssemblyInfo> - <ReturnValue> - <ReturnType>Gst.BufferFlags</ReturnType> - </ReturnValue> - <Docs> - <summary>To be added.</summary> - </Docs> - </Member> - <Member MemberName="InCaps"> + <ReturnValue><ReturnType>Gst.BufferFlags</ReturnType></ReturnValue> + <Docs><summary>To be added.</summary></Docs> + </Member><Member MemberName="InCaps"> <MemberSignature Language="C#" Value="InCaps" /> <MemberType>Field</MemberType> <AssemblyInfo> <AssemblyVersion>0.9.5.99</AssemblyVersion> </AssemblyInfo> - <ReturnValue> - <ReturnType>Gst.BufferFlags</ReturnType> - </ReturnValue> - <Docs> - <summary>To be added.</summary> - </Docs> - </Member> - <Member MemberName="Last"> + <ReturnValue><ReturnType>Gst.BufferFlags</ReturnType></ReturnValue> + <Docs><summary>To be added.</summary></Docs> + </Member><Member MemberName="Last"> <MemberSignature Language="C#" Value="Last" /> <MemberType>Field</MemberType> <AssemblyInfo> <AssemblyVersion>0.9.5.99</AssemblyVersion> </AssemblyInfo> - <ReturnValue> - <ReturnType>Gst.BufferFlags</ReturnType> - </ReturnValue> - <Docs> - <summary>To be added.</summary> - </Docs> - </Member> - <Member MemberName="Preroll"> + <ReturnValue><ReturnType>Gst.BufferFlags</ReturnType></ReturnValue> + <Docs><summary>To be added.</summary></Docs> + </Member><Member MemberName="Preroll"> <MemberSignature Language="C#" Value="Preroll" /> <MemberType>Field</MemberType> <AssemblyInfo> <AssemblyVersion>0.9.5.99</AssemblyVersion> </AssemblyInfo> - <ReturnValue> - <ReturnType>Gst.BufferFlags</ReturnType> - </ReturnValue> - <Docs> - <summary>To be added.</summary> - </Docs> - </Member> - <Member MemberName="Readonly"> + <ReturnValue><ReturnType>Gst.BufferFlags</ReturnType></ReturnValue> + <Docs><summary>To be added.</summary></Docs> + </Member><Member MemberName="Readonly"> <MemberSignature Language="C#" Value="Readonly" /> <MemberType>Field</MemberType> <AssemblyInfo> <AssemblyVersion>0.9.5.99</AssemblyVersion> </AssemblyInfo> - <ReturnValue> - <ReturnType>Gst.BufferFlags</ReturnType> - </ReturnValue> - <Docs> - <summary>To be added.</summary> - </Docs> + <ReturnValue><ReturnType>Gst.BufferFlags</ReturnType></ReturnValue> + <Docs><summary>To be added.</summary></Docs> </Member> </Members> </Type> diff --git a/doc/en/Gst/TagFlags.xml b/doc/en/Gst/TagFlags.xml index fee6b99..c08c928 100644 --- a/doc/en/Gst/TagFlags.xml +++ b/doc/en/Gst/TagFlags.xml @@ -12,70 +12,50 @@ <remarks>To be added.</remarks> </Docs> <Members> + + + + <Member MemberName="Count"> <MemberSignature Language="C#" Value="Count" /> <MemberType>Field</MemberType> <AssemblyInfo> <AssemblyVersion>0.9.5.99</AssemblyVersion> </AssemblyInfo> - <ReturnValue> - <ReturnType>Gst.TagFlags</ReturnType> - </ReturnValue> - <Docs> - <summary>To be added.</summary> - </Docs> - </Member> - <Member MemberName="Decoded"> + <ReturnValue><ReturnType>Gst.TagFlags</ReturnType></ReturnValue> + <Docs><summary>To be added.</summary></Docs> + </Member><Member MemberName="Decoded"> <MemberSignature Language="C#" Value="Decoded" /> <MemberType>Field</MemberType> <AssemblyInfo> <AssemblyVersion>0.9.5.99</AssemblyVersion> </AssemblyInfo> - <ReturnValue> - <ReturnType>Gst.TagFlags</ReturnType> - </ReturnValue> - <Docs> - <summary>To be added.</summary> - </Docs> - </Member> - <Member MemberName="Encoded"> + <ReturnValue><ReturnType>Gst.TagFlags</ReturnType></ReturnValue> + <Docs><summary>To be added.</summary></Docs> + </Member><Member MemberName="Encoded"> <MemberSignature Language="C#" Value="Encoded" /> <MemberType>Field</MemberType> <AssemblyInfo> <AssemblyVersion>0.9.5.99</AssemblyVersion> </AssemblyInfo> - <ReturnValue> - <ReturnType>Gst.TagFlags</ReturnType> - </ReturnValue> - <Docs> - <summary>To be added.</summary> - </Docs> - </Member> - <Member MemberName="Meta"> + <ReturnValue><ReturnType>Gst.TagFlags</ReturnType></ReturnValue> + <Docs><summary>To be added.</summary></Docs> + </Member><Member MemberName="Meta"> <MemberSignature Language="C#" Value="Meta" /> <MemberType>Field</MemberType> <AssemblyInfo> <AssemblyVersion>0.9.5.99</AssemblyVersion> </AssemblyInfo> - <ReturnValue> - <ReturnType>Gst.TagFlags</ReturnType> - </ReturnValue> - <Docs> - <summary>To be added.</summary> - </Docs> - </Member> - <Member MemberName="Undefined"> + <ReturnValue><ReturnType>Gst.TagFlags</ReturnType></ReturnValue> + <Docs><summary>To be added.</summary></Docs> + </Member><Member MemberName="Undefined"> <MemberSignature Language="C#" Value="Undefined" /> <MemberType>Field</MemberType> <AssemblyInfo> <AssemblyVersion>0.9.5.99</AssemblyVersion> </AssemblyInfo> - <ReturnValue> - <ReturnType>Gst.TagFlags</ReturnType> - </ReturnValue> - <Docs> - <summary>To be added.</summary> - </Docs> + <ReturnValue><ReturnType>Gst.TagFlags</ReturnType></ReturnValue> + <Docs><summary>To be added.</summary></Docs> </Member> </Members> </Type> diff --git a/gstreamer-sharp/Buffer.custom b/gstreamer-sharp/Buffer.custom index e69de29..631e404 100644 --- a/gstreamer-sharp/Buffer.custom +++ b/gstreamer-sharp/Buffer.custom @@ -0,0 +1,197 @@ +[DllImport ("gstreamer-0.10.dll") ] +static extern IntPtr gst_buffer_try_new_and_alloc (uint size); + +public Buffer (uint size) { + IntPtr raw = gst_buffer_try_new_and_alloc (size); + if (raw == IntPtr.Zero) + throw new OutOfMemoryException (); + Raw = raw; +} + +public Buffer (byte[] data) : this () { + Data = data; +} + +[DllImport ("gstreamersharpglue-0.10") ] +extern static uint gstsharp_gst_buffer_get_data_offset (); +[DllImport ("gstreamersharpglue-0.10") ] +extern static void gstsharp_gst_buffer_set_data (IntPtr handle, IntPtr data, uint size); +[DllImport ("libglib-2.0-0.dll") ] +extern static IntPtr g_try_malloc (int size); + +static uint data_offset = gstsharp_gst_buffer_get_data_offset (); +public byte[] 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); + } +} + +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 (); + + unsafe { + byte **raw_ptr = (byte **) ( ( (byte*) Handle) + data_offset); + * ( (*raw_ptr) + index) = value; + } + } +} + +[DllImport ("gstreamer-0.10.dll") ] +static extern IntPtr gst_buffer_make_metadata_writable (IntPtr raw); + +/* FIXME: This is not optimal */ +public void MakeMetadataWritable() { + if (IsMetadataWritable) + return; + + IntPtr sub = gst_buffer_create_sub (Raw, 0, Size); + Raw = sub; + /* ^--- Takes a second ref, not good */ + Unref (Raw); + /* ^--- Sets Owned = false, wrong! */ + Owned = true; +} + +[DllImport ("gstreamer-0.10.dll") ] +static extern IntPtr gst_buffer_get_caps (IntPtr raw); +[DllImport ("gstreamer-0.10.dll") ] +static extern void gst_buffer_set_caps (IntPtr raw, IntPtr caps); + +public Gst.Caps Caps { + get { + IntPtr raw_ret = gst_buffer_get_caps (Handle); + Gst.Caps ret = raw_ret == IntPtr.Zero ? null : (Gst.Caps) GLib.Opaque.GetOpaque (raw_ret, typeof (Gst.Caps), true); + return ret; + } + set { + if (!IsMetadataWritable) + throw new ApplicationException (); + gst_buffer_set_caps (Handle, value == null ? IntPtr.Zero : value.Handle); + } +} + +[DllImport ("gstreamersharpglue-0.10") ] +extern static uint gstsharp_gst_buffer_get_timestamp_offset (); +static uint timestamp_offset = gstsharp_gst_buffer_get_timestamp_offset (); + +public ulong Timestamp { + get { + unsafe { + ulong *raw_ptr = ( (ulong*) ( ( (byte*) Handle) + timestamp_offset)); + return *raw_ptr; + } + } + + set { + if (!IsMetadataWritable) + throw new ApplicationException (); + + unsafe { + ulong *raw_ptr = ( (ulong*) ( ( (byte*) Handle) + timestamp_offset)); + *raw_ptr = value; + } + } +} + +[DllImport ("gstreamersharpglue-0.10") ] +extern static uint gstsharp_gst_buffer_get_duration_offset (); +static uint duration_offset = gstsharp_gst_buffer_get_duration_offset (); + +public ulong Duration { + get { + unsafe { + ulong *raw_ptr = ( (ulong*) ( ( (byte*) Handle) + duration_offset)); + return *raw_ptr; + } + } + + set { + if (!IsMetadataWritable) + throw new ApplicationException (); + + unsafe { + ulong *raw_ptr = ( (ulong*) ( ( (byte*) Handle) + duration_offset)); + *raw_ptr = value; + } + } +} + +[DllImport ("gstreamersharpglue-0.10") ] +extern static uint gstsharp_gst_buffer_get_offset_offset (); +static uint offset_offset = gstsharp_gst_buffer_get_offset_offset (); + +public ulong Offset { + get { + unsafe { + ulong *raw_ptr = ( (ulong*) ( ( (byte*) Handle) + offset_offset)); + return *raw_ptr; + } + } + + set { + if (!IsMetadataWritable) + throw new ApplicationException (); + + unsafe { + ulong *raw_ptr = ( (ulong*) ( ( (byte*) Handle) + offset_offset)); + *raw_ptr = value; + } + } +} + +[DllImport ("gstreamersharpglue-0.10") ] +extern static uint gstsharp_gst_buffer_get_offset_end_offset (); +static uint offset_end_offset = gstsharp_gst_buffer_get_offset_end_offset (); + +public ulong OffsetEnd { + get { + unsafe { + ulong *raw_ptr = ( (ulong*) ( ( (byte*) Handle) + offset_end_offset)); + return *raw_ptr; + } + } + + set { + if (!IsMetadataWritable) + throw new ApplicationException (); + + unsafe { + ulong *raw_ptr = ( (ulong*) ( ( (byte*) Handle) + offset_end_offset)); + *raw_ptr = value; + } + } +} + diff --git a/gstreamer-sharp/Gstreamer.metadata b/gstreamer-sharp/Gstreamer.metadata index b35cf57..541cc08 100644 --- a/gstreamer-sharp/Gstreamer.metadata +++ b/gstreamer-sharp/Gstreamer.metadata @@ -23,7 +23,26 @@ <change-node-type path="/api/namespace/object[@name='Buffer']">boxed</change-node-type> <attr path="/api/namespace/boxed[@name='Buffer']" name="opaque">true</attr> - <attr path="/api/namespace/boxed[@name='Buffer']/method[@name='GetCaps']/return-type" name="owned">true</attr> + <attr path="/api/namespace/boxed[@name='Buffer']/method[@cname='gst_buffer_get_type']" name="new_flag">1</attr> + <attr path="/api/namespace/boxed[@name='Buffer']/method[@cname='gst_buffer_get_caps']/return-type" name="owned">true</attr> + <attr path="/api/namespace/boxed[@name='Buffer']/field[@name='Data']" name="hidden">1</attr> + <attr path="/api/namespace/boxed[@name='Buffer']/field[@name='Duration']" name="hidden">1</attr> + <attr path="/api/namespace/boxed[@name='Buffer']/field[@name='MallocData']" name="hidden">1</attr> + <attr path="/api/namespace/boxed[@name='Buffer']/field[@name='Offset']" name="hidden">1</attr> + <attr path="/api/namespace/boxed[@name='Buffer']/field[@name='OffsetEnd']" name="hidden">1</attr> + <attr path="/api/namespace/boxed[@name='Buffer']/field[@name='Timestamp']" name="hidden">1</attr> + <attr path="/api/namespace/boxed[@name='Buffer']/field[@name='Caps']" name="hidden">1</attr> + <attr path="/api/namespace/boxed[@name='Buffer']/field[@name='FreeFunc']" name="hidden">1</attr> + <attr path="/api/namespace/boxed[@name='Buffer']/method[@cname='gst_buffer_get_caps']" name="hidden">1</attr> + <attr path="/api/namespace/boxed[@name='Buffer']/method[@cname='gst_buffer_set_caps']" name="hidden">1</attr> + <attr path="/api/namespace/boxed[@name='Buffer']/method[@cname='gst_buffer_stamp']" name="hidden">1</attr> + <attr path="/api/namespace/boxed[@name='Buffer']/method[@cname='gst_buffer_join']" name="hidden">1</attr> + <attr path="/api/namespace/boxed[@name='Buffer']/method[@cname='gst_buffer_make_metadata_writable']" name="hidden">1</attr> + <attr path="/api/namespace/boxed[@name='Buffer']/constructor[@cname='gst_buffer_new_and_alloc']" name="hidden">1</attr> + <attr path="/api/namespace/boxed[@name='Buffer']/method[@cname='gst_buffer_try_new_and_alloc']" name="hidden">1</attr> + <attr path="/api/namespace/boxed[@name='Buffer']/method[@cname='gst_buffer_create_sub']/return-type" name="owned">true</attr> + <attr path="/api/namespace/boxed[@name='Buffer']/method[@cname='gst_buffer_merge']/return-type" name="owned">true</attr> + <attr path="/api/namespace/boxed[@name='Buffer']/method[@cname='gst_buffer_span']/return-type" name="owned">true</attr> <attr path="/api/namespace/enum[@name='BufferFlag']" name="name">BufferFlags</attr> <attr path="/api/namespace/enum[@name='BufferFlags']/member[@cname='GST_BUFFER_FLAG_READONLY']" name="value">MiniObjectFlags.Readonly</attr> diff --git a/gstreamer-sharp/glue/Makefile.am b/gstreamer-sharp/glue/Makefile.am index 2d5fdbf..c45e8d5 100644 --- a/gstreamer-sharp/glue/Makefile.am +++ b/gstreamer-sharp/glue/Makefile.am @@ -4,7 +4,6 @@ libgstreamersharpglue_0_10_la_SOURCES = \ buffer.c \ clock.c \ message.c \ - miniobject.c \ bin.c \ gerror.c \ gobject.c diff --git a/gstreamer-sharp/glue/buffer.c b/gstreamer-sharp/glue/buffer.c index 72bd608..025cc63 100644 --- a/gstreamer-sharp/glue/buffer.c +++ b/gstreamer-sharp/glue/buffer.c @@ -1,7 +1,46 @@ #include <gst/gst.h> +void +gstsharp_gst_buffer_set_data (GstBuffer * buffer, guint8 * new_data, guint size) +{ + g_return_if_fail (gst_buffer_is_writable (buffer)); + + if (buffer->malloc_data && buffer->free_func) + buffer->free_func (buffer->malloc_data); + else if (buffer->malloc_data) + g_free (buffer->malloc_data); + + buffer->malloc_data = buffer->data = new_data; + buffer->size = size; + buffer->free_func = NULL; +} + +guint +gstsharp_gst_buffer_get_data_offset (void) +{ + return (guint) G_STRUCT_OFFSET (GstBuffer, data); +} + +guint +gstsharp_gst_buffer_get_timestamp_offset (void) +{ + return (guint) G_STRUCT_OFFSET (GstBuffer, timestamp); +} + +guint +gstsharp_gst_buffer_get_duration_offset (void) +{ + return (guint) G_STRUCT_OFFSET (GstBuffer, duration); +} + +guint +gstsharp_gst_buffer_get_offset_offset (void) +{ + return (guint) G_STRUCT_OFFSET (GstBuffer, offset); +} + guint -gstsharp_gst_buffer_refcount (GstBuffer * buf) +gstsharp_gst_buffer_get_offset_end_offset (void) { - return GST_MINI_OBJECT_REFCOUNT_VALUE (buf); + return (guint) G_STRUCT_OFFSET (GstBuffer, offset_end); } diff --git a/gstreamer-sharp/glue/miniobject.c b/gstreamer-sharp/glue/miniobject.c deleted file mode 100644 index 3bfffb6..0000000 --- a/gstreamer-sharp/glue/miniobject.c +++ /dev/null @@ -1,25 +0,0 @@ -// Thie file is mostly bits and pieces snipped from the gtk-sharp/glib/glue/object.c code -// By Mike Kestner - -#include <glib-object.h> -#include <gst/gstminiobject.h> - -GType -gstsharp_get_type_id (GObject * obj) -{ - return G_TYPE_FROM_INSTANCE (obj); -} - -GType -gstsharp_register_type (gchar * name, GType parent) -{ - GTypeQuery query; - GTypeInfo info = { 0, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL }; - - g_type_query (parent, &query); - - info.class_size = query.class_size; - info.instance_size = query.instance_size; - - return g_type_register_static (parent, name, &info, 0); -} |