Hello,
I am not sure whether this is my environment problem or gstreamer-shap's bug. Although gstreamer-sharp provides some examples how to connect signal handler to a Gst.Bus, it only works when I added the handler to 'SyncMessage'. I am using VS.Net 2017 on Windows 10. More specifically, this is the case that signal handler works. ``` Element pipeline = (Pipeline) Parse.Launch ("uridecodebin name=uridecodebin ! fakesink"); var bus = pipeline.Bus; bus.AddSignalWatch(); bus.EnableSyncMessageEmission(); bus.SyncMessage += HandleBusMessage; ``` The below case is to use 'Bus.Connect', but the handler never be called. However, if I create "uridecodebin", it always emits "source-setup" signal so I can use "Connect". ``` Element pipeline = (Pipeline) Parse.Launch ("uridecodebin name=uridecodebin ! fakesink"); var bus = pipeline.Bus; bus.AddSignalWatch(); // HandleStateChanged never be called. bus.Connect("message::state-changed", HandleStateChanged); uridecodebin = pipeline.GetByName("uridecodebin"); // SourceSetup is always called. uridecodebin.Connect("source-setup", SourceSetup); ``` Am I missing something when calling "Connect"? BR, Justin _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel |
Hello Justin,
I have the impression you are doing something wrong, I just went ahead and tested what you said doesn't work by modiying our PlayBackTutorial3[0] as follow: ``` diff --git a/samples/PlaybackTutorial3.cs b/samples/PlaybackTutorial3.cs index dc725b063..f6debca55 100644 --- a/samples/PlaybackTutorial3.cs +++ b/samples/PlaybackTutorial3.cs @@ -93,6 +93,7 @@ namespace GstreamerSharp // This function is called when playbin has created the appsrc element, so we have a chance to configure it. static void SourceSetup (object sender, GLib.SignalArgs args) { + Console.WriteLine ("YAY SETUP!!"); var info = new Gst.Audio.AudioInfo (); var source = new Gst.App.AppSrc(((Element)args.Args [0]).Handle); Console.WriteLine ("Source has been created. Configuring."); @@ -107,6 +108,16 @@ namespace GstreamerSharp source.EnoughData += StopFeed; } + static void HandleStateChanged (object sender, GLib.SignalArgs args) { + Gst.State oldstate, newstate, pending; + var msg = (Message) args.Args[0]; + + // Print error details on the screen + msg.ParseStateChanged (out oldstate, out newstate, out pending); + + Console.WriteLine("New state: {0}", newstate); + } + // This function is called when an error message is posted on the bus static void HandleError (object sender, GLib.SignalArgs args) { GLib.GException err; @@ -137,6 +148,7 @@ namespace GstreamerSharp var bus = Pipeline.Bus; bus.AddSignalWatch (); bus.Connect ("message::error", HandleError); + bus.Connect("message::state-changed", HandleStateChanged); // Start playing the pipeline Pipeline.SetState (State.Playing); ``` And this works just as expected, are you running a mainloop? Cheers, Thibault [0] https://cgit.freedesktop.org/gstreamer/gstreamer-sharp/tree/samples/PlaybackTutorial3.cs On Mon, Jan 8, 2018 at 7:06 AM, Justin J. Kim <[hidden email]> wrote: > Hello, > > I am not sure whether this is my environment problem or gstreamer-shap's > bug. > Although gstreamer-sharp provides some examples how to connect signal > handler to a Gst.Bus, > it only works when I added the handler to 'SyncMessage'. > > I am using VS.Net 2017 on Windows 10. > > More specifically, this is the case that signal handler works. > > > ``` > Element pipeline = (Pipeline) Parse.Launch ("uridecodebin name=uridecodebin > ! fakesink"); > > var bus = pipeline.Bus; > bus.AddSignalWatch(); > bus.EnableSyncMessageEmission(); > bus.SyncMessage += HandleBusMessage; > > ``` > > The below case is to use 'Bus.Connect', but the handler never be called. > However, if I create "uridecodebin", it always emits "source-setup" signal > so I can use "Connect". > > > ``` > Element pipeline = (Pipeline) Parse.Launch ("uridecodebin name=uridecodebin > ! fakesink"); > > var bus = pipeline.Bus; > bus.AddSignalWatch(); > // HandleStateChanged never be called. > bus.Connect("message::state-changed", HandleStateChanged); > > uridecodebin = pipeline.GetByName("uridecodebin"); > // SourceSetup is always called. > uridecodebin.Connect("source-setup", SourceSetup); > ``` > > Am I missing something when calling "Connect"? > > BR, > Justin > > _______________________________________________ > gstreamer-devel mailing list > [hidden email] > https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel > gstreamer-devel mailing list [hidden email] https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel |
Free forum by Nabble | Edit this page |