[banshee/managed-gst] Initial work to port libbanshee to C#



commit e9bef1bb137d6fe8de9a5b4f4ddf5f7f14f9d381
Author: Aaron Bockover <abockover novell com>
Date:   Sun May 3 01:45:03 2009 -0400

    Initial work to port libbanshee to C#
    
    This first pass adds a light-weight manual binding to the parts
    of GStreamer that we actually use. It is not my intention to do
    a full binding here, so don't ask.
    
    The ultimate goal is two-fold:
    
      a) Remove native code dependency on Windows
      b) Make our pipeline extensible through Mono.Addins
---
 .../Banshee.GStreamer.Player/AudioSink.cs          |   81 ++++++++
 .../Banshee.GStreamer.Player/Equalizer.cs          |   71 +++++++
 .../Banshee.GStreamer.Player/PlayerEngine.cs       |   60 ++++++
 .../Banshee.GStreamer/Banshee.GStreamer.csproj     |   16 ++
 src/Backends/Banshee.GStreamer/GStreamer/Bin.cs    |  137 +++++++++++++
 .../Banshee.GStreamer/GStreamer/Element.cs         |  161 +++++++++++++++
 .../GStreamer/ElementException.cs                  |   37 ++++
 .../Banshee.GStreamer/GStreamer/ElementFactory.cs  |  204 ++++++++++++++++++++
 .../GStreamer/ElementNotFoundException.cs          |   51 +++++
 .../Banshee.GStreamer/GStreamer/Framework.cs       |  130 +++++++++++++
 .../GStreamer/FrameworkVersion.cs                  |   60 ++++++
 src/Backends/Banshee.GStreamer/GStreamer/Object.cs |   66 +++++++
 .../Banshee.GStreamer/GStreamer/PluginFeature.cs   |   50 +++++
 src/Backends/Banshee.GStreamer/Makefile.am         |   15 ++-
 14 files changed, 1138 insertions(+), 1 deletions(-)

