[banshee] GStreamerSharp: make video playback work properly again
- From: Andrés Aragoneses <aaragoneses src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [banshee] GStreamerSharp: make video playback work properly again
- Date: Tue, 29 Oct 2013 17:48:12 +0000 (UTC)
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]