From 27d42dfd3fe0ec459890fb7ad70fde4439fb5004 Mon Sep 17 00:00:00 2001 From: Stephan Sundermann Date: Fri, 1 Aug 2014 16:15:22 +0200 Subject: [PATCH] sample: Add basic tutorial 2 sample --- samples/BasicTutorial2.cs | 77 +++++++++++++++++++++++++++++++++++++++ samples/Makefile.am | 8 +++- 2 files changed, 83 insertions(+), 2 deletions(-) create mode 100644 samples/BasicTutorial2.cs diff --git a/samples/BasicTutorial2.cs b/samples/BasicTutorial2.cs new file mode 100644 index 0000000000..4f68182e57 --- /dev/null +++ b/samples/BasicTutorial2.cs @@ -0,0 +1,77 @@ +// Authors +// Copyright (C) 2014 Stephan Sundermann + +using System; +using Gst; + +namespace GstreamerSharp +{ + class Playback + { + public static void Main (string[] args) + { + // Initialize Gstreamer + Application.Init(ref args); + + // Build the pipeline + var source = ElementFactory.Make ("videotestsrc", "source"); + var sink = ElementFactory.Make ("autovideosink", "sink"); + + // Create the empty pipeline + var pipeline = new Pipeline ("test-pipeline"); + + if (pipeline == null || source == null || sink == null) { + Console.WriteLine ("Not all elements could be created"); + return; + } + + // Build the pipeline + pipeline.Add (source, sink); + if (!source.Link (sink)) { + pipeline.Dispose (); + Console.WriteLine ("Elements could not be linked"); + return; + } + + // Modify the source's properties + source ["pattern"] = 0; + + // Start playing + var ret = pipeline.SetState(State.Playing); + if (ret == StateChangeReturn.Failure) { + Console.WriteLine ("Unable to set the pipeline to the playing state"); + pipeline.Dispose (); + return; + } + + // Wait until error or EOS + var bus = pipeline.Bus; + var msg = bus.TimedPopFiltered (Constants.CLOCK_TIME_NONE, MessageType.Eos | MessageType.Error); + + // Free resources + if (msg != null) { + switch (msg.Type) { + case MessageType.Error: + GLib.GException exc; + string debug; + msg.ParseError (out exc, out debug); + Console.WriteLine (String.Format ("Error received from element {0}: {1}", msg.Src.Name, exc.Message)); + Console.WriteLine (String.Format ("Debugging information {0}", debug)); + break; + case MessageType.Eos: + Console.WriteLine ("End-Of-Stream reached"); + break; + default: + // We should not reach here because we only asked for ERRORs and EOS + Console.WriteLine ("Unexpected messag received"); + break; + } + msg.Dispose (); + } + + bus.Dispose (); + pipeline.SetState (State.Null); + pipeline.Dispose (); + } + } +} \ No newline at end of file diff --git a/samples/Makefile.am b/samples/Makefile.am index 4fcbb7c7c0..862227d03d 100644 --- a/samples/Makefile.am +++ b/samples/Makefile.am @@ -1,4 +1,4 @@ -TARGETS = playback.exe video-overlay.exe basic-tutorial-1.exe +TARGETS = playback.exe video-overlay.exe basic-tutorial-1.exe basic-tutorial-2.exe DEBUGS = $(addsuffix .mdb, $(TARGETS)) assemblies = \ @@ -18,7 +18,11 @@ video-overlay.exe: $(srcdir)/VideoOverlay.cs $(assemblies) basic-tutorial-1.exe: $(srcdir)/BasicTutorial1.cs $(assemblies) $(CSC) $(CSFLAGS) -out:basic-tutorial-1.exe $(references) $(GLIB_SHARP_LIBS) $(srcdir)/BasicTutorial1.cs +basic-tutorial-2.exe: $(srcdir)/BasicTutorial2.cs $(assemblies) + $(CSC) $(CSFLAGS) -out:basic-tutorial-2.exe $(references) $(GLIB_SHARP_LIBS) $(srcdir)/BasicTutorial2.cs + EXTRA_DIST = \ Playback.cs \ VideoOverlay.cs \ - BasicTutorial1.cs + BasicTutorial1.cs \ + BasicTutorial2.cs