diff --git a/src/Backends/Banshee.GStreamer/Banshee.GStreamer.Player/AudioSink.cs b/src/Backends/Banshee.GStreamer/Banshee.GStreamer.Player/AudioSink.cs
new file mode 100644
index 0000000..f9dd833
--- /dev/null
+++ b/src/Backends/Banshee.GStreamer/Banshee.GStreamer.Player/AudioSink.cs
@@ -0,0 +1,81 @@
+// 
+// AudioSink.cs
+//  
+// Author:
+//   Aaron Bockover <abockover novell com>
+// 
+// Copyright 2009 Aaron Bockover
+// 
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+// 
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+
+using GStreamer;
+
+namespace Banshee.GStreamer.Player
+{
+    public class AudioSink : Bin
+    {
+        private Element tee;
+        private Element queue;
+        private Equalizer equalizer;
+        private Element primary_sink;
+
+        public AudioSink () : base ("banshee-audio-sink-bin")
+        {
+            BuildPipeline ();
+        }
+
+        protected virtual Element BuildPrimarySink ()
+        {
+            // Try to find an audio sink, prefer gconf, which typically is set to auto these days,
+            // fall back on auto, which should work on windows, and as a last ditch, try alsa
+            var primary_sink = ElementFactory.MakeFirstOf ("audiosink",
+                "gconfaudiosink",
+                "autoaudiosink",
+                "alsasink");
+
+            // Set the profile to "music and movies" (gst-plugins-good 0.10.3)
+            primary_sink.SetProperty ("profile", 1);
+
+            return primary_sink;
+        }
+        
+        private void BuildPipeline ()
+        {
+            Add (
+                primary_sink = BuildPrimarySink (),
+                tee = ElementFactory.Make ("tee", "tee"),
+                queue = ElementFactory.Make ("queue", "queue")
+            );
+
+            equalizer = new Equalizer ();
+            if (equalizer.IsValid) {
+                Add (equalizer);
+            }
+
+            Element.Link (tee, queue);
+            if (equalizer.IsValid) {
+                Element.Link (queue, equalizer, primary_sink);
+            } else {
+                Element.Link (queue, equalizer, primary_sink);
+            }
+        }
+    }
+}
diff --git a/src/Backends/Banshee.GStreamer/Banshee.GStreamer.Player/Equalizer.cs b/src/Backends/Banshee.GStreamer/Banshee.GStreamer.Player/Equalizer.cs
new file mode 100644
index 0000000..d68c3bd
--- /dev/null
+++ b/src/Backends/Banshee.GStreamer/Banshee.GStreamer.Player/Equalizer.cs
@@ -0,0 +1,71 @@
+// 
+// Equalizer.cs
+//  
+// Author:
+//   Aaron Bockover <abockover novell com>
+// 
+// Copyright 2009 Aaron Bockover
+// 
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+// 
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+
+using GStreamer;
+
+namespace Banshee.GStreamer.Player
+{
+    public class Equalizer : Bin
+    {
+        private Element audioconvert_1;
+        private Element audioconvert_2;
+        private Element preamp;
+        private Element equalizer;
+
+        public Equalizer () : base ("banshee-equalizer-bin")
+        {
+            BuildPipeline ();
+        }
+
+        protected virtual Element BuildEqualizer ()
+        {
+            return null;
+        }
+
+        private void BuildPipeline ()
+        {
+            equalizer = BuildEqualizer ();
+            if (equalizer == null) {
+                return;
+            }
+
+            Add (
+                audioconvert_1 = ElementFactory.Make ("audioconvert", "audioconvert-1"),
+                audioconvert_2 = ElementFactory.Make ("audioconvert", "audioconvert-2"),
+                preamp = ElementFactory.Make ("volume", "preamp"),
+                equalizer
+            );
+
+            Element.Link (audioconvert_1, preamp, equalizer, audioconvert_2);
+        }
+
+        public bool IsValid {
+            get { return equalizer != null; }
+        }
+    }
+}
diff --git a/src/Backends/Banshee.GStreamer/Banshee.GStreamer.Player/PlayerEngine.cs b/src/Backends/Banshee.GStreamer/Banshee.GStreamer.Player/PlayerEngine.cs
new file mode 100644
index 0000000..032242e
--- /dev/null
+++ b/src/Backends/Banshee.GStreamer/Banshee.GStreamer.Player/PlayerEngine.cs
@@ -0,0 +1,60 @@
+// 
+// PlayerEngine.cs
+//  
+// Author:
+//   Aaron Bockover <abockover novell com>
+// 
+// Copyright 2009 Aaron Bockover
+// 
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+// 
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+
+using GStreamer;
+
+namespace Banshee.GStreamer.Player
+{
+    public class PlayerEngine
+    {
+        public static void Main (string [] args)
+        {
+            Framework.Init ();
+            new PlayerEngine ();
+        }
+
+        private Element playbin;
+        //private AudioSink audiosink_bin;
+        
+        // private object mutex = new object ();
+
+        public PlayerEngine ()
+        {
+            ConstructPipeline ();
+        }
+
+        private void ConstructPipeline ()
+        {
+            playbin = ElementFactory.Make ("playbin", "playbin");
+
+            new AudioSink ();
+
+           playbin.SetProperty ("audio-sink", ElementFactory.Make ("alsasink", "bah"));
+        }
+    }
+}
diff --git a/src/Backends/Banshee.GStreamer/Banshee.GStreamer.csproj b/src/Backends/Banshee.GStreamer/Banshee.GStreamer.csproj
index 5dc9b83..a728ef4 100644
--- a/src/Backends/Banshee.GStreamer/Banshee.GStreamer.csproj
+++ b/src/Backends/Banshee.GStreamer/Banshee.GStreamer.csproj
@@ -57,6 +57,18 @@
     <Compile Include="Banshee.GStreamer\TagList.cs" />
     <Compile Include="Banshee.GStreamer\Transcoder.cs" />
     <Compile Include="Banshee.GStreamer\BpmDetector.cs" />
+    <Compile Include="GStreamer\Element.cs" />
+    <Compile Include="GStreamer\Object.cs" />
+    <Compile Include="Banshee.GStreamer.Player\PlayerEngine.cs" />
+    <Compile Include="GStreamer\ElementFactory.cs" />
+    <Compile Include="GStreamer\PluginFeature.cs" />
+    <Compile Include="GStreamer\ElementNotFoundException.cs" />
+    <Compile Include="GStreamer\Framework.cs" />
+    <Compile Include="GStreamer\FrameworkVersion.cs" />
+    <Compile Include="GStreamer\Bin.cs" />
+    <Compile Include="Banshee.GStreamer.Player\AudioSink.cs" />
+    <Compile Include="Banshee.GStreamer.Player\Equalizer.cs" />
+    <Compile Include="GStreamer\ElementException.cs" />
   </ItemGroup>
   <ItemGroup>
     <EmbeddedResource Include="Banshee.GStreamer.addin.xml" />
@@ -77,4 +89,8 @@
       </Properties>
     </MonoDevelop>
   </ProjectExtensions>
