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);
-}