Fix gst_promise_new_with_change_func
authorThibault Saunier <tsaunier@igalia.com>
Sun, 9 Jun 2019 16:16:28 +0000 (12:16 -0400)
committerThibault Saunier <tsaunier@gnome.org>
Wed, 15 Jan 2020 12:22:18 +0000 (12:22 +0000)
For some reason bindinator doesn't properly detect that the `func`
passed in gst_promise_new_with_change_func is a closure and what the
destroy function is (because it is a constructor?)

Mark it manually.

From suggestion from Alex Dircksen: https://gitlab.freedesktop.org/gstreamer/gstreamer-sharp/issues/9#note_166633

Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer-sharp/issues/9

sources/generated/Gst/Promise.cs
sources/generated/gstreamer-sharp-api.xml
sources/gstreamer-sharp.metadata

index c41e7f8..857402a 100644 (file)
@@ -75,9 +75,18 @@ namespace Gst {
                [DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
                static extern IntPtr gst_promise_new_with_change_func(GstSharp.PromiseChangeFuncNative func, IntPtr user_data, GLib.DestroyNotify notify);
 
-               public Promise (Gst.PromiseChangeFunc func, IntPtr user_data, GLib.DestroyNotify notify
+               public Promise (Gst.PromiseChangeFunc func) 
                {
                        GstSharp.PromiseChangeFuncWrapper func_wrapper = new GstSharp.PromiseChangeFuncWrapper (func);
+                       IntPtr user_data;
+                       GLib.DestroyNotify notify;
+                       if (func == null) {
+                               user_data = IntPtr.Zero;
+                               notify = null;
+                       } else {
+                               user_data = (IntPtr) GCHandle.Alloc (func_wrapper);
+                               notify = GLib.DestroyHelper.NotifyHandler;
+                       }
                        Raw = gst_promise_new_with_change_func(func_wrapper.NativeDelegate, user_data, notify);
                }
 
index 259e4ac..6195792 100644 (file)
       <constructor cname="gst_promise_new" disable_void_ctor="" version="1.14" />
       <constructor cname="gst_promise_new_with_change_func" version="1.14">
         <parameters>
-          <parameter name="func" type="GstPromiseChangeFunc" />
+          <parameter name="func" type="GstPromiseChangeFunc" scope="notified" closure="1" destroy="2" />
           <parameter name="user_data" type="gpointer" />
           <parameter name="notify" type="GDestroyNotify" />
         </parameters>
index e25957a..fa74b36 100644 (file)
@@ -39,6 +39,10 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 
        <!-- GstPromise fixes -->
        <attr path="/api/namespace/boxed[@cname='GstPromise']/method[@cname='gst_promise_get_reply']" name="name">RetrieveReply</attr>
+       <attr path="/api/namespace/boxed[@cname='GstPromise']/constructor[@cname='gst_promise_new_with_change_func']/*/*[@name='func']" name="scope">notified</attr>
+       <attr path="/api/namespace/boxed[@cname='GstPromise']/constructor[@cname='gst_promise_new_with_change_func']/*/*[@name='func']" name="closure">1</attr>
+       <attr path="/api/namespace/boxed[@cname='GstPromise']/constructor[@cname='gst_promise_new_with_change_func']/*/*[@name='func']" name="destroy">2</attr>
+
 
        <!-- GstRTSPMessage fixes -->
        <attr path="/api/namespace/boxed[@cname='GstRTSPMessage']/method[@cname='gst_rtsp_message_get_body']" name="hidden">true</attr>