+  <ItemGroup>
+    <Folder Include="GStreamer\" />
+    <Folder Include="Banshee.GStreamer.Player\" />
+  </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/src/Backends/Banshee.GStreamer/GStreamer/Bin.cs b/src/Backends/Banshee.GStreamer/GStreamer/Bin.cs
new file mode 100644
index 0000000..24698ee
--- /dev/null
+++ b/src/Backends/Banshee.GStreamer/GStreamer/Bin.cs
@@ -0,0 +1,137 @@
+// 
+// Bin.cs
+//  
+// Author:
+//   Aaron Bockover <abockover novell com>
+// 
+// Copyright 2009 Aaron Bockover
+// 
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+// 
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace GStreamer
+{
+    public class Bin : Element
+    {
+        [DllImport ("gstreamer-0.10.dll")]
+        private static extern IntPtr gst_bin_get_type ();
+        public static new GLib.GType GType {
+            get { return new GLib.GType (gst_bin_get_type ()); }
+        }
+
+        [DllImport ("gstreamer-0.10.dll")]
+        private static extern IntPtr gst_bin_new (IntPtr name);
+
+        public Bin (IntPtr raw) : base (raw)
+        {
+        }
+
+        public Bin (string name) : base (IntPtr.Zero)
+        {
+            IntPtr name_ptr = IntPtr.Zero;
+            try {
+                Raw = gst_bin_new (name_ptr = GLib.Marshaller.StringToPtrGStrdup (name));
+            } finally {
+                GLib.Marshaller.Free (name_ptr);
+            }
+        }
+
+        [DllImport ("gstreamer-0.10.dll")]
+        private static extern IntPtr gst_bin_add (IntPtr bin, IntPtr element);
+        
+        public void Add (Element element)
+        {
+            if (element == null) {
+                throw new ArgumentNullException ("element");
+            }
+            
+            gst_bin_add (Handle, element.Handle);
+        }
+
+        public void Add (params Element [] elements)
+        {
+            if (elements == null || elements.Length == 0) {
+                throw new ArgumentNullException ("elements");
+            }
+            
+            foreach (var elem in elements) {
+                Add (elem);
+            }
+        }
+
+        [DllImport ("gstreamer-0.10.dll")]
+        private static extern IntPtr gst_bin_remove (IntPtr bin, IntPtr element);
+        
+        public void Remove (Element element)
+        {
+            if (element == null) {
+                throw new ArgumentNullException ("element");
+            }
+            
+            gst_bin_remove (Handle, element.Handle);
+        }
+        
+        public void Remove (params Element [] elements)
+        {
+            if (elements == null || elements.Length == 0) {
+                throw new ArgumentNullException ("elements");
+            }
+            
+            foreach (var elem in elements) {
+                Remove (elem);
+            }
+        }
+        
+        [DllImport ("gstreamer-0.10.dll")]
+        private static extern IntPtr gst_bin_get_by_name (IntPtr bin, IntPtr name);
+
+        public Element GetByName (string name)
+        {
+            IntPtr name_ptr = GLib.Marshaller.StringToPtrGStrdup (name);
+            try {
+                return (Element)gst_bin_get_by_name (Handle, name_ptr);
+            } finally {
+                GLib.Marshaller.Free (name_ptr);
+            }
+        }
+        
+        [DllImport ("gstreamer-0.10.dll")]
+        private static extern IntPtr gst_bin_get_by_name_recurse_up (IntPtr bin, IntPtr name);
+        
+        public Element GetByNameRecurseUp (string name)
+        {
+            IntPtr name_ptr = GLib.Marshaller.StringToPtrGStrdup (name);
+            try {
+                return (Element)gst_bin_get_by_name_recurse_up (Handle, name_ptr);
+            } finally {
+                GLib.Marshaller.Free (name_ptr);
+            }
+        }
+        
+        [DllImport ("gstreamer-0.10.dll")]
+        private static extern IntPtr gst_bin_get_by_interface (IntPtr bin, IntPtr iface);
+
+        public Element GetByInterface (GLib.GType iface)
+        {
+            return (Element)gst_bin_get_by_interface (Handle, iface.Val);
+        }
+    }
+}
diff --git a/src/Backends/Banshee.GStreamer/GStreamer/Element.cs b/src/Backends/Banshee.GStreamer/GStreamer/Element.cs
new file mode 100644
index 0000000..6ccebba
--- /dev/null
+++ b/src/Backends/Banshee.GStreamer/GStreamer/Element.cs
@@ -0,0 +1,161 @@
+// 
+// Element.cs
+//  
+// Author:
+//   Aaron Bockover <abockover novell com>
+// 
+// Copyright 2009 Aaron Bockover
+// 
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+// 
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace GStreamer
+{
+    public class Element : Object
+    {
+        [DllImport ("gstreamer-0.10.dll")]
+        private static extern IntPtr gst_element_get_type ();
+        public static new GLib.GType GType {
+            get { return new GLib.GType (gst_element_get_type ()); }
+        }
+        
+        public Element (IntPtr raw) : base (raw)
+        {
+        }
+
+        protected Element () : base (IntPtr.Zero)
+        {
+            CreateNativeObject ();
+        }
+
+#region Element Linking
+
+        [DllImport ("gstreamer-0.10.dll")]
+        private static extern bool gst_element_link (IntPtr src, IntPtr dest);
+        
+        [DllImport ("gstreamer-0.10.dll")]
+        private static extern void gst_element_unlink (IntPtr src, IntPtr dest);
+
+        public static bool TryLink (Element src, Element dest)
+        {
+            if (src == null) {
+                throw new ArgumentNullException ("src");
+            } else if (dest == null) {
+                throw new ArgumentNullException ("dest");
+            }
+
+            return gst_element_link (src.Handle, dest.Handle);
+        }
+
+        public static void Link (Element src, Element dest)
+        {
+            if (!TryLink (src, dest)) {
+                throw new ElementException (String.Format ("Could not link element '{0}' with '{1}'", src, dest));
+            }
+        }
+
+        public static void Unlink (Element src, Element dest)
+        {
+            if (src == null) {
+                throw new ArgumentNullException ("src");
+            } else if (dest == null) {
+                throw new ArgumentNullException ("dest");
+            }
+
+            gst_element_unlink (src.Handle, dest.Handle);
+        }
+        
+        private static bool LinkUnlink (bool link, bool tryit, Element element1, params Element [] elements)
+        {
+            if (element1 == null || elements == null || elements.Length == 0) {
+                throw new ArgumentException ("two or more elements are required", "elements");
+            }
+
+            var e1 = element1;
+            var e2 = elements[0];
+
+            for (int i = 1; true; i++) {
+                if (link) {
+                    if (tryit && !TryLink (e1, e2)) {
+                        return false;
+                    }
+
+                    Link (e1, e2);
+                } else {
+                    Unlink (e1, e2);
+                }
+
+                if (i == elements.Length) {
+                    return true;
+                }
+
+                e1 = e2;
+                e2 = elements[i];
+            }
+        }
+
+        public static bool Link (Element element1, params Element [] elements)
+        {
+            return LinkUnlink (true, false, element1, elements);
+        }
+
+        public static void Unlink (Element element1, params Element [] elements)
+        {
+            LinkUnlink (false, true, element1, elements);
+        }
+
+        public static bool TryLink (Element element1, params Element [] elements)
+        {
+            return LinkUnlink (true, true, element1, elements);
+        }
+
+#endregion
+
+#region GObject Property Helpers
+        
+        public new void SetProperty<T> (string name, T value)
+        {
+            base.SetProperty (name, new GLib.Value (value));
+        }
+        
+        public new void SetProperty (string name, GLib.Value value)
+        {
+            base.SetProperty (name, value);
+        }
+
+        public new GLib.Value GetProperty (string name)
+        {
+            return base.GetProperty (name);
+        }
+
+#endregion
+
+        public static implicit operator IntPtr (Element element)
+        {
+            return element == null ? IntPtr.Zero : element.Handle;
+        }
+
+        public static implicit operator Element (IntPtr elementRaw)
+        {
+            return elementRaw == IntPtr.Zero ? null : new Element (elementRaw);
+        }
+    }
+}
diff --git a/src/Backends/Banshee.GStreamer/GStreamer/ElementException.cs b/src/Backends/Banshee.GStreamer/GStreamer/ElementException.cs
new file mode 100644
index 0000000..490f112
--- /dev/null
+++ b/src/Backends/Banshee.GStreamer/GStreamer/ElementException.cs
@@ -0,0 +1,37 @@
+// 
+// ElementException.cs
+//  
+// Author:
+//   Aaron Bockover <abockover novell com>
+// 
+// Copyright 2009 Aaron Bockover
+// 
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+// 
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+
+namespace GStreamer
+{
+    public class ElementException : Exception
+    {
+        public ElementException (string message) : base (message)
+        {
+        }
+    }
+}
diff --git a/src/Backends/Banshee.GStreamer/GStreamer/ElementFactory.cs b/src/Backends/Banshee.GStreamer/GStreamer/ElementFactory.cs
new file mode 100644
index 0000000..c64e733
--- /dev/null
+++ b/src/Backends/Banshee.GStreamer/GStreamer/ElementFactory.cs
@@ -0,0 +1,204 @@
+// 
+// ElementFactory.cs
+//  
+// Author:
+//   Aaron Bockover <abockover novell com>
+// 
+// Copyright 2009 Aaron Bockover
+// 
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+// 
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace GStreamer
+{
+    public class ElementFactory : PluginFeature
+    {
+        [DllImport ("gstreamer-0.10.dll")]
+        private static extern IntPtr gst_element_factory_get_type ();
+        public static new GLib.GType GType {
+            get { return new GLib.GType (gst_element_factory_get_type ()); }
+        }
+        
+        public ElementFactory (IntPtr raw) : base (raw)
+        {
+        }
+
+        public ElementFactory () : base (IntPtr.Zero)
+        {
+            CreateNativeObject ();
+        }
+
+        [DllImport ("gstreamer-0.10.dll")]
+        private static extern IntPtr gst_element_factory_get_element_type (IntPtr factory);
+        public GLib.GType ElementGType {
+            get { return new GLib.GType (gst_element_factory_get_element_type (Handle)); }
+        }
+
+        [DllImport ("gstreamer-0.10.dll")]
+        private static extern IntPtr gst_element_factory_get_longname (IntPtr factory);
+        public string LongName {
+            get { return GLib.Marshaller.Utf8PtrToString (gst_element_factory_get_longname (Handle)); }
+        }
+
+        [DllImport ("gstreamer-0.10.dll")]
+        private static extern IntPtr gst_element_factory_get_klass (IntPtr factory);
+        public string Klass {
+            get { return GLib.Marshaller.Utf8PtrToString (gst_element_factory_get_klass (Handle)); }
+        }
+        
+        [DllImport ("gstreamer-0.10.dll")]
+        private static extern IntPtr gst_element_factory_get_description (IntPtr factory);
+        public string Description {
+            get { return GLib.Marshaller.Utf8PtrToString (gst_element_factory_get_description (Handle)); }
+        }
+        
+        [DllImport ("gstreamer-0.10.dll")]
+        private static extern IntPtr gst_element_factory_get_author (IntPtr factory);
+        public string Author {
+            get { return GLib.Marshaller.Utf8PtrToString (gst_element_factory_get_author (Handle)); }
+        }
+
+        [DllImport ("gstreamer-0.10.dll")]
+        private static extern uint gst_element_factory_get_num_pad_templates (IntPtr factory);
+        public uint NumPadTemplates {
+            get { return gst_element_factory_get_num_pad_templates (Handle); }
+        }
+
+        [DllImport ("gstreamer-0.10.dll")]
+        private static extern int gst_element_factory_get_uri_type (IntPtr factory);
+        public int UriType {
+            get { return gst_element_factory_get_uri_type (Handle); }
+        }
+
+        [DllImport ("gstreamer-0.10.dll")]
+        private static extern IntPtr gst_element_factory_get_uri_protocols (IntPtr factory);
+        public string [] UriProtocols {
+            get { return GLib.Marshaller.PtrToStringArrayGFree (gst_element_factory_get_uri_protocols (Handle)); }
+        }
+
+        [DllImport ("gstreamer-0.10.dll")]
+        private static extern bool gst_element_factory_has_interface (IntPtr factory, IntPtr interfacename);
+
+        public bool HasInterface (string interfaceName)
+        {
+            IntPtr name_ptr = IntPtr.Zero;
+            try {
+                return gst_element_factory_has_interface (Handle, 
+                    name_ptr = GLib.Marshaller.StringToPtrGStrdup (interfaceName));
+            } finally {
+                GLib.Marshaller.Free (name_ptr);
+            }
+        }
+
+        [DllImport ("gstreamer-0.10.dll")]
+        private static extern IntPtr gst_element_factory_create (IntPtr factory, IntPtr name);
+        
+        public Element Make (string name)
+        {
+            IntPtr name_ptr = IntPtr.Zero;
+            try {
+                IntPtr element = gst_element_factory_create (Handle, 
+                    name_ptr = GLib.Marshaller.StringToPtrGStrdup (name));
+                return element == IntPtr.Zero ? null : new Element (element);
+            } finally {
+                GLib.Marshaller.Free (name_ptr);
+            }
+        }
+#if false
+        [DllImport ("gstreamer-0.10.dll")]
+        private static extern bool gst_element_factory_can_sink_caps (IntPtr factory, IntPtr caps /*const GstCaps *caps*/);
+        
+        [DllImport ("gstreamer-0.10.dll")]
+        private static extern bool gst_element_factory_can_src_caps (IntPtr factory, IntPtr caps /*const GstCaps *caps*/);
+        
+        [DllImport ("gstreamer-0.10.dll")]
+        private static extern IntPtr /*const GList**/ gst_element_factory_get_static_pad_templates (IntPtr factory);
+#endif
+
+#region Static Methods
+
+        [DllImport ("gstreamer-0.10.dll")]
+        private static extern IntPtr gst_element_factory_find (IntPtr name);
+
+        public static ElementFactory Find (string name)
+        {
+            IntPtr name_ptr = IntPtr.Zero;
+            try {
+                IntPtr factory = gst_element_factory_find (name_ptr = GLib.Marshaller.StringToPtrGStrdup (name));
+                return factory == IntPtr.Zero ? null : new ElementFactory (factory);
+            } finally {
+                GLib.Marshaller.Free (name_ptr);
+            }
+        }
+        
+        [DllImport ("gstreamer-0.10.dll")]
+        private static extern IntPtr gst_element_factory_make (IntPtr factoryname, IntPtr name);
+
+        public static Element TryMake (string factoryName, string name)
+        {
+            IntPtr factory_ptr = IntPtr.Zero;
+            IntPtr name_ptr = IntPtr.Zero;
+            
+            try {
+                IntPtr element = gst_element_factory_make (
+                    factory_ptr = GLib.Marshaller.StringToPtrGStrdup (factoryName),
+                    name_ptr = GLib.Marshaller.StringToPtrGStrdup (name));
+                return element == IntPtr.Zero ? null : new Element (element);
+            } finally {
+                GLib.Marshaller.Free (factory_ptr);
+                GLib.Marshaller.Free (name_ptr);
+            }
+        }
+
+        public static Element Make (string factoryName, string name)
+        {
+            var elem = TryMake (factoryName, name);
+            if (elem == null) {
+                throw new ElementNotFoundException (factoryName);
+            }
+            return elem;
+        }
+
+        public static Element TryMakeFirstOf (string name, params string [] factoryNames)
+        {
+            foreach (string factoryName in factoryNames) {
+                var elem = Make (factoryName, name);
+                if (elem != null) {
+                    return elem;
+                }
+            }
+            
+            return null;
+        }
+
+        public static Element MakeFirstOf (string name, params string [] factoryNames)
+        {
+            var elem = TryMakeFirstOf (name, factoryNames);
+            if (elem == null) {
+                throw new ElementNotFoundException (factoryNames);
+            }
+            return elem;
+        }
+
+#endregion
+
+    }
+}
diff --git a/src/Backends/Banshee.GStreamer/GStreamer/ElementNotFoundException.cs b/src/Backends/Banshee.GStreamer/GStreamer/ElementNotFoundException.cs
new file mode 100644
index 0000000..995a708
--- /dev/null
+++ b/src/Backends/Banshee.GStreamer/GStreamer/ElementNotFoundException.cs
@@ -0,0 +1,51 @@
+// 
+// ElementNotFoundException.cs
+//  
+// Author:
+//   Aaron Bockover <abockover novell com>
+// 
+// Copyright 2009 Aaron Bockover
+// 
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+// 
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+
+namespace GStreamer
+{
+    public class ElementNotFoundException : Exception
+    {
+        private string [] element_names;
+        
+        public ElementNotFoundException (string elementName)
+            : base ("GStreamer element could not be found: " + elementName)
+        {
+            element_names = new string [] { elementName };
+        }
+
+        public ElementNotFoundException (string [] elementNames)
+            : base ("GStreamer elements could not be found: " + String.Join (", ", elementNames))
+        {
+            element_names = elementNames;
+        }
+
+        public string [] ElementNames {
+            get { return element_names; }
+        }
+    }
+}
diff --git a/src/Backends/Banshee.GStreamer/GStreamer/Framework.cs b/src/Backends/Banshee.GStreamer/GStreamer/Framework.cs
new file mode 100644
index 0000000..5c3738e
--- /dev/null
+++ b/src/Backends/Banshee.GStreamer/GStreamer/Framework.cs
@@ -0,0 +1,130 @@
+// 
+// Framework.cs
+//  
+// Author:
+//   Aaron Bockover <abockover novell com>
+// 
+// Copyright 2009 Aaron Bockover
+// 
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+// 
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace GStreamer
+{
+    public static class Framework
+    {
+        [DllImport ("gstreamer-0.10.dll")]
+        private static extern void gst_init (ref int argc, ref IntPtr argv);
+        
+        [DllImport ("gstreamer-0.10.dll")]
+        private static extern bool gst_init_check (ref int argc, ref IntPtr argv, IntPtr error);
+
+        public static void Init ()
+        {
+            IntPtr argv = IntPtr.Zero;
+            int argc = 0;
+            gst_init (ref argc, ref argv);
+        }
+
+        private static bool Init (string progname, ref string [] args, bool check)
+        {
+            bool res = false;
+            string[] progargs = new string[args.Length + 1];
+
+            progargs[0] = progname;
+            args.CopyTo (progargs, 1);
+
+            GLib.Argv argv = new GLib.Argv (progargs);
+            IntPtr buf = argv.Handle;
+            int argc = progargs.Length;
+
+            if (check) {
+                res = gst_init_check (ref argc, ref buf, IntPtr.Zero);
+            } else {
+                gst_init (ref argc, ref buf);
+            }
+            
+            if (buf != argv.Handle) {
+                throw new Exception ("init returned new argv handle");
+            }
+            
+            if (argc <= 1) {
+                args = new string[0];
+            } else {
+                progargs = argv.GetArgs (argc);
+                args = new string[argc - 1];
+                Array.Copy (progargs, 1, args, 0, argc - 1);
+            }
+
+            return res;
+        }
+
+        public static void Init (string progname, ref string [] args)
+        {
+            Init (progname, ref args, false);
+        }
+
+        public static bool InitCheck (string progname, ref string [] args)
+        {
+            return Init (progname, ref args, true);
+        }
+        
+        [DllImport ("gstreamer-0.10.dll")]
+        private static extern void gst_deinit ();
+
+        public static void Shutdown ()
+        {
+            gst_deinit ();
+        }
+                
+        [DllImport ("gstreamer-0.10.dll")]
+        private static extern bool gst_update_registry ();
+
+        public static bool UpdateRegistry ()
+        {
+            return gst_update_registry ();
+        }
+
+        [DllImport ("gstreamer-0.10.dll")]
+        private static extern void gst_version (out uint major, out uint minor, out uint micro, out uint nano);
+        public static FrameworkVersion Version {
+            get { 
+                FrameworkVersion version = new FrameworkVersion ();
+                gst_version (out version.major, out version.minor, out version.micro, out version.nano);
+                return version;
+            }
+        }
+        
+        [DllImport ("gstreamer-0.10.dll")] private static extern bool gst_segtrap_is_enabled ();
+        [DllImport ("gstreamer-0.10.dll")] private static extern void gst_segtrap_set_enabled (bool enabled);
+        public static bool SegTrapEnabled {
+            get { return gst_segtrap_is_enabled (); }
+            set { gst_segtrap_set_enabled (value); }
+        }
+
+        [DllImport ("gstreamer-0.10.dll")] private static extern bool gst_registry_fork_is_enabled ();
+        [DllImport ("gstreamer-0.10.dll")] private static extern void gst_registry_fork_set_enabled (bool enabled);
+        public static bool RegistryForkEnabled {
+            get { return gst_registry_fork_is_enabled (); }
+            set { gst_registry_fork_set_enabled (value); }
+        }
+    }
+}
diff --git a/src/Backends/Banshee.GStreamer/GStreamer/FrameworkVersion.cs b/src/Backends/Banshee.GStreamer/GStreamer/FrameworkVersion.cs
new file mode 100644
index 0000000..0aafc88
--- /dev/null
+++ b/src/Backends/Banshee.GStreamer/GStreamer/FrameworkVersion.cs
@@ -0,0 +1,60 @@
+// 
+// FrameworkVersion.cs
+//  
+// Author:
+//   Aaron Bockover <abockover novell com>
+// 
+// Copyright 2009 Aaron Bockover
+// 
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+// 
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+
+namespace GStreamer
+{
+    public struct FrameworkVersion
+    {
+        public override string ToString ()
+        {
+            return nano > 0
+                ? String.Format ("GStreamer {0}.{1}.{2}.{3}", major, minor, micro, nano)
+                : String.Format ("GStreamer {0}.{1}.{2}", major, minor, micro);
+        }
+
+        internal uint major;
+        public uint Major {
+            get { return major; }
+        }
+
+        internal uint minor;
+        public uint Minor {
+            get { return minor; }
+        }
+
+        internal uint micro;
+        public uint Micro {
+            get { return micro; }
+        }
+
+        internal uint nano;
+        public uint Nano {
+            get { return nano; }
+        }
+    }
+}
diff --git a/src/Backends/Banshee.GStreamer/GStreamer/Object.cs b/src/Backends/Banshee.GStreamer/GStreamer/Object.cs
new file mode 100644
index 0000000..4e5bcd9
--- /dev/null
+++ b/src/Backends/Banshee.GStreamer/GStreamer/Object.cs
@@ -0,0 +1,66 @@
+// 
+// Object.cs
+//  
+// Author:
+//   Aaron Bockover <abockover novell com>
+// 
+// Copyright 2009 Aaron Bockover
+// 
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+// 
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace GStreamer
+{
+    public class Object : GLib.Object
+    {
+        [DllImport ("gstreamer-0.10.dll")]
+        private static extern IntPtr gst_object_get_type ();
+
+        public static new GLib.GType GType {
+            get { return new GLib.GType (gst_object_get_type ()); }
+        }
+        
+        public Object (IntPtr raw) : base (raw)
+        {
+        }
+
+        public Object () : base (IntPtr.Zero)
+        {
+            CreateNativeObject ();
+        }
+
+        protected void CreateNativeObject ()
+        {
+            CreateNativeObject (new string[0], new GLib.Value[0]);
+        }
+
+        [DllImport ("gstreamer-0.10.dll")]
+        private static extern IntPtr gst_object_get_name (IntPtr obj);
+        public string Name {
+            get { return GLib.Marshaller.Utf8PtrToString (gst_object_get_name (Handle)); }
+        }
+
+        public override string ToString ()
+        {
+            return Name;
+        }
+    }
+}
diff --git a/src/Backends/Banshee.GStreamer/GStreamer/PluginFeature.cs b/src/Backends/Banshee.GStreamer/GStreamer/PluginFeature.cs
new file mode 100644
index 0000000..6325a06
--- /dev/null
+++ b/src/Backends/Banshee.GStreamer/GStreamer/PluginFeature.cs
@@ -0,0 +1,50 @@
+// 
+// PluginFeature.cs
+//  
+// Author:
+//   Aaron Bockover <abockover novell com>
+// 
+// Copyright 2009 Aaron Bockover
+// 
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+// 
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace GStreamer
+{
+    public class PluginFeature : Object
+    {
+        [DllImport ("gstreamer-0.10.dll")]
+        private static extern IntPtr gst_plugin_feature_get_type ();
+
+        public static new GLib.GType GType {
+            get { return new GLib.GType (gst_plugin_feature_get_type ()); }
+        }
+        
+        public PluginFeature (IntPtr raw) : base (raw)
+        {
+        }
+
+        public PluginFeature () : base (IntPtr.Zero)
+        {
+            CreateNativeObject ();
+        }
+    }
+}
diff --git a/src/Backends/Banshee.GStreamer/Makefile.am b/src/Backends/Banshee.GStreamer/Makefile.am
index 238aa4d..59f35b6 100644
--- a/src/Backends/Banshee.GStreamer/Makefile.am
+++ b/src/Backends/Banshee.GStreamer/Makefile.am
@@ -2,15 +2,28 @@ ASSEMBLY = Banshee.GStreamer
 TARGET = library
 LINK = $(REF_BACKEND_GSTREAMER)
 SOURCES =  \
