Adding sample (sample/HelloWorld.cs)
authorKhaled Mohammed <khaled.mohammed@gmail.com>
Wed, 21 Jun 2006 07:27:56 +0000 (07:27 +0000)
committerKhaled Mohammed <khaled.mohammed@gmail.com>
Wed, 21 Jun 2006 07:27:56 +0000 (07:27 +0000)
git-svn-id: svn://anonsvn.mono-project.com/source/branches/abock/gstreamer-sharp@61892 e3ebcda4-bce8-0310-ba0a-eca2169e7518

sample/HelloWorld.cs [new file with mode: 0644]

diff --git a/sample/HelloWorld.cs b/sample/HelloWorld.cs
new file mode 100644 (file)
index 0000000..fb94ab2
--- /dev/null
@@ -0,0 +1,121 @@
+using System;
+using Gst;
+using GLib;
+using System.Reflection;
+
+public class HelloWorld {
+
+       MainLoop loop;
+       Element pipeline, source, parser, decoder, conv, identity, sink;
+       
+       bool BusCall(Bus bus, Message message) {
+               
+               switch(message.Type) {
+                       case MessageType.Error:
+                               string err = String.Empty;
+                               message.ParseError(out err);
+                               Console.WriteLine ("Gstreamer error: {0}", err);
+                               loop.Quit();
+                               break;
+                       case MessageType.Eos:
+                               Console.WriteLine("End-of-stream");
+                               loop.Quit();
+                               break;
+                       default:
+                               //Console.WriteLine("Entered BusCall:\t" + message.Type);
+                               break;
+               }
+               return true;
+       }
+
+       public static void Main(string [] args) {
+               new HelloWorld(args);
+       }
+
+       public HelloWorld(string [] args) {
+
+// Initializes Gstreamer library
+               Application.Init();
+
+               loop = new MainLoop();
+
+               // create elements
+               if((pipeline = new Pipeline("audio-player")) == null)
+               {
+                       Console.WriteLine("Could not create audio player pipeline");
+               }
+               
+               if((source = ElementFactory.Make("filesrc", "file-source")) == null) 
+               {
+                       Console.WriteLine("Could not create file-source");
+               }
+               
+               parser = ElementFactory.Make("oggdemux", "ogg-parser");
+               decoder = ElementFactory.Make("vorbisdec", "vorbis-decoder");
+               conv = ElementFactory.Make("audioconvert", "converter");
+               identity = ElementFactory.Make("identity", "identitye");
+               sink = ElementFactory.Make("alsasink", "alsa-output");
+               
+               // set source to read the filename from command line argdument
+               source.SetProperty("location", args[0]);
+               
+               Bin bin = (Bin) pipeline;
+               bin.Bus.AddWatch(new BusFunc(BusCall));
+
+               bin.Add(source);
+               bin.Add(parser);
+               bin.Add(decoder);
+               bin.Add(conv);
+               bin.Add(identity);
+               bin.Add(sink);
+
+
+               if(!source.Link(parser))
+                       Console.WriteLine("link failed");
+               if(!decoder.Link(conv))
+                       Console.WriteLine("link failed between decoder and converter");
+               if(!conv.Link(identity))
+                       Console.WriteLine("link failed between converter and identity");
+               if(!identity.Link(sink))
+                       Console.Error.WriteLine("link failed between identity and sink");
+
+               parser.PadAdded += new PadAddedHandler(OnPadAdded);
+
+               Console.WriteLine("Adding custom event");
+
+
+               identity.AddCustomEvent("handoff", new MyEventHandler(handoff));
+
+               pipeline.SetState(State.Playing);
+               Console.WriteLine("Playing [" + args[0] + "]");
+
+
+               loop.Run();
+
+               pipeline.SetState(State.Null);
+
+               pipeline.Dispose();
+       }
+
+       delegate void MyEventHandler(object sender, Gst.Buffer buf);
+
+       ulong count = 0;
+
+
+       void handoff(object i, Gst.Buffer buf) {
+               Console.WriteLine(buf.Duration + "\t" + buf.Timestamp);
+               /*
+               ulong newcount = buf.Timestamp / buf.Duration * 20;
+               if(newcount > count)
+               {
+                       Console.Write("*");
+                       count = newcount;
+               }
+               */
+       }
+       void OnPadAdded(object sender, PadAddedArgs e) {
+               Console.WriteLine("Entered OnPadAdded");
+               Pad sinkpad = decoder.GetPad("sink");
+               e.Pad.Link(sinkpad);
+       }
+}