[banshee] GStreamerSharp: prepare overlay the soonest possible if it's a video



commit 4566e800b4b1402491251cba164f8deef20113f9
Author: Andrés G. Aragoneses <knocte gmail com>
Date:   Wed Oct 30 14:48:19 2013 +0100

    GStreamerSharp: prepare overlay the soonest possible if it's a video
    
    There was still a small (but noticeable) time window between the start
    of a video playback and the mapping of its rendering box to the
    NowPlaying window. Doing it just after the Play() command is sent to
    engine is the soonest possible it can be done to avoid this visual
    glitch.

 .../Banshee.GStreamerSharp/PlayerEngine.cs         |    1 +
 .../Banshee.GStreamerSharp/VideoManager.cs         |   32 ++++++++++++++-----
 2 files changed, 24 insertions(+), 9 deletions(-)
---
diff --git a/src/Backends/Banshee.GStreamerSharp/Banshee.GStreamerSharp/PlayerEngine.cs 
b/src/Backends/Banshee.GStreamerSharp/Banshee.GStreamerSharp/PlayerEngine.cs
index a38377f..515d6f0 100644
--- a/src/Backends/Banshee.GStreamerSharp/Banshee.GStreamerSharp/PlayerEngine.cs
+++ b/src/Backends/Banshee.GStreamerSharp/Banshee.GStreamerSharp/PlayerEngine.cs
@@ -741,6 +741,7 @@ namespace Banshee.GStreamerSharp
         public override void Play ()
         {
             playbin.SetState (Gst.State.Playing);
+            video_manager.MaybePrepareOverlay ();
         }
 
         public override void Pause ()
diff --git a/src/Backends/Banshee.GStreamerSharp/Banshee.GStreamerSharp/VideoManager.cs 
b/src/Backends/Banshee.GStreamerSharp/Banshee.GStreamerSharp/VideoManager.cs
index bfbdb45..0e55bad 100644
--- a/src/Backends/Banshee.GStreamerSharp/Banshee.GStreamerSharp/VideoManager.cs
+++ b/src/Backends/Banshee.GStreamerSharp/Banshee.GStreamerSharp/VideoManager.cs
@@ -1,10 +1,12 @@
 //
 // VideoManager.cs
 //
-// Author:
+// Authors:
 //  Olivier Dufour <olivier duff gmail com>
+//  Andrés G. Aragoneses <knocte gmail com>
 //
 // Copyright (C) 2011 Olivier Dufour
+// Copyright (C) 2013 Andrés G. Aragoneses
 //
 // Permission is hereby granted, free of charge, to any person obtaining
 // a copy of this software and associated documentation files (the
@@ -49,7 +51,7 @@ namespace Banshee.GStreamerSharp
         PlayBin2 playbin;
         VideoDisplayContextType video_display_context_type;
         IntPtr video_window;
-        ulong video_window_xid;
+        ulong? video_window_xid;
         XOverlayAdapter xoverlay;
         object video_mutex = new object ();
 
@@ -106,7 +108,7 @@ namespace Banshee.GStreamerSharp
 
             if (message.Type != MessageType.Element)
                 return;
-            
+
             if (message.Structure == null || message.Structure.Name != "prepare-xwindow-id") {
                 return;
             }
@@ -114,7 +116,7 @@ namespace Banshee.GStreamerSharp
             bool found_xoverlay = FindXOverlay ();
 
             if (found_xoverlay) {
-                xoverlay.XwindowId = video_window_xid;
+                xoverlay.XwindowId = video_window_xid.Value;
             }
         }
 
@@ -123,6 +125,21 @@ namespace Banshee.GStreamerSharp
             FindXOverlay ();
         }
 
+        internal bool MaybePrepareOverlay ()
+        {
+            if (!video_window_xid.HasValue) {
+                //this is not a video
+                return false;
+            }
+
+            if (xoverlay == null && !FindXOverlay ()) {
+                return false;
+            }
+
+            xoverlay.XwindowId = video_window_xid.Value;
+            return true;
+        }
+
         private bool FindXOverlay ()
         {
             Element video_sink = null;
@@ -245,12 +262,9 @@ namespace Banshee.GStreamerSharp
                 return;
             }
 
-            if (xoverlay == null && !FindXOverlay ()) {
-                return;
+            if (MaybePrepareOverlay () && xoverlay != null) {
+                xoverlay.Expose ();
             }
-
-            xoverlay.XwindowId = video_window_xid;
-            xoverlay.Expose ();
         }
 
         public void WindowRealize (IntPtr window)


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]