[banshee/gapless-ng: 190/836] [libbanshee]Fix video playback with playbin2
- From: Christopher James Halse Rogers <chrishr src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [banshee/gapless-ng: 190/836] [libbanshee]Fix video playback with playbin2
- Date: Thu, 25 Feb 2010 22:43:43 +0000 (UTC)
commit 75105342186deb69e2f59bf778f095736c61a98b
Author: Christopher James Halse Rogers <raof ubuntu com>
Date: Wed Oct 7 15:29:57 2009 +1100
[libbanshee]Fix video playback with playbin2
This works around a deadlock in playbin2 when g_object_get is called in bp_video_find_xoverlay.
Since the videosink (should) never changes, add a reference to it in BansheePlayer and initialise
it when setting up the video pipeline.
libbanshee/banshee-player-private.h | 1 +
libbanshee/banshee-player-video.c | 16 +++++++---------
2 files changed, 8 insertions(+), 9 deletions(-)
---
diff --git a/libbanshee/banshee-player-private.h b/libbanshee/banshee-player-private.h
index 5d12aab..1512a84 100644
--- a/libbanshee/banshee-player-private.h
+++ b/libbanshee/banshee-player-private.h
@@ -111,6 +111,7 @@ struct BansheePlayer {
GstElement *audiobin;
GstElement *equalizer;
GstElement *preamp;
+ GstElement *videosink;
gint equalizer_status;
gdouble current_volume;
diff --git a/libbanshee/banshee-player-video.c b/libbanshee/banshee-player-video.c
index 21bc0ce..4adcdfc 100644
--- a/libbanshee/banshee-player-video.c
+++ b/libbanshee/banshee-player-video.c
@@ -37,15 +37,14 @@
static gboolean
bp_video_find_xoverlay (BansheePlayer *player)
{
- GstElement *video_sink = NULL;
GstElement *xoverlay;
GstXOverlay *previous_xoverlay;
- previous_xoverlay = player->xoverlay;
+ g_return_val_if_fail (IS_BANSHEE_PLAYER (player), FALSE);
- g_object_get (player->playbin, "video-sink", &video_sink, NULL);
+ previous_xoverlay = player->xoverlay;
- if (video_sink == NULL) {
+ if (player->videosink == NULL) {
player->xoverlay = NULL;
if (previous_xoverlay != NULL) {
gst_object_unref (previous_xoverlay);
@@ -54,9 +53,9 @@ bp_video_find_xoverlay (BansheePlayer *player)
return FALSE;
}
- xoverlay = GST_IS_BIN (video_sink)
- ? gst_bin_get_by_interface (GST_BIN (video_sink), GST_TYPE_X_OVERLAY)
- : video_sink;
+ xoverlay = GST_IS_BIN (player->videosink)
+ ? gst_bin_get_by_interface (GST_BIN (player->videosink), GST_TYPE_X_OVERLAY)
+ : player->videosink;
player->xoverlay = GST_IS_X_OVERLAY (xoverlay) ? GST_X_OVERLAY (xoverlay) : NULL;
@@ -74,8 +73,6 @@ bp_video_find_xoverlay (BansheePlayer *player)
g_object_set (G_OBJECT (player->xoverlay), "handle-events", FALSE, NULL);
}
- gst_object_unref (video_sink);
-
return player->xoverlay != NULL;
}
@@ -178,6 +175,7 @@ _bp_video_pipeline_setup (BansheePlayer *player, GstBus *bus)
#endif
#endif
+ player->videosink = videosink;
}
P_INVOKE void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]