|
|
e4c4141 |
From d6297345b26d09d9f6caa25109a165c739e1f92b Mon Sep 17 00:00:00 2001
|
|
|
e4c4141 |
From: Michael Meeks <michael.meeks@suse.com>
|
|
|
e4c4141 |
Date: Tue, 18 Sep 2012 17:48:10 +0100
|
|
|
e4c4141 |
Subject: [PATCH 6/7] gstreamer: various fixes for 1.0 and cleanups
|
|
|
e4c4141 |
|
|
|
e4c4141 |
always re-create the playbin after the fakeVideo pre-roll to avoid 1.0 issues.
|
|
|
e4c4141 |
handle the GstVideoOverlay object being created before we get our XID.
|
|
|
e4c4141 |
set force-aspect-ratio to allow user scaling un-conditionally
|
|
|
e4c4141 |
|
|
|
e4c4141 |
Conflicts:
|
|
|
e4c4141 |
avmedia/source/gstreamer/gstplayer.cxx
|
|
|
e4c4141 |
|
|
|
e4c4141 |
Change-Id: I8892b8f7a125c0daa7101e28f274bff3de57ee08
|
|
|
e4c4141 |
---
|
|
|
e4c4141 |
avmedia/source/gstreamer/gstplayer.cxx | 46 ++++++++++++++++++++--------------
|
|
|
e4c4141 |
1 file changed, 27 insertions(+), 19 deletions(-)
|
|
|
e4c4141 |
|
|
|
e4c4141 |
diff --git a/avmedia/source/gstreamer/gstplayer.cxx b/avmedia/source/gstreamer/gstplayer.cxx
|
|
|
e4c4141 |
index 3654410..4bcca8e 100644
|
|
|
e4c4141 |
--- a/avmedia/source/gstreamer/gstplayer.cxx
|
|
|
e4c4141 |
+++ b/avmedia/source/gstreamer/gstplayer.cxx
|
|
|
e4c4141 |
@@ -51,11 +51,11 @@
|
|
|
e4c4141 |
#endif
|
|
|
e4c4141 |
|
|
|
e4c4141 |
#if !defined DBG
|
|
|
e4c4141 |
-#if OSL_DEBUG_LEVEL > 2
|
|
|
e4c4141 |
+# if OSL_DEBUG_LEVEL > 2
|
|
|
e4c4141 |
#define DBG(...) do { fprintf (stderr, "%s", AVVERSION); fprintf (stderr, __VA_ARGS__); fprintf (stderr, "\n"); } while (0);
|
|
|
e4c4141 |
-#else
|
|
|
e4c4141 |
+# else
|
|
|
e4c4141 |
#define DBG(...)
|
|
|
e4c4141 |
-#endif
|
|
|
e4c4141 |
+# endif
|
|
|
e4c4141 |
#endif
|
|
|
e4c4141 |
|
|
|
e4c4141 |
using namespace ::com::sun::star;
|
|
|
e4c4141 |
@@ -207,17 +207,20 @@ GstBusSyncReply Player::processSyncMessage( GstMessage *message )
|
|
|
e4c4141 |
|
|
|
e4c4141 |
#ifdef AVMEDIA_GST_0_10
|
|
|
e4c4141 |
if (message->structure &&
|
|
|
e4c4141 |
- !strcmp( gst_structure_get_name( message->structure ), "prepare-xwindow-id" ) && mnWindowID != 0 )
|
|
|
e4c4141 |
+ !strcmp( gst_structure_get_name( message->structure ), "prepare-xwindow-id" ) )
|
|
|
e4c4141 |
#else
|
|
|
e4c4141 |
- if (gst_message_has_name (message, "prepare-window-handle") && mnWindowID != 0 )
|
|
|
e4c4141 |
+ if (gst_is_video_overlay_prepare_window_handle_message (message) )
|
|
|
e4c4141 |
#endif
|
|
|
e4c4141 |
{
|
|
|
e4c4141 |
- DBG( "%p processSyncMessage has handle: %s", this, GST_MESSAGE_TYPE_NAME( message ) );
|
|
|
e4c4141 |
+ DBG( "%p processSyncMessage prepare window id: %s %d", this,
|
|
|
e4c4141 |
+ GST_MESSAGE_TYPE_NAME( message ), (int)mnWindowId );
|
|
|
e4c4141 |
if( mpXOverlay )
|
|
|
e4c4141 |
g_object_unref( G_OBJECT ( mpXOverlay ) );
|
|
|
e4c4141 |
+ g_object_set( GST_MESSAGE_SRC( message ), "force-aspect-ratio", FALSE, NULL );
|
|
|
e4c4141 |
mpXOverlay = GST_VIDEO_OVERLAY( GST_MESSAGE_SRC( message ) );
|
|
|
e4c4141 |
g_object_ref( G_OBJECT ( mpXOverlay ) );
|
|
|
e4c4141 |
- gst_video_overlay_set_window_handle( mpXOverlay, mnWindowID );
|
|
|
e4c4141 |
+ if ( mnWindowID != 0 )
|
|
|
e4c4141 |
+ gst_video_overlay_set_window_handle( mpXOverlay, mnWindowID );
|
|
|
e4c4141 |
return GST_BUS_DROP;
|
|
|
e4c4141 |
}
|
|
|
e4c4141 |
|
|
|
e4c4141 |
@@ -301,7 +304,7 @@ GstBusSyncReply Player::processSyncMessage( GstMessage *message )
|
|
|
e4c4141 |
mnWidth = w;
|
|
|
e4c4141 |
mnHeight = h;
|
|
|
e4c4141 |
|
|
|
e4c4141 |
- fprintf (stderr, "queried size: %d x %d", mnWidth, mnHeight );
|
|
|
e4c4141 |
+ DBG( "queried size: %d x %d", mnWidth, mnHeight );
|
|
|
e4c4141 |
|
|
|
e4c4141 |
maSizeCondition.set();
|
|
|
e4c4141 |
}
|
|
|
e4c4141 |
@@ -310,7 +313,7 @@ GstBusSyncReply Player::processSyncMessage( GstMessage *message )
|
|
|
e4c4141 |
}
|
|
|
e4c4141 |
#endif
|
|
|
e4c4141 |
} else if( GST_MESSAGE_TYPE( message ) == GST_MESSAGE_ERROR ) {
|
|
|
e4c4141 |
- fprintf (stderr, "Error !\n");
|
|
|
e4c4141 |
+ DBG( "Error !\n" );
|
|
|
e4c4141 |
if( mnWidth == 0 ) {
|
|
|
e4c4141 |
// an error occurred, set condition so that OOo thread doesn't wait for us
|
|
|
e4c4141 |
maSizeCondition.set();
|
|
|
e4c4141 |
@@ -331,9 +334,9 @@ void Player::preparePlaybin( const ::rtl::OUString& rURL, bool bFakeVideo )
|
|
|
e4c4141 |
}
|
|
|
e4c4141 |
|
|
|
e4c4141 |
mpPlaybin = gst_element_factory_make( "playbin", NULL );
|
|
|
e4c4141 |
-
|
|
|
e4c4141 |
- if( bFakeVideo )
|
|
|
e4c4141 |
- g_object_set( G_OBJECT( mpPlaybin ), "video-sink", gst_element_factory_make( "fakesink", NULL ), NULL );
|
|
|
e4c4141 |
+ if( bFakeVideo ) // used for getting prefered size etc.
|
|
|
e4c4141 |
+ g_object_set( G_OBJECT( mpPlaybin ), "video-sink",
|
|
|
e4c4141 |
+ gst_element_factory_make( "fakesink", NULL ), NULL );
|
|
|
e4c4141 |
|
|
|
e4c4141 |
mbFakeVideo = bFakeVideo;
|
|
|
e4c4141 |
|
|
|
e4c4141 |
@@ -343,7 +346,11 @@ void Player::preparePlaybin( const ::rtl::OUString& rURL, bool bFakeVideo )
|
|
|
e4c4141 |
pBus = gst_element_get_bus( mpPlaybin );
|
|
|
e4c4141 |
gst_bus_add_watch( pBus, pipeline_bus_callback, this );
|
|
|
e4c4141 |
DBG( "%p set sync handler", this );
|
|
|
e4c4141 |
+#ifdef AVMEDIA_GST_0_10
|
|
|
e4c4141 |
gst_bus_set_sync_handler( pBus, pipeline_bus_sync_handler, this );
|
|
|
e4c4141 |
+#else
|
|
|
e4c4141 |
+ gst_bus_set_sync_handler( pBus, pipeline_bus_sync_handler, this, NULL );
|
|
|
e4c4141 |
+#endif
|
|
|
e4c4141 |
g_object_unref( pBus );
|
|
|
e4c4141 |
}
|
|
|
e4c4141 |
|
|
|
e4c4141 |
@@ -582,13 +589,8 @@ awt::Size SAL_CALL Player::getPreferredPlayerWindowSize()
|
|
|
e4c4141 |
#endif
|
|
|
e4c4141 |
maSizeCondition.wait( &aTimeout );
|
|
|
e4c4141 |
|
|
|
e4c4141 |
- if( mbFakeVideo ) {
|
|
|
e4c4141 |
- mbFakeVideo = sal_False;
|
|
|
e4c4141 |
-
|
|
|
e4c4141 |
- g_object_set( G_OBJECT( mpPlaybin ), "video-sink", NULL, NULL );
|
|
|
e4c4141 |
- gst_element_set_state( mpPlaybin, GST_STATE_READY );
|
|
|
e4c4141 |
- gst_element_set_state( mpPlaybin, GST_STATE_PAUSED );
|
|
|
e4c4141 |
- }
|
|
|
e4c4141 |
+ if( mbFakeVideo ) // ready ourselves for the real thing
|
|
|
e4c4141 |
+ preparePlaybin( maURL, false );
|
|
|
e4c4141 |
|
|
|
e4c4141 |
DBG( "%p Player::getPreferredPlayerWindowSize after waitCondition %d, member %d x %d", this, aResult, mnWidth, mnHeight );
|
|
|
e4c4141 |
|
|
|
e4c4141 |
@@ -624,7 +626,13 @@ uno::Reference< ::media::XPlayerWindow > SAL_CALL Player::createPlayerWindow( co
|
|
|
e4c4141 |
const SystemEnvData* pEnvData = pParentWindow ? pParentWindow->GetSystemData() : NULL;
|
|
|
e4c4141 |
OSL_ASSERT(pEnvData);
|
|
|
e4c4141 |
if (pEnvData)
|
|
|
e4c4141 |
+ {
|
|
|
e4c4141 |
mnWindowID = pEnvData->aWindow;
|
|
|
e4c4141 |
+ DBG( "set window id to %d XOverlay %p\n", (int)mnWindowID, mpXOverlay);
|
|
|
e4c4141 |
+ gst_element_set_state( mpPlaybin, GST_STATE_PAUSED );
|
|
|
e4c4141 |
+ if ( mpXOverlay != NULL )
|
|
|
e4c4141 |
+ gst_video_overlay_set_window_handle( mpXOverlay, mnWindowID );
|
|
|
e4c4141 |
+ }
|
|
|
e4c4141 |
}
|
|
|
e4c4141 |
}
|
|
|
e4c4141 |
|
|
|
e4c4141 |
--
|
|
|
e4c4141 |
1.7.11.4
|
|
|
e4c4141 |
|