diff --git a/subprojects/gstreamer-sharp/sources/custom/AppSink.cs b/subprojects/gstreamer-sharp/sources/custom/AppSink.cs index 2f21822d06..de90faea39 100644 --- a/subprojects/gstreamer-sharp/sources/custom/AppSink.cs +++ b/subprojects/gstreamer-sharp/sources/custom/AppSink.cs @@ -27,9 +27,8 @@ namespace Gst.App { partial class AppSink { - public AppSink (String name) { - var element = ElementFactory.Make ("appsink", name); - Raw = element.Handle; + public AppSink (String name) : base(IntPtr.Zero) { + Raw = ElementFactory.MakeRaw("appsink", name); } } } diff --git a/subprojects/gstreamer-sharp/sources/custom/AppSrc.cs b/subprojects/gstreamer-sharp/sources/custom/AppSrc.cs index 536725dbf5..ce06671997 100644 --- a/subprojects/gstreamer-sharp/sources/custom/AppSrc.cs +++ b/subprojects/gstreamer-sharp/sources/custom/AppSrc.cs @@ -27,9 +27,8 @@ namespace Gst.App { partial class AppSrc { - public AppSrc (String name) { - var element = ElementFactory.Make ("appsrc", name); - Raw = element.Handle; + public AppSrc (String name) : base(IntPtr.Zero) { + Raw = ElementFactory.MakeRaw ("appsrc", name); } } } diff --git a/subprojects/gstreamer-sharp/sources/custom/ElementFactory.cs b/subprojects/gstreamer-sharp/sources/custom/ElementFactory.cs new file mode 100644 index 0000000000..c6e11a0f89 --- /dev/null +++ b/subprojects/gstreamer-sharp/sources/custom/ElementFactory.cs @@ -0,0 +1,41 @@ +// +// ElementFactory.cs +// +// Authors: +// Jakub Adam +// +// Copyright (C) 2020 Collabora Ltd. +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +// 02110-1301 USA + +namespace Gst +{ + using System; + using System.Runtime.InteropServices; + + public partial class ElementFactory + { + public static IntPtr MakeRaw(string factoryname, string name) + { + IntPtr native_factoryname = GLib.Marshaller.StringToPtrGStrdup(factoryname); + IntPtr native_name = GLib.Marshaller.StringToPtrGStrdup(name); + IntPtr raw_ret = gst_element_factory_make(native_factoryname, native_name); + GLib.Marshaller.Free(native_factoryname); + GLib.Marshaller.Free(native_name); + return raw_ret; + } + } +} diff --git a/subprojects/gstreamer-sharp/sources/meson.build b/subprojects/gstreamer-sharp/sources/meson.build index c327cedf74..0e75ca0e43 100644 --- a/subprojects/gstreamer-sharp/sources/meson.build +++ b/subprojects/gstreamer-sharp/sources/meson.build @@ -16,6 +16,7 @@ sources = [ 'custom/DeviceProvider.cs', 'custom/DynamicSignal.cs', 'custom/Element.cs', + 'custom/ElementFactory.cs', 'custom/FFTF32.cs', 'custom/Iterator.cs', 'custom/MapInfo.cs',