From 3511b39930e1881baf104fbc76ed7bafa3590bb0 Mon Sep 17 00:00:00 2001 From: Khaled Mohammed Date: Wed, 21 Jun 2006 07:27:56 +0000 Subject: [PATCH] Adding sample (sample/HelloWorld.cs) git-svn-id: svn://anonsvn.mono-project.com/source/branches/abock/gstreamer-sharp@61892 e3ebcda4-bce8-0310-ba0a-eca2169e7518 --- sample/HelloWorld.cs | 121 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 sample/HelloWorld.cs diff --git a/sample/HelloWorld.cs b/sample/HelloWorld.cs new file mode 100644 index 0000000000..fb94ab29ac --- /dev/null +++ b/sample/HelloWorld.cs @@ -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); + } +}