|
 |
a9add1 |
From b09dbbfb58d67d1640709f71a7053a7ccea70cec Mon Sep 17 00:00:00 2001
|
|
 |
a9add1 |
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
|
|
 |
a9add1 |
Date: Thu, 17 Mar 2016 12:21:16 +0000
|
|
 |
a9add1 |
Subject: [PATCH] Resolves: tdf#96989 videos playback at maximum possible
|
|
 |
a9add1 |
volume
|
|
 |
a9add1 |
|
|
 |
a9add1 |
On systems with flat-volumes then setting the volume directly on the playbin to
|
|
 |
a9add1 |
100% results in resetting the global volume to the maximum possible volume.
|
|
 |
a9add1 |
|
|
 |
a9add1 |
We expect to set as % of the current system volume. Putting an intermediate
|
|
 |
a9add1 |
volume object into the pipeline does the more expected thing.
|
|
 |
a9add1 |
|
|
 |
a9add1 |
(cherry picked from commit d4b48e0de7f817c0d4607382724778acf191f9f8)
|
|
 |
a9add1 |
|
|
 |
a9add1 |
Change-Id: I911d6fffba0983e4fd7b455e820959a96115de34
|
|
 |
a9add1 |
---
|
|
 |
a9add1 |
avmedia/source/gstreamer/gstplayer.cxx | 90 ++++++++++++++++++++--------------
|
|
 |
a9add1 |
avmedia/source/gstreamer/gstplayer.hxx | 1 +
|
|
 |
a9add1 |
2 files changed, 54 insertions(+), 37 deletions(-)
|
|
 |
a9add1 |
|
|
 |
a9add1 |
diff --git a/avmedia/source/gstreamer/gstplayer.cxx b/avmedia/source/gstreamer/gstplayer.cxx
|
|
 |
a9add1 |
index b820ae1..50f54ea 100644
|
|
 |
a9add1 |
--- a/avmedia/source/gstreamer/gstplayer.cxx
|
|
 |
a9add1 |
+++ b/avmedia/source/gstreamer/gstplayer.cxx
|
|
 |
