diff --git a/sources/custom/Iterator.cs b/sources/custom/Iterator.cs index 6ed07b7345..543c5e6504 100644 --- a/sources/custom/Iterator.cs +++ b/sources/custom/Iterator.cs @@ -34,6 +34,15 @@ namespace Gst { [DllImport ("libgobject-2.0-0.dll", CallingConvention = CallingConvention.Cdecl)] static extern IntPtr g_value_reset (ref GLib.Value val); + [DllImport("libgstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)] + static extern int gst_iterator_next(IntPtr raw, ref GLib.Value elem); + + public Gst.IteratorResult Next(ref GLib.Value elem) { + int raw_ret = gst_iterator_next(Handle, ref elem); + Gst.IteratorResult ret = (Gst.IteratorResult) raw_ret; + return ret; + } + private class Enumerator : IEnumerator { Iterator iterator; Hashtable seen = new Hashtable (); @@ -53,11 +62,10 @@ namespace Gst { return false; do { - GLib.Value value = new GLib.Value (); - IntPtr ptr = g_value_reset (ref value); - value = (GLib.Value) Marshal.PtrToStructure (ptr, typeof(GLib.Value)); + GLib.Value value = new GLib.Value (GLib.GType.Boolean); + value.Dispose (); - IteratorResult ret = iterator.Next (out value); + IteratorResult ret = iterator.Next (ref value); switch (ret) { case IteratorResult.Done: diff --git a/sources/gstreamer-sharp.metadata b/sources/gstreamer-sharp.metadata index b66c9d75a9..62cbc5a95c 100644 --- a/sources/gstreamer-sharp.metadata +++ b/sources/gstreamer-sharp.metadata @@ -49,6 +49,7 @@ along with this program. If not, see . true struct true + true