Exemple #1
0
 /// <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...");
     }
 }
Exemple #2
0
        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);
        }
Exemple #3
0
        /// <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) { }
                }
            }
        }
Exemple #7
0
 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;
            }
        }
Exemple #10
0
 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);
     }
 }
Exemple #11
0
        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);
            }
        }
Exemple #12
0
        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;
            }
        }
Exemple #13
0
        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);
            }
        }