diff --git a/doc/en/Gst/Buffer.xml b/doc/en/Gst/Buffer.xml index 37d18053ba..00aecd43c4 100644 --- a/doc/en/Gst/Buffer.xml +++ b/doc/en/Gst/Buffer.xml @@ -35,7 +35,7 @@ - Constructor0.9.5.99To be added.To be added. + Constructor0.9.5.99To be added.To be added.Constructor0.9.5.99To be added.To be added.To be added. Constructor @@ -57,12 +57,12 @@ To be added.To be added.To be added.To be added.To be added. 0.9.5.99 - + Property - System.Byte + System.Byte[] To be added.To be added.To be added. 0.9.5.99 - + Property System.UInt64 To be added.To be added.To be added. @@ -82,36 +82,19 @@ System.Boolean To be added.To be added.To be added.To be added. - 0.9.5.99 - - Method - Gst.Buffer - - To be added.To be added.To be added.To be added. - 0.9.5.99 - - Method - Gst.Buffer - - To be added.To be added.To be added. - 0.9.5.99 - - Property - System.Byte - To be added.To be added.To be added. - 0.9.5.99 + 0.9.5.99Property0.9.5.99System.ByteTo be added.To be added.To be added.To be added.Method0.9.5.99System.VoidTo be added.To be added. Method Gst.Buffer To be added.To be added.To be added.To be added. 0.9.5.99 - + Property System.UInt64 To be added.To be added.To be added. 0.9.5.99 - + Property System.UInt64 To be added.To be added.To be added. @@ -126,16 +109,15 @@ Gst.Buffer To be added.To be added.To be added.To be added.To be added.To be added. - 0.9.5.99 - - Method - System.Void - - To be added.To be added.To be added. 0.9.5.99 - + Property System.UInt64 To be added.To be added.To be added. - 0.9.5.99Method0.9.5.99Gst.BufferTo be added.To be added.To be added.To be added. + 0.9.5.99 + + + System.Reflection.DefaultMember("Item") + + diff --git a/doc/en/Gst/BufferFlags.xml b/doc/en/Gst/BufferFlags.xml index cf67b9c0f4..03d819906c 100644 --- a/doc/en/Gst/BufferFlags.xml +++ b/doc/en/Gst/BufferFlags.xml @@ -17,96 +17,68 @@ To be added. + + + + + + Field 0.9.5.99 - - Gst.BufferFlags - - - To be added. - - - + Gst.BufferFlags + To be added. + Field 0.9.5.99 - - Gst.BufferFlags - - - To be added. - - - + Gst.BufferFlags + To be added. + Field 0.9.5.99 - - Gst.BufferFlags - - - To be added. - - - + Gst.BufferFlags + To be added. + Field 0.9.5.99 - - Gst.BufferFlags - - - To be added. - - - + Gst.BufferFlags + To be added. + Field 0.9.5.99 - - Gst.BufferFlags - - - To be added. - - - + Gst.BufferFlags + To be added. + Field 0.9.5.99 - - Gst.BufferFlags - - - To be added. - - - + Gst.BufferFlags + To be added. + Field 0.9.5.99 - - Gst.BufferFlags - - - To be added. - + Gst.BufferFlags + To be added. diff --git a/doc/en/Gst/TagFlags.xml b/doc/en/Gst/TagFlags.xml index fee6b993f8..c08c9287a4 100644 --- a/doc/en/Gst/TagFlags.xml +++ b/doc/en/Gst/TagFlags.xml @@ -12,70 +12,50 @@ To be added. + + + + Field 0.9.5.99 - - Gst.TagFlags - - - To be added. - - - + Gst.TagFlags + To be added. + Field 0.9.5.99 - - Gst.TagFlags - - - To be added. - - - + Gst.TagFlags + To be added. + Field 0.9.5.99 - - Gst.TagFlags - - - To be added. - - - + Gst.TagFlags + To be added. + Field 0.9.5.99 - - Gst.TagFlags - - - To be added. - - - + Gst.TagFlags + To be added. + Field 0.9.5.99 - - Gst.TagFlags - - - To be added. - + Gst.TagFlags + To be added. diff --git a/gstreamer-sharp/Buffer.custom b/gstreamer-sharp/Buffer.custom index e69de29bb2..631e4044e3 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 b35cf57180..541cc082a2 100644 --- a/gstreamer-sharp/Gstreamer.metadata +++ b/gstreamer-sharp/Gstreamer.metadata @@ -23,7 +23,26 @@ boxed true - true + 1 + true + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + true + true + true BufferFlags MiniObjectFlags.Readonly diff --git a/gstreamer-sharp/glue/Makefile.am b/gstreamer-sharp/glue/Makefile.am index 2d5fdbf529..c45e8d5551 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 72bd608da6..025cc63709 100644 --- a/gstreamer-sharp/glue/buffer.c +++ b/gstreamer-sharp/glue/buffer.c @@ -1,7 +1,46 @@ #include -guint -gstsharp_gst_buffer_refcount (GstBuffer * buf) +void +gstsharp_gst_buffer_set_data (GstBuffer * buffer, guint8 * new_data, guint size) { - return GST_MINI_OBJECT_REFCOUNT_VALUE (buf); + 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_get_offset_end_offset (void) +{ + 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 3bfffb622c..0000000000 --- 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 -#include - -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); -}