diff options
-rw-r--r-- | gstreamer-sharp/Bin.custom | 92 | ||||
-rw-r--r-- | gstreamer-sharp/Element.custom | 86 | ||||
-rw-r--r-- | gstreamer-sharp/Iterator.cs | 90 | ||||
-rw-r--r-- | gstreamer-sharp/Makefile.am | 1 | ||||
-rw-r--r-- | gstreamer-sharp/Pad.custom | 81 |
5 files changed, 101 insertions, 249 deletions
diff --git a/gstreamer-sharp/Bin.custom b/gstreamer-sharp/Bin.custom index 2d1e4b2..8b0911b 100644 --- a/gstreamer-sharp/Bin.custom +++ b/gstreamer-sharp/Bin.custom @@ -52,12 +52,6 @@ public Gst.Element GetByInterface (System.Type type) { } [DllImport ("gstreamer-0.10.dll") ] -static extern int gst_iterator_next (IntPtr iterator, out IntPtr elem); -[DllImport ("gstreamer-0.10.dll") ] -static extern void gst_iterator_resync (IntPtr iterator); -[DllImport ("gstreamer-0.10.dll") ] -static extern void gst_iterator_free (IntPtr iterator); -[DllImport ("gstreamer-0.10.dll") ] static extern IntPtr gst_bin_iterate_elements (IntPtr bin); [DllImport ("gstreamer-0.10.dll") ] static extern IntPtr gst_bin_iterate_recurse (IntPtr bin); @@ -70,112 +64,38 @@ static extern IntPtr gst_bin_iterate_sources (IntPtr bin); [DllImport ("gstreamer-0.10.dll") ] static extern IntPtr gst_bin_iterate_all_by_interface (IntPtr bin, IntPtr gtype); -private class ElementEnumerable : IEnumerable { - private class ElementEnumerator : IEnumerator { - Hashtable seen = new Hashtable (); - IntPtr iterator; - - private object current = null; - public object Current { - get { - return current; - } - } - - public bool MoveNext () { - IntPtr raw_ret; - bool retry = false; - - if (iterator == IntPtr.Zero) - return false; - - do { - int ret = gst_iterator_next (iterator, out raw_ret); - switch (ret) { - case 0: - return false; - case 1: - if (seen.Contains (raw_ret)) { - retry = true; - break; - } - - seen.Add (raw_ret, null); - current = GLib.Object.GetObject (raw_ret, true); - return true; - case 2: - gst_iterator_resync (iterator); - break; - default: - case 3: - throw new Exception ("Error while iterating bin"); - } - } while (retry); - - return false; - } - - public void Reset () { - seen.Clear (); - if (iterator != IntPtr.Zero) - gst_iterator_resync (iterator); - } - - public ElementEnumerator (IntPtr iterator) { - this.iterator = iterator; - } - } - - private IntPtr iterator; - private ElementEnumerator enumerator; - - public ElementEnumerable (IntPtr iterator) { - this.iterator = iterator; - this.enumerator = new ElementEnumerator (iterator); - } - - public IEnumerator GetEnumerator () { - return enumerator; - } - - ~ElementEnumerable () { - if (iterator != IntPtr.Zero) - gst_iterator_free (iterator); - } -} - public IEnumerable Elements { get { - return new ElementEnumerable (gst_bin_iterate_elements (Handle)); + return new Enumerable (gst_bin_iterate_elements (Handle)); } } public IEnumerable ElementsRecurse { get { - return new ElementEnumerable (gst_bin_iterate_recurse (Handle)); + return new Enumerable (gst_bin_iterate_recurse (Handle)); } } public IEnumerable ElementsSorted { get { - return new ElementEnumerable (gst_bin_iterate_sorted (Handle)); + return new Enumerable (gst_bin_iterate_sorted (Handle)); } } public IEnumerable SinkElements { get { - return new ElementEnumerable (gst_bin_iterate_sinks (Handle)); + return new Enumerable (gst_bin_iterate_sinks (Handle)); } } public IEnumerable SourceElements { get { - return new ElementEnumerable (gst_bin_iterate_sources (Handle)); + return new Enumerable (gst_bin_iterate_sources (Handle)); } } public IEnumerable GetAllByInterface (GLib.GType type) { - return new ElementEnumerable (gst_bin_iterate_all_by_interface (Handle, type.Val)); + return new Enumerable (gst_bin_iterate_all_by_interface (Handle, type.Val)); } public IEnumerable GetAllByInterface (System.Type type) { diff --git a/gstreamer-sharp/Element.custom b/gstreamer-sharp/Element.custom index a7d18c9..1098e42 100644 --- a/gstreamer-sharp/Element.custom +++ b/gstreamer-sharp/Element.custom @@ -26,107 +26,27 @@ public static void UnlinkMany (params Element [] elements) { } [DllImport ("gstreamer-0.10.dll") ] -static extern int gst_iterator_next (IntPtr iterator, out IntPtr elem); -[DllImport ("gstreamer-0.10.dll") ] -static extern void gst_iterator_resync (IntPtr iterator); -[DllImport ("gstreamer-0.10.dll") ] -static extern void gst_iterator_free (IntPtr iterator); -[DllImport ("gstreamer-0.10.dll") ] static extern IntPtr gst_element_iterate_pads (IntPtr element); [DllImport ("gstreamer-0.10.dll") ] static extern IntPtr gst_element_iterate_src_pads (IntPtr element); [DllImport ("gstreamer-0.10.dll") ] static extern IntPtr gst_element_iterate_sink_pads (IntPtr element); -private class PadEnumerable : IEnumerable { - private class PadEnumerator : IEnumerator { - Hashtable seen = new Hashtable (); - IntPtr iterator; - - private object current = null; - public object Current { - get { - return current; - } - } - - public bool MoveNext () { - IntPtr raw_ret; - bool retry = false; - - if (iterator == IntPtr.Zero) - return false; - - do { - int ret = gst_iterator_next (iterator, out raw_ret); - switch (ret) { - case 0: - return false; - case 1: - if (seen.Contains (raw_ret)) { - retry = true; - break; - } - - seen.Add (raw_ret, null); - current = GLib.Object.GetObject (raw_ret, true); - return true; - case 2: - gst_iterator_resync (iterator); - break; - default: - case 3: - throw new Exception ("Error while iterating pads"); - } - } while (retry); - - return false; - } - - public void Reset () { - seen.Clear (); - if (iterator != IntPtr.Zero) - gst_iterator_resync (iterator); - } - - public PadEnumerator (IntPtr iterator) { - this.iterator = iterator; - } - } - - private IntPtr iterator; - private PadEnumerator enumerator; - - public PadEnumerable (IntPtr iterator) { - this.iterator = iterator; - this.enumerator = new PadEnumerator (iterator); - } - - public IEnumerator GetEnumerator () { - return enumerator; - } - - ~PadEnumerable () { - if (iterator != IntPtr.Zero) - gst_iterator_free (iterator); - } -} - public IEnumerable Pads { get { - return new PadEnumerable (gst_element_iterate_pads (Handle)); + return new Enumerable (gst_element_iterate_pads (Handle)); } } public IEnumerable SinkPads { get { - return new PadEnumerable (gst_element_iterate_sink_pads (Handle)); + return new Enumerable (gst_element_iterate_sink_pads (Handle)); } } public IEnumerable SrcPads { get { - return new PadEnumerable (gst_element_iterate_src_pads (Handle)); + return new Enumerable (gst_element_iterate_src_pads (Handle)); } } diff --git a/gstreamer-sharp/Iterator.cs b/gstreamer-sharp/Iterator.cs new file mode 100644 index 0000000..1e33131 --- /dev/null +++ b/gstreamer-sharp/Iterator.cs @@ -0,0 +1,90 @@ +using System; +using System.Collections; +using System.Runtime.InteropServices; +using GLib; + +namespace Gst { + + internal class Enumerable : IEnumerable { + private class Enumerator : IEnumerator { + Hashtable seen = new Hashtable (); + IntPtr iterator; + + private object current = null; + public object Current { + get { + return current; + } + } + + public bool MoveNext () { + IntPtr raw_ret; + bool retry = false; + + if (iterator == IntPtr.Zero) + return false; + + do { + int ret = gst_iterator_next (iterator, out raw_ret); + switch (ret) { + case 0: + return false; + case 1: + if (seen.Contains (raw_ret)) { + retry = true; + break; + } + + seen.Add (raw_ret, null); + current = GLib.Object.GetObject (raw_ret, true); + return true; + case 2: + gst_iterator_resync (iterator); + retry = true; + break; + default: + case 3: + throw new Exception ("Error while iterating pads"); + } + } while (retry); + + return false; + } + + public void Reset () { + seen.Clear (); + if (iterator != IntPtr.Zero) + gst_iterator_resync (iterator); + } + + public Enumerator (IntPtr iterator) { + this.iterator = iterator; + } + } + + private IntPtr iterator; + private Enumerator enumerator; + + public Enumerable (IntPtr iterator) { + this.iterator = iterator; + this.enumerator = new Enumerator (iterator); + } + + public IEnumerator GetEnumerator () { + return enumerator; + } + + ~Enumerable () { + if (iterator != IntPtr.Zero) + gst_iterator_free (iterator); + } + + [DllImport ("gstreamer-0.10.dll") ] + static extern int gst_iterator_next (IntPtr iterator, out IntPtr elem); + [DllImport ("gstreamer-0.10.dll") ] + static extern void gst_iterator_resync (IntPtr iterator); + [DllImport ("gstreamer-0.10.dll") ] + static extern void gst_iterator_free (IntPtr iterator); + + } +} diff --git a/gstreamer-sharp/Makefile.am b/gstreamer-sharp/Makefile.am index 5b61419..4c4174f 100644 --- a/gstreamer-sharp/Makefile.am +++ b/gstreamer-sharp/Makefile.am @@ -44,6 +44,7 @@ sources = \ AssemblyInfo.cs \ GError.cs \ Value.cs \ + Iterator.cs \ GstSharp.PadQueryTypeFunctionNative.cs \ PadQueryTypeFunction.cs \ TypeFindDelegates.cs \ diff --git a/gstreamer-sharp/Pad.custom b/gstreamer-sharp/Pad.custom index 1a4cc0a..b0e36a4 100644 --- a/gstreamer-sharp/Pad.custom +++ b/gstreamer-sharp/Pad.custom @@ -432,93 +432,14 @@ public bool StreamTryLock () { } [DllImport ("gstreamer-0.10.dll") ] -static extern int gst_iterator_next (IntPtr iterator, out IntPtr elem); -[DllImport ("gstreamer-0.10.dll") ] -static extern void gst_iterator_resync (IntPtr iterator); -[DllImport ("gstreamer-0.10.dll") ] -static extern void gst_iterator_free (IntPtr iterator); -[DllImport ("gstreamer-0.10.dll") ] static extern IntPtr gst_pad_iterate_internal_links (IntPtr pad); [DllImport ("gstreamer-0.10.dll") ] static extern IntPtr gst_pad_iterate_internal_links_default (IntPtr pad); -private class PadEnumerable : IEnumerable { - private class PadEnumerator : IEnumerator { - Hashtable seen = new Hashtable (); - IntPtr iterator; - - private object current = null; - public object Current { - get { - return current; - } - } - - public bool MoveNext () { - IntPtr raw_ret; - bool retry = false; - - if (iterator == IntPtr.Zero) - return false; - - do { - int ret = gst_iterator_next (iterator, out raw_ret); - switch (ret) { - case 0: - return false; - case 1: - if (seen.Contains (raw_ret)) { - retry = true; - break; - } - - seen.Add (raw_ret, null); - current = GLib.Object.GetObject (raw_ret, true); - return true; - case 2: - gst_iterator_resync (iterator); - break; - default: - case 3: - throw new Exception ("Error while iterating pads"); - } - } while (retry); - - return false; - } - - public void Reset () { - seen.Clear (); - if (iterator != IntPtr.Zero) - gst_iterator_resync (iterator); - } - - public PadEnumerator (IntPtr iterator) { - this.iterator = iterator; - } - } - - private IntPtr iterator; - private PadEnumerator enumerator; - - public PadEnumerable (IntPtr iterator) { - this.iterator = iterator; - this.enumerator = new PadEnumerator (iterator); - } - - public IEnumerator GetEnumerator () { - return enumerator; - } - - ~PadEnumerable () { - if (iterator != IntPtr.Zero) - gst_iterator_free (iterator); - } -} public IEnumerable InternalLinks { get { - return new PadEnumerable (gst_pad_iterate_internal_links (Handle)); + return new Enumerable (gst_pad_iterate_internal_links (Handle)); } } |