diff options
author | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2009-05-06 12:25:02 +0200 |
---|---|---|
committer | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2009-05-06 12:25:02 +0200 |
commit | 31797cf4e3c3f987ff259136d1b29c76208d07a0 (patch) | |
tree | 133d0cda83a177145aea35c57f5a1b086be39b65 | |
parent | 71f1ba9080174bfaf942f6aeee79e2e37a8df822 (diff) |
Fix Gst.Preset bindings
As C# interfaces don't allow a default implementation we
add a static Gst.PresetDefault class that provides static
methods for calling the default GstPreset method implementations.
-rw-r--r-- | gstreamer-sharp/Gstreamer.metadata | 12 | ||||
-rw-r--r-- | gstreamer-sharp/Makefile.am | 3 | ||||
-rw-r--r-- | gstreamer-sharp/PresetDefault.cs | 115 | ||||
-rw-r--r-- | gstreamer-sharp/gstreamer-api.raw | 114 |
4 files changed, 243 insertions, 1 deletions
diff --git a/gstreamer-sharp/Gstreamer.metadata b/gstreamer-sharp/Gstreamer.metadata index cb19ef9..ec0f03c 100644 --- a/gstreamer-sharp/Gstreamer.metadata +++ b/gstreamer-sharp/Gstreamer.metadata @@ -729,6 +729,18 @@ <attr path="/api/namespace/object[@name='PluginFeature']/method[@cname='gst_plugin_feature_type_name_filter']" name="hidden">1</attr> <attr path="/api/namespace/class[@name='Print']" name="hidden">1</attr> + + <attr path="/api/namespace/interface[@name='Preset']/property" name="hidden">1</attr> + <attr path="/api/namespace/interface[@name='Preset']/method[@cname='gst_preset_get_preset_names']/return-type" name="owned">true</attr> + <attr path="/api/namespace/interface[@name='Preset']/method[@cname='gst_preset_get_preset_names']/return-type" name="null_term_array">true</attr> + <attr path="/api/namespace/interface[@name='Preset']/virtual_method[@cname='get_preset_names']/return-type" name="owned">true</attr> + <attr path="/api/namespace/interface[@name='Preset']/virtual_method[@cname='get_preset_names']/return-type" name="null_term_array">true</attr> + <attr path="/api/namespace/interface[@name='Preset']/method[@cname='gst_preset_get_property_names']/return-type" name="owned">true</attr> + <attr path="/api/namespace/interface[@name='Preset']/method[@cname='gst_preset_get_property_names']/return-type" name="null_term_array">true</attr> + <attr path="/api/namespace/interface[@name='Preset']/virtual_method[@cname='get_property_names']/return-type" name="owned">true</attr> + <attr path="/api/namespace/interface[@name='Preset']/virtual_method[@cname='get_property_names']/return-type" name="null_term_array">true</attr> + <attr path="/api/namespace/interface[@name='Preset']/method[@cname='gst_preset_get_meta']/parameters/parameter[@name='value']" name="pass_as">out</attr> + <attr path="/api/namespace/interface[@name='Preset']/virtual_method[@cname='get_meta']/parameters/parameter[@name='value']" name="pass_as">out</attr> <change-node-type path="/api/namespace/object[@name='Query']">boxed</change-node-type> <attr path="/api/namespace/boxed[@name='Query']" name="opaque">true</attr> diff --git a/gstreamer-sharp/Makefile.am b/gstreamer-sharp/Makefile.am index 9a7d4e6..f487ac2 100644 --- a/gstreamer-sharp/Makefile.am +++ b/gstreamer-sharp/Makefile.am @@ -49,7 +49,8 @@ sources = \ plugins-base/TypeFindElement.cs \ GstSharp.PadQueryTypeFunctionNative.cs \ PadQueryTypeFunction.cs \ - TypeFindDelegates.cs + TypeFindDelegates.cs \ + PresetDefault.cs overrides = \ override/URIHandlerAdapter.cs diff --git a/gstreamer-sharp/PresetDefault.cs b/gstreamer-sharp/PresetDefault.cs new file mode 100644 index 0000000..ded7b52 --- /dev/null +++ b/gstreamer-sharp/PresetDefault.cs @@ -0,0 +1,115 @@ +using System; +using System.Runtime.InteropServices; + +namespace Gst { + public static class PresetDefault { + [StructLayout (LayoutKind.Sequential) ] + struct GstPresetInterface { + public GetPresetNamesNativeDelegate GetPresetNames; + public GetPropertyNamesNativeDelegate GetPropertyNames; + public LoadPresetNativeDelegate LoadPreset; + public SavePresetNativeDelegate SavePreset; + public RenamePresetNativeDelegate RenamePreset; + public DeletePresetNativeDelegate DeletePreset; + public SetMetaNativeDelegate SetMeta; + public GetMetaNativeDelegate GetMeta; + [MarshalAs (UnmanagedType.ByValArray, SizeConst=4) ] + public IntPtr[] GstReserved; + } + delegate IntPtr GetPresetNamesNativeDelegate (IntPtr inst); + delegate IntPtr GetPropertyNamesNativeDelegate (IntPtr inst); + delegate bool LoadPresetNativeDelegate (IntPtr inst, IntPtr name); + delegate bool SavePresetNativeDelegate (IntPtr inst, IntPtr name); + delegate bool RenamePresetNativeDelegate (IntPtr inst, IntPtr old_name, IntPtr new_name); + delegate bool DeletePresetNativeDelegate (IntPtr inst, IntPtr name); + delegate bool SetMetaNativeDelegate (IntPtr inst, IntPtr name, IntPtr tag, IntPtr value); + delegate bool GetMetaNativeDelegate (IntPtr inst, IntPtr name, IntPtr tag, out IntPtr value); + + static GstPresetInterface default_iface; + + [DllImport ("libgobject-2.0-0.dll") ] + static extern IntPtr g_type_default_interface_ref (IntPtr type); + [DllImport ("gstreamer-0.10.dll") ] + static extern IntPtr gst_preset_get_type(); + + static PresetDefault () { + IntPtr type = gst_preset_get_type (); + if (type == IntPtr.Zero) + throw new Exception ("Can't get GstPreset interface type"); + IntPtr native_iface = g_type_default_interface_ref (type); + if (native_iface == IntPtr.Zero) + throw new Exception ("Can't get GstPreset default interface vtable"); + default_iface = (GstPresetInterface) Marshal.PtrToStructure (native_iface, typeof (GstPresetInterface)); + } + + public static bool DeletePreset (GLib.Object o, string name) { + IntPtr native_name = GLib.Marshaller.StringToPtrGStrdup (name); + bool raw_ret = default_iface.DeletePreset (o.Handle, native_name); + bool ret = raw_ret; + GLib.Marshaller.Free (native_name); + return ret; + } + + public static string[] GetPropertyNames (GLib.Object o) { + IntPtr raw_ret = default_iface.GetPropertyNames (o.Handle); + string[] ret = GLib.Marshaller.NullTermPtrToStringArray (raw_ret, true); + return ret; + } + + public static bool RenamePreset (GLib.Object o, string old_name, string new_name) { + IntPtr native_old_name = GLib.Marshaller.StringToPtrGStrdup (old_name); + IntPtr native_new_name = GLib.Marshaller.StringToPtrGStrdup (new_name); + bool raw_ret = default_iface.RenamePreset (o.Handle, native_old_name, native_new_name); + bool ret = raw_ret; + GLib.Marshaller.Free (native_old_name); + GLib.Marshaller.Free (native_new_name); + return ret; + } + + public static bool SetMeta (GLib.Object o, string name, string tag, string value) { + IntPtr native_name = GLib.Marshaller.StringToPtrGStrdup (name); + IntPtr native_tag = GLib.Marshaller.StringToPtrGStrdup (tag); + IntPtr native_value = GLib.Marshaller.StringToPtrGStrdup (value); + bool raw_ret = default_iface.SetMeta (o.Handle, native_name, native_tag, native_value); + bool ret = raw_ret; + GLib.Marshaller.Free (native_name); + GLib.Marshaller.Free (native_tag); + GLib.Marshaller.Free (native_value); + return ret; + } + + public static bool LoadPreset (GLib.Object o, string name) { + IntPtr native_name = GLib.Marshaller.StringToPtrGStrdup (name); + bool raw_ret = default_iface.LoadPreset (o.Handle, native_name); + bool ret = raw_ret; + GLib.Marshaller.Free (native_name); + return ret; + } + + public static bool GetMeta (GLib.Object o, string name, string tag, out string value) { + IntPtr native_name = GLib.Marshaller.StringToPtrGStrdup (name); + IntPtr native_tag = GLib.Marshaller.StringToPtrGStrdup (tag); + IntPtr native_value; + bool raw_ret = default_iface.GetMeta (o.Handle, native_name, native_tag, out native_value); + bool ret = raw_ret; + GLib.Marshaller.Free (native_name); + GLib.Marshaller.Free (native_tag); + value = GLib.Marshaller.PtrToStringGFree (native_value); + return ret; + } + + public static string[] GetPresetNames (GLib.Object o) { + IntPtr raw_ret = default_iface.GetPresetNames (o.Handle); + string[] ret = GLib.Marshaller.NullTermPtrToStringArray (raw_ret, true); + return ret; + } + + public static bool SavePreset (GLib.Object o, string name) { + IntPtr native_name = GLib.Marshaller.StringToPtrGStrdup (name); + bool raw_ret = default_iface.SavePreset (o.Handle, native_name); + bool ret = raw_ret; + GLib.Marshaller.Free (native_name); + return ret; + } + } +} diff --git a/gstreamer-sharp/gstreamer-api.raw b/gstreamer-sharp/gstreamer-api.raw index 82edcd8..bb491a9 100644 --- a/gstreamer-sharp/gstreamer-api.raw +++ b/gstreamer-sharp/gstreamer-api.raw @@ -794,6 +794,120 @@ </parameters> </method> </interface> + <interface name="Preset" cname="GstPreset"> + <class_struct cname="GstPresetInterface"> + <field name="Parent" cname="parent" type="GTypeInterface" /> + <method vm="get_preset_names" /> + <method vm="get_property_names" /> + <method vm="load_preset" /> + <method vm="save_preset" /> + <method vm="rename_preset" /> + <method vm="delete_preset" /> + <method vm="set_meta" /> + <method vm="get_meta" /> + <field name="GstReserved" cname="_gst_reserved" type="gpointer" array_len="GST_PADDING" /> + </class_struct> + <property name="PresetName" cname="preset-name" type="gchar*" writeable="true" /> + <virtual_method name="GetPresetNames" cname="get_preset_names"> + <return-type type="gchar**" /> + <parameters /> + </virtual_method> + <virtual_method name="GetPropertyNames" cname="get_property_names"> + <return-type type="gchar**" /> + <parameters /> + </virtual_method> + <virtual_method name="LoadPreset" cname="load_preset"> + <return-type type="gboolean" /> + <parameters> + <parameter type="const-gchar*" name="name" /> + </parameters> + </virtual_method> + <virtual_method name="SavePreset" cname="save_preset"> + <return-type type="gboolean" /> + <parameters> + <parameter type="const-gchar*" name="name" /> + </parameters> + </virtual_method> + <virtual_method name="RenamePreset" cname="rename_preset"> + <return-type type="gboolean" /> + <parameters> + <parameter type="const-gchar*" name="old_name" /> + <parameter type="const-gchar*" name="new_name" /> + </parameters> + </virtual_method> + <virtual_method name="DeletePreset" cname="delete_preset"> + <return-type type="gboolean" /> + <parameters> + <parameter type="const-gchar*" name="name" /> + </parameters> + </virtual_method> + <virtual_method name="SetMeta" cname="set_meta"> + <return-type type="gboolean" /> + <parameters> + <parameter type="const-gchar*" name="name" /> + <parameter type="const-gchar*" name="tag" /> + <parameter type="const-gchar*" name="value" /> + </parameters> + </virtual_method> + <virtual_method name="GetMeta" cname="get_meta"> + <return-type type="gboolean" /> + <parameters> + <parameter type="const-gchar*" name="name" /> + <parameter type="const-gchar*" name="tag" /> + <parameter type="gchar**" name="value" /> + </parameters> + </virtual_method> + <method name="DeletePreset" cname="gst_preset_delete_preset"> + <return-type type="gboolean" /> + <parameters> + <parameter type="const-gchar*" name="name" /> + </parameters> + </method> + <method name="GetMeta" cname="gst_preset_get_meta"> + <return-type type="gboolean" /> + <parameters> + <parameter type="const-gchar*" name="name" /> + <parameter type="const-gchar*" name="tag" /> + <parameter type="gchar**" name="value" /> + </parameters> + </method> + <method name="GetPresetNames" cname="gst_preset_get_preset_names"> + <return-type type="gchar**" /> + </method> + <method name="GetPropertyNames" cname="gst_preset_get_property_names"> + <return-type type="gchar**" /> + </method> + <method name="GetType" cname="gst_preset_get_type" shared="true"> + <return-type type="GType" /> + </method> + <method name="LoadPreset" cname="gst_preset_load_preset"> + <return-type type="gboolean" /> + <parameters> + <parameter type="const-gchar*" name="name" /> + </parameters> + </method> + <method name="RenamePreset" cname="gst_preset_rename_preset"> + <return-type type="gboolean" /> + <parameters> + <parameter type="const-gchar*" name="old_name" /> + <parameter type="const-gchar*" name="new_name" /> + </parameters> + </method> + <method name="SavePreset" cname="gst_preset_save_preset"> + <return-type type="gboolean" /> + <parameters> + <parameter type="const-gchar*" name="name" /> + </parameters> + </method> + <method name="SetMeta" cname="gst_preset_set_meta"> + <return-type type="gboolean" /> + <parameters> + <parameter type="const-gchar*" name="name" /> + <parameter type="const-gchar*" name="tag" /> + <parameter type="const-gchar*" name="value" /> + </parameters> + </method> + </interface> <interface name="TagSetter" cname="GstTagSetter"> <class_struct cname="GstTagSetterIFace"> <field name="GIface" cname="g_iface" type="GTypeInterface" /> |