From d17ba74fdc2867e5c1e5c15a3f5dc6fa22bba67d Mon Sep 17 00:00:00 2001 From: Sebastian Dröge Date: Sun, 31 May 2009 21:10:45 +0200 Subject: Add libgstcontroller bindings --- gstreamer-sharp/Application.cs | 6 + gstreamer-sharp/ControlSource.custom | 338 ++++++++++++++++++++++++++ gstreamer-sharp/Controller.custom | 187 ++++++++++++++ gstreamer-sharp/Gstreamer.metadata | 53 ++++ gstreamer-sharp/Makefile.am | 4 +- gstreamer-sharp/glue/Makefile.am | 4 +- gstreamer-sharp/glue/controller.c | 14 ++ gstreamer-sharp/glue/controlsource.c | 41 ++++ gstreamer-sharp/gstreamer-api.raw | 304 +++++++++++++++++++++++ gstreamer-sharp/gstreamer-sharp.dll.config.in | 1 + source/gstreamer-sharp-source.xml | 9 + 11 files changed, 959 insertions(+), 2 deletions(-) create mode 100644 gstreamer-sharp/ControlSource.custom create mode 100644 gstreamer-sharp/Controller.custom create mode 100644 gstreamer-sharp/glue/controller.c create mode 100644 gstreamer-sharp/glue/controlsource.c diff --git a/gstreamer-sharp/Application.cs b/gstreamer-sharp/Application.cs index 1bd1408..80da1fc 100644 --- a/gstreamer-sharp/Application.cs +++ b/gstreamer-sharp/Application.cs @@ -41,6 +41,7 @@ namespace Gst { int argc = 0; gst_init (ref argc, ref argv); + gst_controller_init (ref argc, ref argv); RegisterManagedTypes (); } @@ -147,6 +148,8 @@ namespace Gst { throw new ApplicationException (init_call + " returned a new argv handle"); } + gst_controller_init (ref argc, ref argv_ptr); + if (argc <= 1) { args = new string[0]; } else { @@ -163,6 +166,9 @@ namespace Gst { [DllImport("libgstreamer-0.10.dll") ] private static extern bool gst_init_check (ref int argc, ref IntPtr argv, out IntPtr error); + [DllImport("libgstcontroller-0.10.dll") ] + private static extern void gst_controller_init (ref int argc, ref IntPtr argv); + [DllImport("libgstreamer-0.10.dll") ] private static extern void gst_deinit(); } diff --git a/gstreamer-sharp/ControlSource.custom b/gstreamer-sharp/ControlSource.custom new file mode 100644 index 0000000..d3cdc9a --- /dev/null +++ b/gstreamer-sharp/ControlSource.custom @@ -0,0 +1,338 @@ + +[DllImport ("gstreamersharpglue-0.10.dll") ] +static extern uint gst__controllersharp_gst__controller_controlsource_get_get_value_offset (); + +static uint get_value_offset = gst__controllersharp_gst__controller_controlsource_get_get_value_offset (); + +[StructLayout (LayoutKind.Sequential) ] +struct GstValueArray { + public IntPtr property_name; + public int nbsamples; + public ulong sample_interval; + public IntPtr values; +} + +[StructLayout (LayoutKind.Sequential) ] +struct GstControlSourceCallbacks { + public GetValueCallbackNative get_value; + public GetValueArrayCallbackNative get_value_array; +} + +delegate bool GetValueCallbackNative (IntPtr raw, ulong timestamp, ref GLib.Value val); +delegate bool GetValueArrayCallbackNative (IntPtr raw, ulong timestamp, ref GstValueArray va); + +public delegate bool GetValueCallback (ulong timestamp, ref GLib.Value value); +public delegate System.Array GetValueArrayCallback (ulong timestamp, int nsamples, ulong interval); + +private GetValueCallbackWrapper GetValue_cb_wrapper; +private GetValueArrayCallbackWrapper GetValueArray_cb_wrapper; + +private class GetValueCallbackWrapper { + public bool NativeCallback (IntPtr raw, ulong timestamp, ref GLib.Value val) { + try { + bool __ret = managed (timestamp, ref val); + + return __ret; + } catch (Exception e) { + GLib.ExceptionManager.RaiseUnhandledException (e, true); + // NOTREACHED: Above call does not return. + throw e; + } + } + + internal GetValueCallbackNative NativeDelegate; + GetValueCallback managed; + + public GetValueCallbackWrapper (GetValueCallback managed) { + this.managed = managed; + if (managed != null) + NativeDelegate = new GetValueCallbackNative (NativeCallback); + } + + public static GetValueCallback GetManagedDelegate (GetValueCallbackNative native) { + if (native == null) + return null; + GetValueCallbackWrapper wrapper = (GetValueCallbackWrapper) native.Target; + if (wrapper == null) + return null; + return wrapper.managed; + } +} + +private class GetValueArrayCallbackWrapper { + public bool NativeCallback (IntPtr raw, ulong timestamp, ref GstValueArray va) { + try { + System.Array values = managed (timestamp, va.nbsamples, va.sample_interval); + if (values == null) + return false; + + System.Type t = values.GetType (); + if (t == typeof (string[])) { + string[] ret = (string[]) values; + + for (int i = 0; i < va.nbsamples; i++) { + Marshal.WriteIntPtr (va.values, i * IntPtr.Size, GLib.Marshaller.StringToPtrGStrdup (ret[i])); + } + } else if (t == typeof (short[])) { + short[] ret = (short[]) values; + + for (int i = 0; i < va.nbsamples; i++) { + Marshal.WriteInt16 (va.values, i * 2, ret[i]); + } + } else if (t == typeof (ushort[])) { + ushort[] ret = (ushort[]) values; + + for (int i = 0; i < va.nbsamples; i++) { + Marshal.WriteInt16 (va.values, i * 2, (short) ret[i]); + } + } else if (t == typeof (int[])) { + int[] ret = (int[]) values; + + for (int i = 0; i < va.nbsamples; i++) { + Marshal.WriteInt32 (va.values, i * 4, ret[i]); + } + } else if (t == typeof (uint[])) { + uint[] ret = (uint[]) values; + + for (int i = 0; i < va.nbsamples; i++) { + Marshal.WriteInt32 (va.values, i * 4, (int) ret[i]); + } + } else if (t == typeof (long[])) { + long[] ret = (long[]) values; + + for (int i = 0; i < va.nbsamples; i++) { + Marshal.WriteInt64 (va.values, i * 8, ret[i]); + } + } else if (t == typeof (ulong[])) { + ulong[] ret = (ulong[]) values; + + for (int i = 0; i < va.nbsamples; i++) { + Marshal.WriteInt64 (va.values, i * 8, (long) ret[i]); + } + } else if (t == typeof (float[])) { + float[] ret = (float[]) values; + Marshal.Copy (ret, 0, va.values, va.nbsamples); + } else if (t == typeof (double[])) { + double[] ret = (double[]) values; + Marshal.Copy (ret, 0, va.values, va.nbsamples); + } else if (t == typeof (bool[])) { + bool[] ret = (bool[]) values; + + for (int i = 0; i < va.nbsamples; i++) { + Marshal.WriteInt32 (va.values, i * 4, ret[i] == false ? 0 : 1); + } + } + + return true; + } catch (Exception e) { + GLib.ExceptionManager.RaiseUnhandledException (e, true); + // NOTREACHED: Above call does not return. + throw e; + } + } + + internal GetValueArrayCallbackNative NativeDelegate; + GetValueArrayCallback managed; + + public GetValueArrayCallbackWrapper (GetValueArrayCallback managed) { + this.managed = managed; + if (managed != null) + NativeDelegate = new GetValueArrayCallbackNative (NativeCallback); + } + + public static GetValueArrayCallback GetManagedDelegate (GetValueArrayCallbackNative native) { + if (native == null) + return null; + GetValueArrayCallbackWrapper wrapper = (GetValueArrayCallbackWrapper) native.Target; + if (wrapper == null) + return null; + return wrapper.managed; + } +} + +public void SetCallbacks (GetValueCallback get_value, GetValueArrayCallback get_value_array) { + IntPtr off = new IntPtr (Handle.ToInt64 () + get_value_offset); + + GstControlSourceCallbacks cbs = (GstControlSourceCallbacks) Marshal.PtrToStructure (new IntPtr (Handle.ToInt64 () + get_value_offset), typeof (GstControlSourceCallbacks)); + + GetValueCallbackWrapper gv_wr = new GetValueCallbackWrapper (get_value); + GetValueArrayCallbackWrapper gva_wr = new GetValueArrayCallbackWrapper (get_value_array); + + GetValue_cb_wrapper = gv_wr; + GetValueArray_cb_wrapper = gva_wr; + + cbs.get_value = gv_wr.NativeCallback; + cbs.get_value_array = gva_wr.NativeCallback; + + Marshal.StructureToPtr (cbs, off, false); +} + +[DllImport ("gstreamersharpglue-0.10.dll") ] +static extern bool gst__controllersharp_gst__controller_controlsource_base_bind (IntPtr handle, IntPtr pspec); + +[DllImport ("gstreamersharpglue-0.10.dll") ] +static extern void gst__controllersharp_gst__controller_controlsource_override_bind (IntPtr gtype, BindNativeDelegate cb); + +[GLib.CDeclCallback] +delegate bool BindNativeDelegate (IntPtr handler, IntPtr pspec); + +static BindNativeDelegate Bind_cb_delegate; + +static BindNativeDelegate BindVMCallback { + get { + if (Bind_cb_delegate == null) + Bind_cb_delegate = new BindNativeDelegate (Bind_cb); + return Bind_cb_delegate; + } +} + +static void OverrideBind (GLib.GType gtype) { + OverrideBind (gtype, BindVMCallback); +} + +static void OverrideBind (GLib.GType gtype, BindNativeDelegate callback) { + gst__controllersharp_gst__controller_controlsource_override_bind (gtype.Val, callback); +} + +static bool Bind_cb (IntPtr inst, IntPtr pspec) { + try { + ControlSource __obj = GLib.Object.GetObject (inst, false) as ControlSource; + Gst.PropertyInfo pinfo = new Gst.PropertyInfo (pspec); + return __obj.OnBind (pinfo); + } catch (Exception e) { + GLib.ExceptionManager.RaiseUnhandledException (e, false); + return false; + } +} + +[DllImport ("libgobject-2.0-0.dll") ] +static extern IntPtr g_object_class_find_property (IntPtr klass, IntPtr property); + +[GLib.DefaultSignalHandler (Type=typeof (Gst.Controller.ControlSource), ConnectionMethod="OverrideBind") ] +protected virtual bool OnBind (Gst.PropertyInfo pinfo) { + IntPtr klass = Marshal.ReadIntPtr (Handle); + IntPtr native_property = GLib.Marshaller.StringToPtrGStrdup (pinfo.Name); + IntPtr pspec = g_object_class_find_property (klass, native_property); + GLib.Marshaller.Free (native_property); + + if (pspec == IntPtr.Zero) + return false; + + return gst__controllersharp_gst__controller_controlsource_base_bind (this.Handle, pspec); +} + +[DllImport ("libgstcontroller-0.10.dll") ] +static extern bool gst_control_source_get_value_array (IntPtr raw, ulong timestamp, ref GstValueArray value_array); + +[DllImport ("libglib-2.0-0.dll") ] +static extern IntPtr g_try_malloc (int size); + +static readonly Type[] supported_types = new Type[] { + typeof (string), + typeof (short), + typeof (ushort), + typeof (int), + typeof (uint), + typeof (long), + typeof (ulong), + typeof (float), + typeof (double), + typeof (bool) +}; + +public System.Array GetValueArray (ulong timestamp, int nsamples, ulong interval) { + GstValueArray va = new GstValueArray (); + GLib.Value v = GLib.Value.Empty; + + if (!GetValue (0, ref v)) + return null; + + System.Type t = v.Val.GetType (); + v.Dispose (); + + bool supported = false; + foreach (System.Type tmp in supported_types) + if (tmp == t) + supported = true; + if (!supported) + throw new Exception ("Unsupported type '" + t + "'"); + + int eltsize = Marshal.SizeOf (t); + va.values = g_try_malloc (eltsize * nsamples); + if (va.values == IntPtr.Zero) + throw new OutOfMemoryException (); + + va.nbsamples = nsamples; + va.sample_interval = interval; + + bool raw_ret = gst_control_source_get_value_array (Handle, timestamp, ref va); + + if (!raw_ret) { + GLib.Marshaller.Free (va.values); + return null; + } + + System.Array values = Array.CreateInstance (t, nsamples); + + if (t == typeof (string)) { + string[] ret = (string[]) values; + + for (int i = 0; i < nsamples; i++) { + IntPtr str = Marshal.ReadIntPtr (va.values, i * IntPtr.Size); + ret[i] = GLib.Marshaller.PtrToStringGFree (str); + } + } else if (t == typeof (short)) { + short[] ret = (short[]) values; + + for (int i = 0; i < nsamples; i++) { + ret[i] = Marshal.ReadInt16 (va.values, i * 2); + } + } else if (t == typeof (ushort)) { + ushort[] ret = (ushort[]) values; + + for (int i = 0; i < nsamples; i++) { + ret[i] = (ushort) Marshal.ReadInt16 (va.values, i * 2); + } + } else if (t == typeof (int)) { + int[] ret = (int[]) values; + + for (int i = 0; i < nsamples; i++) { + ret[i] = Marshal.ReadInt32 (va.values, i * 4); + } + } else if (t == typeof (uint)) { + uint[] ret = (uint[]) values; + + for (int i = 0; i < nsamples; i++) { + ret[i] = (uint) Marshal.ReadInt32 (va.values, i * 4); + } + } else if (t == typeof (long)) { + long[] ret = (long[]) values; + + for (int i = 0; i < nsamples; i++) { + ret[i] = Marshal.ReadInt64 (va.values, i * 8); + } + } else if (t == typeof (ulong)) { + ulong[] ret = (ulong[]) values; + + for (int i = 0; i < nsamples; i++) { + ret[i] = (ulong) Marshal.ReadInt64 (va.values, i * 8); + } + } else if (t == typeof (float)) { + float[] ret = (float[]) values; + Marshal.Copy (va.values, ret, 0, nsamples); + } else if (t == typeof (double)) { + double[] ret = (double[]) values; + Marshal.Copy (va.values, ret, 0, nsamples); + } else if (t == typeof (bool)) { + bool[] ret = (bool[]) values; + + for (int i = 0; i < nsamples; i++) { + ret[i] = Marshal.ReadInt32 (va.values, i * 4) != 0; + } + } + + GLib.Marshaller.Free (va.values); + + return values; +} + diff --git a/gstreamer-sharp/Controller.custom b/gstreamer-sharp/Controller.custom new file mode 100644 index 0000000..3613b1e --- /dev/null +++ b/gstreamer-sharp/Controller.custom @@ -0,0 +1,187 @@ +[DllImport ("libgstcontroller-0.10.dll") ] +static extern IntPtr gst_controller_new_list (IntPtr objekt, IntPtr list); + +public Controller (GLib.Object objekt, string[] properties) : base (IntPtr.Zero) { + if (GetType () != typeof (Controller)) { + throw new InvalidOperationException ("Can't override this constructor."); + } + GLib.List list = new GLib.List (properties, typeof (string), true, true); + + Raw = gst_controller_new_list (objekt == null ? IntPtr.Zero : objekt.Handle, list == null ? IntPtr.Zero : list.Handle); +} + +public Controller (GLib.Object objekt, string property) : this (objekt, new string[] {property}) { } + +[DllImport ("libgstcontroller-0.10.dll") ] +static extern bool gst_controller_remove_properties_list (IntPtr raw, IntPtr list); + +public bool RemoveProperties (string[] properties) { + GLib.List list = new GLib.List (properties, typeof (string), true, true); + + bool raw_ret = gst_controller_remove_properties_list (Handle, list == null ? IntPtr.Zero : list.Handle); + bool ret = raw_ret; + return ret; +} + +public bool RemoveProperty (string property) { + return RemoveProperties (new string[] {property}); +} + + +[DllImport ("gstreamersharpglue-0.10.dll") ] +extern static uint gst__controllersharp_gst__controller_controller_get_properties_offset (); + +static uint properties_offset = gst__controllersharp_gst__controller_controller_get_properties_offset (); +public string[] Properties { + get { + GLib.List properties_list; + + unsafe { + IntPtr* raw_ptr = (IntPtr*) ( ( (byte*) Handle) + properties_offset); + properties_list = new GLib.List ( (*raw_ptr), typeof (string)); + } + + string[] properties = new string[properties_list.Count]; + for (int i = 0; i < properties_list.Count; i++) + properties[i] = (string) properties_list[i]; + + return properties; + } +} + +[DllImport ("gstreamersharpglue-0.10.dll") ] +extern static uint gst__controllersharp_gst__controller_controller_get_object_offset (); + +static uint object_offset = gst__controllersharp_gst__controller_controller_get_object_offset (); +public GLib.Object Object { + get { + unsafe { + IntPtr* raw_ptr = (IntPtr*) ( ( (byte*) Handle) + object_offset); + return GLib.Object.GetObject ( (*raw_ptr)); + } + } +} + +[StructLayout (LayoutKind.Sequential) ] +struct GstValueArray { + public IntPtr property_name; + public int nbsamples; + public ulong sample_interval; + public IntPtr values; +} + +[DllImport ("libgstcontroller-0.10.dll") ] +static extern bool gst_controller_get_value_array (IntPtr raw, ulong timestamp, ref GstValueArray value_array); + +[DllImport ("libglib-2.0-0.dll") ] +static extern IntPtr g_try_malloc (int size); + +static readonly Type[] supported_types = new Type[] { + typeof (string), + typeof (short), + typeof (ushort), + typeof (int), + typeof (uint), + typeof (long), + typeof (ulong), + typeof (float), + typeof (double), + typeof (bool) +}; + +public System.Array GetValueArray (string property, ulong timestamp, int nsamples, ulong interval) { + GstValueArray va = new GstValueArray (); + + Gst.Object ob = (Gst.Object) this.Object; + Gst.PropertyInfo pi = ob.GetPropertyInfo (property); + System.Type t = (System.Type) pi.GType; + + bool supported = false; + foreach (System.Type tmp in supported_types) + if (tmp == t) + supported = true; + if (!supported) + throw new Exception ("Unsupported type '" + t + "'"); + + int eltsize = Marshal.SizeOf (t); + va.values = g_try_malloc (eltsize * nsamples); + if (va.values == IntPtr.Zero) + throw new OutOfMemoryException (); + + va.property_name = GLib.Marshaller.StringToPtrGStrdup (property); + va.nbsamples = nsamples; + va.sample_interval = interval; + + bool raw_ret = gst_controller_get_value_array (Handle, timestamp, ref va); + + if (!raw_ret) { + GLib.Marshaller.Free (va.property_name); + GLib.Marshaller.Free (va.values); + return null; + } + + System.Array values = Array.CreateInstance (t, nsamples); + + if (t == typeof (string)) { + string[] ret = (string[]) values; + + for (int i = 0; i < nsamples; i++) { + IntPtr str = Marshal.ReadIntPtr (va.values, i * IntPtr.Size); + ret[i] = GLib.Marshaller.PtrToStringGFree (str); + } + } else if (t == typeof (short)) { + short[] ret = (short[]) values; + + for (int i = 0; i < nsamples; i++) { + ret[i] = Marshal.ReadInt16 (va.values, i * 2); + } + } else if (t == typeof (ushort)) { + ushort[] ret = (ushort[]) values; + + for (int i = 0; i < nsamples; i++) { + ret[i] = (ushort) Marshal.ReadInt16 (va.values, i * 2); + } + } else if (t == typeof (int)) { + int[] ret = (int[]) values; + + for (int i = 0; i < nsamples; i++) { + ret[i] = Marshal.ReadInt32 (va.values, i * 4); + } + } else if (t == typeof (uint)) { + uint[] ret = (uint[]) values; + + for (int i = 0; i < nsamples; i++) { + ret[i] = (uint) Marshal.ReadInt32 (va.values, i * 4); + } + } else if (t == typeof (long)) { + long[] ret = (long[]) values; + + for (int i = 0; i < nsamples; i++) { + ret[i] = Marshal.ReadInt64 (va.values, i * 8); + } + } else if (t == typeof (ulong)) { + ulong[] ret = (ulong[]) values; + + for (int i = 0; i < nsamples; i++) { + ret[i] = (ulong) Marshal.ReadInt64 (va.values, i * 8); + } + } else if (t == typeof (float)) { + float[] ret = (float[]) values; + Marshal.Copy (va.values, ret, 0, nsamples); + } else if (t == typeof (double)) { + double[] ret = (double[]) values; + Marshal.Copy (va.values, ret, 0, nsamples); + } else if (t == typeof (bool)) { + bool[] ret = (bool[]) values; + + for (int i = 0; i < nsamples; i++) { + ret[i] = Marshal.ReadInt32 (va.values, i * 4) != 0; + } + } + + GLib.Marshaller.Free (va.property_name); + GLib.Marshaller.Free (va.values); + + return values; +} + diff --git a/gstreamer-sharp/Gstreamer.metadata b/gstreamer-sharp/Gstreamer.metadata index 0e051f6..2595784 100644 --- a/gstreamer-sharp/Gstreamer.metadata +++ b/gstreamer-sharp/Gstreamer.metadata @@ -1057,6 +1057,59 @@ + + InterpolateMode + LFOWaveform + 1 + 1 + 1 + + Controller + 1 + 1 + true + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + + ControlSource + + + + + + + + + + ref + + InterpolationControlSource + ref + 1 + 1 + LFOControlSource + 1 + 1 + + ColorBalanceType MixerFlags diff --git a/gstreamer-sharp/Makefile.am b/gstreamer-sharp/Makefile.am index 57632ea..e363df6 100644 --- a/gstreamer-sharp/Makefile.am +++ b/gstreamer-sharp/Makefile.am @@ -109,7 +109,9 @@ customs = \ MixerTrack.custom \ TunerNorm.custom \ TunerChannel.custom \ - Adapter.custom + Adapter.custom \ + Controller.custom \ + ControlSource.custom build_customs = $(addprefix $(srcdir)/, $(customs)) diff --git a/gstreamer-sharp/glue/Makefile.am b/gstreamer-sharp/glue/Makefile.am index d7963eb..d35bf82 100644 --- a/gstreamer-sharp/glue/Makefile.am +++ b/gstreamer-sharp/glue/Makefile.am @@ -18,7 +18,9 @@ libgstreamersharpglue_0_10_la_SOURCES = \ indexfactory.c \ mixertrack.c \ tunernorm.c \ - adapter.c + adapter.c \ + controller.c \ + controlsource.c nodist_libgstreamersharpglue_0_10_la_SOURCES = generated.c diff --git a/gstreamer-sharp/glue/controller.c b/gstreamer-sharp/glue/controller.c new file mode 100644 index 0000000..a540871 --- /dev/null +++ b/gstreamer-sharp/glue/controller.c @@ -0,0 +1,14 @@ +#include + +guint +gst__controllersharp_gst__controller_controller_get_properties_offset (void) +{ + return (guint)G_STRUCT_OFFSET (GstController, properties); +} + +guint +gst__controllersharp_gst__controller_controller_get_object_offset (void) +{ + return (guint)G_STRUCT_OFFSET (GstController, object); +} + diff --git a/gstreamer-sharp/glue/controlsource.c b/gstreamer-sharp/glue/controlsource.c new file mode 100644 index 0000000..173a09e --- /dev/null +++ b/gstreamer-sharp/glue/controlsource.c @@ -0,0 +1,41 @@ +#include +#include + +guint +gst__controllersharp_gst__controller_controlsource_get_get_value_offset (void) +{ + return (guint)G_STRUCT_OFFSET (GstControlSource, get_value); +} + +const gchar *__gtype_prefix = "__gtksharp_"; +#define HAS_PREFIX(a) (*((guint64 *)(a)) == *((guint64 *) __gtype_prefix)) + +static GObjectClass * +get_threshold_class (GObject *obj) +{ + GType gtype = G_TYPE_FROM_INSTANCE (obj); + while (HAS_PREFIX (g_type_name (gtype))) + gtype = g_type_parent (gtype); + GObjectClass *klass = g_type_class_peek (gtype); + if (klass == NULL) klass = g_type_class_ref (gtype); + return klass; +} + +gboolean +gst__controllersharp_gst__controller_controlsource_base_bind (GstControlSource *csource, GParamSpec *pspec) +{ + GstControlSourceClass *parent = (GstControlSourceClass *) get_threshold_class (G_OBJECT (csource)); + if (parent->bind) + return parent->bind (csource, pspec); + return FALSE; +} + +void +gst__controllersharp_gst__controller_controlsource_override_bind (GType gtype, gpointer cb) +{ + GstControlSourceClass *klass = g_type_class_peek (gtype); + if (!klass) + klass = g_type_class_ref (gtype); + ((GstControlSourceClass *) klass)->bind = cb; +} + diff --git a/gstreamer-sharp/gstreamer-api.raw b/gstreamer-sharp/gstreamer-api.raw index e938735..fbf4af3 100644 --- a/gstreamer-sharp/gstreamer-api.raw +++ b/gstreamer-sharp/gstreamer-api.raw @@ -6873,6 +6873,310 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/gstreamer-sharp/gstreamer-sharp.dll.config.in b/gstreamer-sharp/gstreamer-sharp.dll.config.in index 4a168ed..f4e440f 100644 --- a/gstreamer-sharp/gstreamer-sharp.dll.config.in +++ b/gstreamer-sharp/gstreamer-sharp.dll.config.in @@ -3,5 +3,6 @@ + + ../../gstreamer/libs/gst/controller + + ../../gstreamer/libs/gst/controller/gstcontrollerprivate.h + ../../gstreamer/libs/gst/controller/gstinterpolationcontrolsourceprivate.h + ../../gstreamer/libs/gst/controller/gstlfocontrolsourceprivate.h + + ../../gst-plugins-base/gst-libs/gst/interfaces -- cgit v1.2.3