a9add1 |
@@ -131,7 +131,7 @@ void MissingPluginInstaller::report(
|
|
 |
a9add1 |
{
|
|
 |
a9add1 |
// assert(gst_is_missing_plugin_message(message));
|
|
 |
a9add1 |
gchar * det = gst_missing_plugin_message_get_installer_detail(message);
|
|
 |
a9add1 |
- if (det == nullptr) {
|
|
 |
a9add1 |
+ if (det == NULL) {
|
|
 |
a9add1 |
SAL_WARN(
|
|
 |
a9add1 |
"avmedia.gstreamer",
|
|
 |
a9add1 |
"gst_missing_plugin_message_get_installer_detail failed");
|
|
 |
a9add1 |
@@ -268,8 +268,8 @@ void MissingPluginInstallerThread::execute() {
|
|
 |
a9add1 |
for (auto const & i: details) {
|
|
 |
a9add1 |
args.push_back(const_cast<char *>(i.getStr()));
|
|
 |
a9add1 |
}
|
|
 |
a9add1 |
- args.push_back(nullptr);
|
|
 |
a9add1 |
- gst_install_plugins_sync(args.data(), nullptr);
|
|
 |
a9add1 |
+ args.push_back(NULL);
|
|
 |
a9add1 |
+ gst_install_plugins_sync(args.data(), NULL);
|
|
 |
a9add1 |
{
|
|
 |
a9add1 |
osl::MutexGuard g(inst.mutex_);
|
|
 |
a9add1 |
if (inst.queued_.empty() || inst.launchNewThread_) {
|
|
 |
a9add1 |
@@ -290,6 +290,7 @@ Player::Player( const uno::Reference< lang::XMultiServiceFactory >& rxMgr ) :
|
|
 |
a9add1 |
GstPlayer_BASE( m_aMutex ),
|
|
 |
a9add1 |
mxMgr( rxMgr ),
|
|
 |
a9add1 |
mpPlaybin( NULL ),
|
|
 |
a9add1 |
+ mpVolumeControl( NULL ),
|
|
 |
a9add1 |
mbFakeVideo (false ),
|
|
 |
a9add1 |
mnUnmutedVolume( 0 ),
|
|
 |
a9add1 |
mbPlayPending ( false ),
|
|
 |
a9add1 |
@@ -351,6 +352,7 @@ void SAL_CALL Player::disposing()
|
|
 |
a9add1 |
g_object_unref( G_OBJECT( mpPlaybin ) );
|
|
 |
a9add1 |
|
|
 |
a9add1 |
mpPlaybin = NULL;
|
|
 |
a9add1 |
+ mpVolumeControl = NULL;
|
|
 |
a9add1 |
}
|
|
 |
a9add1 |
|
|
 |
a9add1 |
if( mpXOverlay ) {
|
|
 |
a9add1 |
@@ -576,41 +578,55 @@ GstBusSyncReply Player::processSyncMessage( GstMessage *message )
|
|
 |
a9add1 |
|
|
 |
a9add1 |
void Player::preparePlaybin( const OUString& rURL, GstElement *pSink )
|
|
 |
a9add1 |
{
|
|
 |
a9add1 |
- GstBus *pBus;
|
|
 |
a9add1 |
+ GstBus *pBus;
|
|
 |
a9add1 |
|
|
 |
a9add1 |
- if( mpPlaybin != NULL ) {
|
|
 |
a9add1 |
- gst_element_set_state( mpPlaybin, GST_STATE_NULL );
|
|
 |
a9add1 |
- mbPlayPending = false;
|
|
 |
a9add1 |
- g_object_unref( mpPlaybin );
|
|
 |
a9add1 |
- }
|
|
 |
a9add1 |
+ if( mpPlaybin != NULL ) {
|
|
 |
a9add1 |
+ gst_element_set_state( mpPlaybin, GST_STATE_NULL );
|
|
 |
a9add1 |
+ mbPlayPending = false;
|
|
 |
a9add1 |
+ g_object_unref( mpPlaybin );
|
|
 |
a9add1 |
+ }
|
|
 |
a9add1 |
|
|
 |
a9add1 |
- mpPlaybin = gst_element_factory_make( "playbin", NULL );
|
|
 |
a9add1 |
- if( pSink != NULL ) // used for getting preferred size etc.
|
|
 |
a9add1 |
- {
|
|
 |
a9add1 |
- g_object_set( G_OBJECT( mpPlaybin ), "video-sink", pSink, NULL );
|
|
 |
a9add1 |
- mbFakeVideo = true;
|
|
 |
a9add1 |
- }
|
|
 |
a9add1 |
- else
|
|
 |
a9add1 |
- mbFakeVideo = false;
|
|
 |
a9add1 |
+ mpPlaybin = gst_element_factory_make( "playbin", NULL );
|
|
 |
a9add1 |
+
|
|
 |
a9add1 |
+ //tdf#96989 on systems with flat-volumes setting the volume directly on the
|
|
 |
a9add1 |
+ //playbin to 100% results in setting the global volums to 100% of the
|
|
 |
a9add1 |
+ //maximum. We expect to set as % of the current volume.
|
|
 |
a9add1 |
+ mpVolumeControl = gst_element_factory_make( "volume", NULL );
|
|
 |
a9add1 |
+ GstElement *pAudioSink = gst_element_factory_make( "autoaudiosink", NULL );
|
|
 |
a9add1 |
+ GstElement* pAudioOutput = gst_bin_new("audio-output-bin");
|
|
 |
a9add1 |
+ gst_bin_add_many(GST_BIN(pAudioOutput), mpVolumeControl, pAudioSink, NULL);
|
|
 |
a9add1 |
+ gst_element_link(mpVolumeControl, pAudioSink);
|
|
 |
a9add1 |
+ GstPad *pPad = gst_element_get_static_pad(mpVolumeControl, "sink");
|
|
 |
a9add1 |
+ gst_element_add_pad(GST_ELEMENT(pAudioOutput), gst_ghost_pad_new("sink", pPad));
|
|
 |
a9add1 |
+ gst_object_unref(GST_OBJECT(pPad));
|
|
 |
a9add1 |
+ g_object_set(G_OBJECT(mpPlaybin), "audio-sink", pAudioOutput, NULL);
|
|
 |
a9add1 |
+
|
|
 |
a9add1 |
+ if( pSink != NULL ) // used for getting preferred size etc.
|
|
 |
a9add1 |
+ {
|
|
 |
a9add1 |
+ g_object_set( G_OBJECT( mpPlaybin ), "video-sink", pSink, NULL );
|
|
 |
a9add1 |
+ mbFakeVideo = true;
|
|
 |
a9add1 |
+ }
|
|
 |
a9add1 |
+ else
|
|
 |
a9add1 |
+ mbFakeVideo = false;
|
|
 |
a9add1 |
|
|
 |
a9add1 |
- OString ascURL = OUStringToOString( rURL, RTL_TEXTENCODING_UTF8 );
|
|
 |
a9add1 |
- g_object_set( G_OBJECT( mpPlaybin ), "uri", ascURL.getStr() , NULL );
|
|
 |
a9add1 |
+ OString ascURL = OUStringToOString( rURL, RTL_TEXTENCODING_UTF8 );
|
|
 |
a9add1 |
+ g_object_set( G_OBJECT( mpPlaybin ), "uri", ascURL.getStr() , NULL );
|
|
 |
a9add1 |
|
|
 |
a9add1 |
- pBus = gst_element_get_bus( mpPlaybin );
|
|
 |
a9add1 |
- if (mbWatchID)
|
|
 |
a9add1 |
- {
|
|
 |
a9add1 |
- g_source_remove(mnWatchID);
|
|
 |
a9add1 |
- mbWatchID = false;
|
|
 |
a9add1 |
- }
|
|
 |
a9add1 |
- mnWatchID = gst_bus_add_watch( pBus, pipeline_bus_callback, this );
|
|
 |
a9add1 |
- mbWatchID = true;
|
|
 |
a9add1 |
- DBG( "%p set sync handler", this );
|
|
 |
a9add1 |
+ pBus = gst_element_get_bus( mpPlaybin );
|
|
 |
a9add1 |
+ if (mbWatchID)
|
|
 |
a9add1 |
+ {
|
|
 |
a9add1 |
+ g_source_remove(mnWatchID);
|
|
 |
a9add1 |
+ mbWatchID = false;
|
|
 |
a9add1 |
+ }
|
|
 |
a9add1 |
+ mnWatchID = gst_bus_add_watch( pBus, pipeline_bus_callback, this );
|
|
 |
a9add1 |
+ mbWatchID = true;
|
|
 |
a9add1 |
+ DBG( "%p set sync handler", this );
|
|
 |
a9add1 |
#ifdef AVMEDIA_GST_0_10
|
|
 |
a9add1 |
- gst_bus_set_sync_handler( pBus, pipeline_bus_sync_handler, this );
|
|
 |
a9add1 |
+ gst_bus_set_sync_handler( pBus, pipeline_bus_sync_handler, this );
|
|
 |
a9add1 |
#else
|
|
 |
a9add1 |
- gst_bus_set_sync_handler( pBus, pipeline_bus_sync_handler, this, NULL );
|
|
 |
a9add1 |
+ gst_bus_set_sync_handler( pBus, pipeline_bus_sync_handler, this, NULL );
|
|
 |
a9add1 |
#endif
|
|
 |
a9add1 |
- g_object_unref( pBus );
|
|
 |
a9add1 |
+ g_object_unref( pBus );
|
|
 |
a9add1 |
}
|
|
 |
a9add1 |
|
|
 |
a9add1 |
bool Player::create( const OUString& rURL )
|
|
 |
a9add1 |
@@ -784,7 +800,7 @@ void SAL_CALL Player::setMute( sal_Bool bSet )
|
|
 |
a9add1 |
nVolume = 0.0;
|
|
 |
a9add1 |
}
|
|
 |
a9add1 |
|
|
 |
a9add1 |
- g_object_set( G_OBJECT( mpPlaybin ), "volume", nVolume, NULL );
|
|
 |
a9add1 |
+ g_object_set( G_OBJECT( mpVolumeControl ), "volume", nVolume, NULL);
|
|
 |
a9add1 |
|
|
 |
a9add1 |
mbMuted = bSet;
|
|
 |
a9add1 |
}
|
|
 |
a9add1 |
@@ -812,10 +828,10 @@ void SAL_CALL Player::setVolumeDB( sal_Int16 nVolumeDB )
|
|
 |
a9add1 |
DBG( "set volume: %d gst volume: %lf", nVolumeDB, mnUnmutedVolume );
|
|
 |
a9add1 |
|
|
 |
a9add1 |
// change volume
|
|
 |
a9add1 |
- if( !mbMuted && mpPlaybin )
|
|
 |
a9add1 |
- {
|
|
 |
a9add1 |
- g_object_set( G_OBJECT( mpPlaybin ), "volume", (gdouble) mnUnmutedVolume, NULL );
|
|
 |
a9add1 |
- }
|
|
 |
a9add1 |
+ if( !mbMuted && mpPlaybin )
|
|
 |
a9add1 |
+ {
|
|
 |
a9add1 |
+ g_object_set( G_OBJECT( mpVolumeControl ), "volume", mnUnmutedVolume, NULL );
|
|
 |
a9add1 |
+ }
|
|
 |
a9add1 |
}
|
|
 |
a9add1 |
|
|
 |
a9add1 |
|
|
 |
a9add1 |
@@ -830,7 +846,7 @@ sal_Int16 SAL_CALL Player::getVolumeDB()
|
|
 |
a9add1 |
if( mpPlaybin ) {
|
|
 |
a9add1 |
double nGstVolume = 0.0;
|
|
 |
a9add1 |
|
|
 |
a9add1 |
- g_object_get( G_OBJECT( mpPlaybin ), "volume", &nGstVolume, NULL );
|
|
 |
a9add1 |
+ g_object_get( G_OBJECT( mpVolumeControl ), "volume", &nGstVolume, NULL );
|
|
 |
a9add1 |
|
|
 |
a9add1 |
nVolumeDB = (sal_Int16) ( 20.0*log10 ( nGstVolume ) );
|
|
 |
a9add1 |
}
|
|
 |
a9add1 |
diff --git a/avmedia/source/gstreamer/gstplayer.hxx b/avmedia/source/gstreamer/gstplayer.hxx
|
|
 |
a9add1 |
index c5fc4f6..ed60e79 100644
|
|
 |
a9add1 |
--- a/avmedia/source/gstreamer/gstplayer.hxx
|
|
 |
a9add1 |
+++ b/avmedia/source/gstreamer/gstplayer.hxx
|
|
 |
a9add1 |
@@ -83,6 +83,7 @@ protected:
|
|
 |
a9add1 |
|
|
 |
a9add1 |
// Add elements and pipeline here
|
|
 |
a9add1 |
GstElement* mpPlaybin; // the playbin is also a pipeline
|
|
 |
a9add1 |
+ GstElement* mpVolumeControl; // the playbin is also a pipeline
|
|
 |
a9add1 |
bool mbFakeVideo;
|
|
 |
a9add1 |
|
|
 |
a9add1 |
gdouble mnUnmutedVolume;
|
|
 |
a9add1 |
--
|
|
 |
a9add1 |
2.7.1
|
|
 |
a9add1 |
|