/// <summary> /// Set the panel on which to display the video. This must be done at the right time and via this callback. /// </summary> /// <param name="o"></param> /// <param name="args"></param> private void cb_busSyncMessage(object o, SyncMessageArgs args) { if (Gst.Video.Global.IsVideoOverlayPrepareWindowHandleMessage(args.Message)) { Element src = (Gst.Element)args.Message.Src; sysDbg.WriteLine("Message'prepare-window-handle' received by: " + src.Name + " " + src.ToString()); { // Try to set Overlay try { Gst.Video.VideoOverlayAdapter overlay_ = new Gst.Video.VideoOverlayAdapter(src.Handle); overlay_.WindowHandle = (IntPtr)HdlPreviewPanel; overlay_.HandleEvents(true); } catch (Exception ex) { sysDbg.WriteLine("Error setting overlay: " + ex.Message); } } } if (args.Message.Type == MessageType.Eos) { sysDbg.WriteLine("EOS sync message received..."); } }
void OnBusSyncMessage(object o, SyncMessageArgs sargs) { Gst.Message msg = sargs.Message; if (!Gst.Video.Global.IsVideoOverlayPrepareWindowHandleMessage(msg)) { return; } Element src = msg.Src as Element; if (src == null) { return; } try { src["force-aspect-ratio"] = true; } catch (PropertyNotFoundException) { /* Don't care */ } Element overlay = (src as Gst.Bin)?.GetByInterface(VideoOverlayAdapter.GType); if (overlay == null) { Console.WriteLine("Overlay is null"); return; } VideoOverlayAdapter adapter = new VideoOverlayAdapter(overlay.Handle); adapter.WindowHandle = _videoPanelHandle; adapter.HandleEvents(true); }
/// <summary> /// /// </summary> /// <remarks> /// Indeed the application needs to set its Window identifier at the right time to avoid internal Window creation /// from the video sink element. To solve this issue a GstMessage is posted on the bus to inform the application /// that it should set the Window identifier immediately. /// /// API: http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideooverlay.html /// </remarks> /// <param name="o"></param> /// <param name="args"></param> private void bus_SyncMessage(object o, SyncMessageArgs args) { //Convenience function to check if the given message is a "prepare-window-handle" message from a GstVideoOverlay. System.Diagnostics.Debug.WriteLine("bus_SyncMessage: " + args.Message.Type.ToString()); if (Gst.Video.Global.IsVideoOverlayPrepareWindowHandleMessage(args.Message)) { Element src = (Gst.Element)args.Message.Src; #if DEBUG System.Diagnostics.Debug.WriteLine("Message'prepare-window-handle' received by: " + src.Name + " " + src.ToString()); #endif if (src != null && (src is Gst.Video.VideoSink | src is Gst.Bin)) { // Try to set Aspect Ratio try { src["force-aspect-ratio"] = true; } catch (PropertyNotFoundException) { } // Try to set Overlay try { Gst.Video.VideoOverlayAdapter overlay_ = new Gst.Video.VideoOverlayAdapter(src.Handle); overlay_.WindowHandle = (IntPtr)mHandle; overlay_.HandleEvents(true); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine("Exception thrown: " + ex.Message); } } } }
void OnBusSyncMessage(object o, SyncMessageArgs args) { Bus bus = o as Bus; Gst.Message msg = args.Message; if (!Gst.Video.Global.IsVideoOverlayPrepareWindowHandleMessage(msg)) { return; } Element src = msg.Src as Element; if (src == null) { return; } src = _pipeline; Element overlay = null ?? (src as Gst.Bin)?.GetByInterface(VideoOverlayAdapter.GType); Assert(overlay != null, "Overlay is null"); VideoOverlayAdapter adapter = new VideoOverlayAdapter(overlay.Handle); adapter.WindowHandle = _videoPanelHandle; adapter.HandleEvents(true); }
private void OnBusSyncMessage(object o, SyncMessageArgs sargs) { var message = sargs.Message; if (!Gst.Video.Global.IsVideoOverlayPrepareWindowHandleMessage(message)) { return; } var src = message.Src as Element; if (src == null) { return; } try { src["force-aspect-ratio"] = true; } catch { /* ignored */ } _adapter = new VideoOverlayAdapter(src.Handle); _adapter.WindowHandle = _windowHandle; _adapter.HandleEvents(true); }
private void bus_SyncMessage(object o, SyncMessageArgs args) { if (Gst.Video.Global.IsVideoOverlayPrepareWindowHandleMessage(args.Message)) { Element src = (Gst.Element)args.Message.Src; if (src != null && (src is Gst.Video.VideoSink | src is Gst.Bin)) { // Try to set Aspect Ratio try { src["force-aspect-ratio"] = true; } catch (PropertyNotFoundException) { } // Try to set Overlay try { Gst.Video.VideoOverlayAdapter overlay = new Gst.Video.VideoOverlayAdapter(src.Handle); overlay.WindowHandle = mHandle; overlay.HandleEvents(true); } catch (Exception ex) { } } } }
static void OnSync(object o, SyncMessageArgs args) { if (Gst.Video.Global.IsVideoOverlayPrepareWindowHandleMessage(args.Message)) { Element src = (Gst.Element)args.Message.Src; src["force-aspect-ratio"] = true; } }
private void OnBusSyncMessage(object o, SyncMessageArgs sargs) { Bus bus = o as Bus; Gst.Message msg = sargs.Message; if (!Gst.Video.Global.IsVideoOverlayPrepareWindowHandleMessage(msg)) { bus.Dispose(); msg.Dispose(); return; } Element src = msg.Src as Element; if (src == null) { bus.Dispose(); msg.Dispose(); return; } try { src["force-aspect-ratio"] = true; } catch (PropertyNotFoundException ex) { Console.WriteLine(ex.Message, ex); } Element overlay = (_pipeline)?.GetByInterface(VideoOverlayAdapter.GType); var _adapter = new VideoOverlayAdapter(overlay.Handle); _adapter.WindowHandle = _handle; _adapter.HandleEvents(true); bus.Dispose(); msg.Dispose(); overlay?.Dispose(); src?.Dispose(); }
private void OnSyncMessage(object o, SyncMessageArgs args) { Message message = args.Message; if (message.Type != MessageType.Element) { return; } if (message.Structure == null || message.Structure.Name != "prepare-xwindow-id") { return; } bool found_xoverlay = FindXOverlay(); if (found_xoverlay) { xoverlay.XwindowId = video_window_xid; } }
private void Bus_SyncMessage(object o, SyncMessageArgs args) { if (Gst.Video.Global.IsVideoOverlayPrepareWindowHandleMessage(args.Message)) { System.Diagnostics.Debug.WriteLine("Bus_SyncMessage: Message prepare window handle received by: " + args.Message.Src.Name + " " + args.Message.Src.GetType().ToString()); if (args.Message.Src != null) { // these checks were in the testvideosrc example and failed, args.Message.Src is always Gst.Element??? if (args.Message.Src is Gst.Video.VideoSink) System.Diagnostics.Debug.WriteLine("Bus_SyncMessage: source is VideoSink"); else System.Diagnostics.Debug.WriteLine("Bus_SyncMessage: source is NOT VideoSink"); if (args.Message.Src is Gst.Bin) System.Diagnostics.Debug.WriteLine("Bus_SyncMessage: source is Bin"); else System.Diagnostics.Debug.WriteLine("Bus_SyncMessage: source is NOT Bin"); try { args.Message.Src["force-aspect-ratio"] = true; } catch (PropertyNotFoundException) { } try { Gst.Video.VideoOverlayAdapter adapter = new VideoOverlayAdapter(args.Message.Src.Handle); adapter.WindowHandle = windowHandle; adapter.HandleEvents(true); System.Diagnostics.Debug.WriteLine("Bus_SyncMessage: Handle passed to adapter: " + windowHandle.ToString()); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine("Bus_SyncMessage: Exception Thrown (overlay stage): " + ex.Message); } } } else { string info; IntPtr prt; args.Message.ParseInfo(out prt, out info); System.Diagnostics.Debug.WriteLine("Bus_SyncMessage: " + args.Message.Type.ToString() + " - " + info); } }
private void OnSyncMessage(object o, SyncMessageArgs args) { Message message = args.Message; var src = message.Src as Element; if (src == null) { return; } if (!Global.IsVideoOverlayPrepareWindowHandleMessage(message)) { return; } bool found_xoverlay = FindXOverlay(); if (found_xoverlay) { xoverlay.WindowHandle = video_window_xid.Value; xoverlay.HandleEvents(true); } }
private void OnSyncMessage (object o, SyncMessageArgs args) { Message message = args.Message; if (message.Type != MessageType.Element) return; if (message.Structure == null || message.Structure.Name != "prepare-xwindow-id") { return; } bool found_xoverlay = FindXOverlay (); if (found_xoverlay) { xoverlay.XwindowId = video_window_xid; } }
private void OnSyncMessage(object o, SyncMessageArgs args) { Message message = args.Message; var src = message.Src as Element; if (src == null) { return; } if (!Gst.Video.Global.IsVideoOverlayPrepareWindowHandleMessage (message)) { return; } bool found_xoverlay = FindXOverlay (); if (found_xoverlay) { xoverlay.WindowHandle = video_window_xid.Value; xoverlay.HandleEvents (true); } }