[banshee] GStreamerSharp: make video playback work properly again



commit 96ee69d2534f12dd40aabd4e53ada7337a898f41
Author: Andrés G. Aragoneses <knocte gmail com>
Date:   Tue Oct 29 18:47:49 2013 +0100

    GStreamerSharp: make video playback work properly again
    
    VideoManager initialization being commented out meant that video
    playback was working, but not in the proper place (a new window
    would pop-up instead of playing the video inside the NowPlaying
    area). This was caused by the bad usage of the Gst# method
    Gst.Bin.GetByInterface(), which receives a GType, but was getting
    a Type of an interface that corresponds to the GInterface type.
    The way to do it is using the -Adapter class that maps to this
    GInterface.
    
    We commented out other lines that cause the player to freeze/hang
    altogether (probably related to some threading deadlock). Commenting
    them out means that GStreamerSharp still has a bug with regards to
    playing a second video while a first one is already being played,
    but the latter bug should be easier to solve, for now, than the
    freezes.

 .../Banshee.GStreamerSharp/PlayerEngine.cs         |    8 +++---
 .../Banshee.GStreamerSharp/VideoManager.cs         |   23 +++++++++----------
 2 files changed, 15 insertions(+), 16 deletions(-)
---
diff --git a/src/Backends/Banshee.GStreamerSharp/Banshee.GStreamerSharp/PlayerEngine.cs 
b/src/Backends/Banshee.GStreamerSharp/Banshee.GStreamerSharp/PlayerEngine.cs
index 9a9fa51..a38377f 100644
--- a/src/Backends/Banshee.GStreamerSharp/Banshee.GStreamerSharp/PlayerEngine.cs
+++ b/src/Backends/Banshee.GStreamerSharp/Banshee.GStreamerSharp/PlayerEngine.cs
@@ -364,10 +364,10 @@ namespace Banshee.GStreamerSharp
 
             cdda_manager = new CddaManager (playbin);
             dvd_manager = new DvdManager (playbin);
-            // FIXME: Disable video stuff until GLib# 3 is used instead of the sopy bundled in GStreamerSharp
-            //video_manager = new VideoManager (playbin);
-            //video_manager.PrepareWindow += OnVideoPrepareWindow;
-            //video_manager.Initialize ();
+
+            video_manager = new VideoManager (playbin);
+            video_manager.PrepareWindow += OnVideoPrepareWindow;
+            video_manager.Initialize ();
 
             dvd_manager.FindNavigation (playbin);
             OnStateChanged (PlayerState.Ready);
diff --git a/src/Backends/Banshee.GStreamerSharp/Banshee.GStreamerSharp/VideoManager.cs 
b/src/Backends/Banshee.GStreamerSharp/Banshee.GStreamerSharp/VideoManager.cs
index f0db326..e44fd61 100644
--- a/src/Backends/Banshee.GStreamerSharp/Banshee.GStreamerSharp/VideoManager.cs
+++ b/src/Backends/Banshee.GStreamerSharp/Banshee.GStreamerSharp/VideoManager.cs
@@ -51,7 +51,7 @@ namespace Banshee.GStreamerSharp
         VideoDisplayContextType video_display_context_type;
         IntPtr video_window;
         ulong video_window_xid;
-        XOverlay xoverlay;
+        XOverlayAdapter xoverlay;
         object video_mutex = new object ();
 
         public VideoManager (PlayBin2 playbin)
@@ -77,14 +77,13 @@ namespace Banshee.GStreamerSharp
             }
             
             playbin ["video-sink"] = videosink;
-            
-            playbin.Bus.SyncHandler = (bus, message) => {return bus.SyncSignalHandler (message); };
+
+            // FIXME: the 2 lines below (SyncHandler and ElementAdded), if uncommented, cause hangs (and 
commenting
+            //        them makes a 2nd video not play in the proper window, but it's better to have the 
latter bug)
+            //playbin.Bus.SyncHandler = (bus, message) => {return bus.SyncSignalHandler (message); };
             playbin.Bus.SyncMessage += OnSyncMessage;
-                
-            if (videosink is Bin) {
-                ((Bin)videosink).ElementAdded += OnVideoSinkElementAdded;
-            }
-            
+            //if (videosink is Bin) { ((Bin)videosink).ElementAdded += OnVideoSinkElementAdded; }
+
             if (PrepareWindow != null) {
                 PrepareWindow ();
             }
@@ -133,12 +132,12 @@ namespace Banshee.GStreamerSharp
                 Monitor.Exit (video_mutex);
                 return false;
             }
-           
+
             xoverlay_element = video_sink is Bin
-                ? ((Bin)video_sink).GetByInterface (typeof(XOverlay))
+                ? ((Bin)video_sink).GetByInterface (new XOverlayAdapter ().GType)
                 : video_sink;
-            
-            xoverlay = xoverlay_element as XOverlay;
+
+            xoverlay = new XOverlayAdapter (xoverlay_element.Handle);
 
             if (!PlatformDetection.IsWindows) {
                 // We can't rely on aspect ratio from dshowvideosink


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