From 8273b2980557c597d47b0f8ecb6cd4423d43004e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomislav=20Tustoni=C4=87?= Date: Wed, 21 Nov 2018 00:35:28 +0100 Subject: [PATCH] A fix for a Gst.Object.Replace in Object.cs --- sources/generated/Gst/Object.cs | 46 +++++++++++++++++++++++++++++++---------- 1 file changed, 35 insertions(+), 11 deletions(-) diff --git a/sources/generated/Gst/Object.cs b/sources/generated/Gst/Object.cs index 150165c..c34c173 100644 --- a/sources/generated/Gst/Object.cs +++ b/sources/generated/Gst/Object.cs @@ -248,17 +248,41 @@ namespace Gst { } [DllImport("libgstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)] - static extern bool gst_object_replace(IntPtr oldobj, IntPtr newobj); - - public static bool Replace(Gst.Object oldobj, Gst.Object newobj) { - bool raw_ret = gst_object_replace(oldobj == null ? IntPtr.Zero : oldobj.OwnedHandle, newobj == null ? IntPtr.Zero : newobj.Handle); - bool ret = raw_ret; - return ret; - } - - public static bool Replace() { - return Replace (null, null); - } + static extern bool gst_object_replace(ref IntPtr oldobj, IntPtr newobj); + + public static bool Replace(ref T oldobj, T newobj) where T: Gst.Object + { + var oldPtr = oldobj == null ? IntPtr.Zero : oldobj.OwnedHandle; + var newPtr = newobj == null ? IntPtr.Zero : newobj.Handle; + bool raw_ret = gst_object_replace(ref oldPtr, newPtr); + if (raw_ret) + { + var objtype = typeof(T); + oldobj = (T)Activator.CreateInstance(objtype, oldPtr); + } + bool ret = raw_ret; + return ret; + } + + public static bool Replace(ref Gst.Object oldobj, Gst.Object newobj) + { + var oldPtr = oldobj == null ? IntPtr.Zero : oldobj.OwnedHandle; + var newPtr = newobj == null ? IntPtr.Zero : newobj.Handle; + bool raw_ret = gst_object_replace(ref oldPtr, newPtr); + if (raw_ret) + { + var objtype = oldobj?.GetType() ?? newobj?.GetType(); + oldobj = (Gst.Object)Activator.CreateInstance(objtype, oldPtr); + } + bool ret = raw_ret; + return ret; + } + + public static bool Replace() + { + Gst.Object old = null; + return Replace(ref old, (Gst.Object)null); + } [DllImport("libgstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)] static extern bool gst_object_add_control_binding(IntPtr raw, IntPtr binding); -- 2.14.1.windows.1