You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
2.5 KiB
77 lines
2.5 KiB
From eb21b6827e25b2c943025a662cde2049c0454a6b Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
|
|
Date: Fri, 15 Aug 2014 15:59:58 +0100
|
|
Subject: [PATCH] Related: rhbz#1130264 plausible fix for reported crash
|
|
|
|
Change-Id: I4ccdf19bfc7986881f7022109f22f47a0f493591
|
|
---
|
|
avmedia/source/gstreamer/gstplayer.cxx | 20 ++++++++++++++++----
|
|
avmedia/source/gstreamer/gstplayer.hxx | 3 +++
|
|
2 files changed, 19 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/avmedia/source/gstreamer/gstplayer.cxx b/avmedia/source/gstreamer/gstplayer.cxx
|
|
index ceea8e2..836e89e 100644
|
|
--- a/avmedia/source/gstreamer/gstplayer.cxx
|
|
+++ b/avmedia/source/gstreamer/gstplayer.cxx
|
|
@@ -74,7 +74,9 @@ Player::Player( const uno::Reference< lang::XMultiServiceFactory >& rxMgr ) :
|
|
mpXOverlay( NULL ),
|
|
mnDuration( 0 ),
|
|
mnWidth( 0 ),
|
|
- mnHeight( 0 )
|
|
+ mnHeight( 0 ),
|
|
+ mnWatchID( 0 ),
|
|
+ mbWatchID( false )
|
|
{
|
|
// Initialize GStreamer library
|
|
int argc = 1;
|
|
@@ -127,11 +129,15 @@ void SAL_CALL Player::disposing()
|
|
g_object_unref( G_OBJECT ( mpXOverlay ) );
|
|
mpXOverlay = NULL;
|
|
}
|
|
+
|
|
+ }
|
|
+ if (mbWatchID)
|
|
+ {
|
|
+ g_source_remove(mnWatchID);
|
|
+ mbWatchID = false;
|
|
}
|
|
}
|
|
|
|
-
|
|
-
|
|
static gboolean pipeline_bus_callback( GstBus *, GstMessage *message, gpointer data )
|
|
{
|
|
Player* pPlayer = static_cast<Player*>(data);
|
|
@@ -357,7 +363,13 @@ void Player::preparePlaybin( const OUString& rURL, GstElement *pSink )
|
|
g_object_set( G_OBJECT( mpPlaybin ), "uri", ascURL.getStr() , NULL );
|
|
|
|
pBus = gst_element_get_bus( mpPlaybin );
|
|
- gst_bus_add_watch( pBus, pipeline_bus_callback, this );
|
|
+ if (mbWatchID)
|
|
+ {
|
|
+ g_source_remove(mnWatchID);
|
|
+ mbWatchID = false;
|
|
+ }
|
|
+ mnWatchID = gst_bus_add_watch( pBus, pipeline_bus_callback, this );
|
|
+ mbWatchID = true;
|
|
DBG( "%p set sync handler", this );
|
|
#ifdef AVMEDIA_GST_0_10
|
|
gst_bus_set_sync_handler( pBus, pipeline_bus_sync_handler, this );
|
|
diff --git a/avmedia/source/gstreamer/gstplayer.hxx b/avmedia/source/gstreamer/gstplayer.hxx
|
|
index 2426eed..33c9e4d 100644
|
|
--- a/avmedia/source/gstreamer/gstplayer.hxx
|
|
+++ b/avmedia/source/gstreamer/gstplayer.hxx
|
|
@@ -97,6 +97,9 @@ protected:
|
|
int mnWidth;
|
|
int mnHeight;
|
|
|
|
+ guint mnWatchID;
|
|
+ bool mbWatchID;
|
|
+
|
|
osl::Condition maSizeCondition;
|
|
};
|
|
|
|
--
|
|
1.9.3
|
|
|