+	Banshee.GStreamer.Player/AudioSink.cs \
+	Banshee.GStreamer.Player/Equalizer.cs \
+	Banshee.GStreamer.Player/PlayerEngine.cs \
 	Banshee.GStreamer/AudioCdRipper.cs \
 	Banshee.GStreamer/BpmDetector.cs \
 	Banshee.GStreamer/GstErrors.cs \
 	Banshee.GStreamer/PlayerEngine.cs \
 	Banshee.GStreamer/Service.cs \
 	Banshee.GStreamer/TagList.cs \
-	Banshee.GStreamer/Transcoder.cs
+	Banshee.GStreamer/Transcoder.cs \
+	GStreamer/Bin.cs \
+	GStreamer/Element.cs \
+	GStreamer/ElementException.cs \
+	GStreamer/ElementFactory.cs \
+	GStreamer/ElementNotFoundException.cs \
+	GStreamer/Framework.cs \
+	GStreamer/FrameworkVersion.cs \
+	GStreamer/Object.cs \
+	GStreamer/PluginFeature.cs
 RESOURCES = Banshee.GStreamer.addin.xml
 INSTALL_DIR = $(BACKENDS_INSTALL_DIR)
 
 include $(top_srcdir)/build/build.mk
 
+module_SCRIPTS += Banshee.GStreamer.dll.config



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]