Bind gst_buffer_new_wrapped() manually

The memory must be allocated with g_malloc() as we will free it again
later with g_free(), as such allocate and copy the array that is passed
in.
This commit is contained in:
Sebastian Dröge 2020-01-29 12:58:59 +02:00 committed by Thibault Saunier
parent a518db8224
commit a088475b9d
4 changed files with 14 additions and 13 deletions

View file

@ -46,5 +46,15 @@ namespace Gst {
return (ulong) native_dest_size;
}
[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
static extern IntPtr gst_buffer_new_wrapped(IntPtr data, UIntPtr n_length);
public Buffer (byte[] data)
{
IntPtr ptr = GLib.Marshaller.Malloc((ulong) data.Length);
Marshal.Copy(data, 0, ptr, data.Length);
Raw = gst_buffer_new_wrapped(ptr, new UIntPtr((ulong) data.Length));
}
}
}

View file

@ -580,14 +580,6 @@ namespace Gst {
Marshal.FreeHGlobal (native_parms);
}
[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
static extern IntPtr gst_buffer_new_wrapped(byte[] data, UIntPtr n_length);
public Buffer (byte[] data)
{
Raw = gst_buffer_new_wrapped(data, new UIntPtr ((ulong) (data == null ? 0 : data.Length)));
}
[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
static extern IntPtr gst_buffer_new_wrapped_bytes(IntPtr bytes);

View file

@ -6150,10 +6150,10 @@
</parameter>
</parameters>
</constructor>
<constructor cname="gst_buffer_new_wrapped">
<constructor cname="gst_buffer_new_wrapped" hidden="true">
<parameters>
<parameter name="data" type="guint8*" owned="true" array="true" array_length_param_index="1" />
<parameter name="n_length" type="gsize" />
<parameter name="data" type="gpointer*" owned="true" array="true" array_length_param_index="1" />
<parameter name="size" type="gsize" />
</parameters>
</constructor>
<constructor cname="gst_buffer_new_wrapped_bytes" version="1.16">

View file

@ -321,8 +321,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
<attr path="//method[@cname='gst_tag_list_copy_value']/parameters/parameter[@name='dest']" name="pass_as">ref</attr>
<attr path="//object/field[@cname='parent']" name="hidden">true</attr>
<!-- buffer fixes -->
<attr path="//constructor[@cname='gst_buffer_new_wrapped']/parameters/parameter[@name='data']" name="type">guint8*</attr>
<attr path="//constructor[@cname='gst_buffer_new_wrapped']/parameters/parameter[@name='size']" name="name">n_length</attr>
<attr path="//constructor[@cname='gst_buffer_new_wrapped']" name="hidden">true</attr>
<attr path="//constructor[@cname='gst_buffer_new_wrapped_full']/parameters/parameter[@name='data']" name="type">guint8*</attr>
<attr path="//constructor[@cname='gst_memory_new_wrapped']/parameters/parameter[@name='data']" name="type">guint8*</attr>
<attr path="//method[@cname='gst_buffer_fill']/parameters/parameter[@name='src']" name="type">guint8*</attr>