From 5b386f21fb9258d0a80fe6eefbb6cd097dad3a41 Mon Sep 17 00:00:00 2001 From: Stephan Sundermann Date: Fri, 24 Oct 2014 00:53:37 +0200 Subject: [PATCH] Application: Fix Init(args) and InitCheck(args) Fixes #739069 --- sources/custom/Application.cs | 41 +++++++++++++++++++++++++++++++- sources/gstreamer-sharp.metadata | 7 +++--- 2 files changed, 44 insertions(+), 4 deletions(-) diff --git a/sources/custom/Application.cs b/sources/custom/Application.cs index ea71cc4bde..dd8682afae 100644 --- a/sources/custom/Application.cs +++ b/sources/custom/Application.cs @@ -32,8 +32,47 @@ namespace Gst { } + [DllImport("libgstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)] + static extern void gst_init(ref int argc, ref IntPtr[] argv); + + [DllImport("libgstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)] + static extern void gst_init(IntPtr argc, IntPtr argv); + + public static void Init() { - gst_init (0, null); + gst_init (IntPtr.Zero, IntPtr.Zero); + } + + public static void Init(ref string[] argv) { + int cnt_argv = argv == null ? 0 : argv.Length; + IntPtr[] native_argv = new IntPtr [cnt_argv]; + for (int i = 0; i < cnt_argv; i++) + native_argv [i] = GLib.Marshaller.StringToPtrGStrdup(argv[i]); + gst_init(ref cnt_argv, ref native_argv); + } + + [DllImport("libgstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)] + static extern bool gst_init_check(ref int argc, ref IntPtr[] argv, out IntPtr error); + + [DllImport("libgstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)] + static extern bool gst_init_check(IntPtr argc, IntPtr argv, out IntPtr error); + + public static bool InitCheck() { + IntPtr error = IntPtr.Zero; + bool ret = gst_init_check (IntPtr.Zero, IntPtr.Zero, out error); + if (error != IntPtr.Zero) throw new GLib.GException (error); + return ret; + } + + public static bool InitCheck(ref string[] argv) { + int cnt_argv = argv == null ? 0 : argv.Length; + IntPtr[] native_argv = new IntPtr [cnt_argv]; + for (int i = 0; i < cnt_argv; i++) + native_argv [i] = GLib.Marshaller.StringToPtrGStrdup(argv[i]); + IntPtr error = IntPtr.Zero; + bool ret = gst_init_check(ref cnt_argv, ref native_argv, out error); + if (error != IntPtr.Zero) throw new GLib.GException (error); + return ret; } } } diff --git a/sources/gstreamer-sharp.metadata b/sources/gstreamer-sharp.metadata index 1163607787..17aa8e9a35 100644 --- a/sources/gstreamer-sharp.metadata +++ b/sources/gstreamer-sharp.metadata @@ -70,9 +70,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - - n_argc - n_argc + @@ -123,6 +121,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA true true true + true + true + gpointer