diff options
author | Mark Hung <marklh9@gmail.com> | 2019-02-18 21:51:57 +0800 |
---|---|---|
committer | Mark Hung <marklh9@gmail.com> | 2019-05-31 01:16:22 +0200 |
commit | 474bef8e06ee514c4ff751b64ef395a54987bd7d (patch) | |
tree | 64ab46fe1e45a23cbc683a0b8e108ce732a50b63 /avmedia | |
parent | baf574312c68df5674d78066f7bb468481caad40 (diff) |
avmedia: set gstreamer gst_video_overlay size and position.
Have video fit to the media object size on the slide,
allow more complicated interactions.
---
This also backports the relevant part from commit
bbe1ede0fada499fd49b60bdc7964e311b331454
("tdf#124027: use ID of the embedded window and fix
position of overlay") namely to make translation
gtk3-specific, to fix a regression, as mentioned in
its commmit message:
> 2) the position of the embedded window for video overlay has already
> been translated relative to the top-left corner of the slide (see
> bugfix of tdf#42873 how) in gen, gtk and kde5 vclplugs. So let's limit
> translating it 2nd time only to gtk3 vclplug which for some reason
> behaves differently
> (regression from 18138417485aeba6c52d935c616dba829b24ffd8)
Reviewed-on: https://gerrit.libreoffice.org/67978
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
(cherry picked from commit 18138417485aeba6c52d935c616dba829b24ffd8)
Change-Id: Ice1fa4b521176ad7ed7f7d1d2b13e617e8282390
Reviewed-on: https://gerrit.libreoffice.org/73199
Tested-by: Jenkins
Reviewed-by: Mark Hung <marklh9@gmail.com>
Diffstat (limited to 'avmedia')
-rw-r--r-- | avmedia/source/gstreamer/gstplayer.cxx | 26 | ||||
-rw-r--r-- | avmedia/source/gstreamer/gstplayer.hxx | 2 |
2 files changed, 27 insertions, 1 deletions
diff --git a/avmedia/source/gstreamer/gstplayer.cxx b/avmedia/source/gstreamer/gstplayer.cxx index 37c638a6bd01..fb2193b3f67d 100644 --- a/avmedia/source/gstreamer/gstplayer.cxx +++ b/avmedia/source/gstreamer/gstplayer.cxx @@ -513,7 +513,13 @@ GstBusSyncReply Player::processSyncMessage( GstMessage *message ) mpXOverlay = GST_VIDEO_OVERLAY( GST_MESSAGE_SRC( message ) ); g_object_ref( G_OBJECT ( mpXOverlay ) ); if ( mnWindowID != 0 ) + { gst_video_overlay_set_window_handle( mpXOverlay, mnWindowID ); + + if (maArea.Width > 0 && maArea.Height > 0) + gst_video_overlay_set_render_rectangle(mpXOverlay, maArea.X, maArea.Y, maArea.Width, maArea.Height); + } + return GST_BUS_DROP; } #ifndef AVMEDIA_GST_0_10 @@ -928,7 +934,12 @@ uno::Reference< ::media::XPlayerWindow > SAL_CALL Player::createPlayerWindow( co ::osl::MutexGuard aGuard(m_aMutex); uno::Reference< ::media::XPlayerWindow > xRet; - awt::Size aSize( getPreferredPlayerWindowSize() ); + awt::Size aSize; + + if (rArguments.getLength() > 1 && (rArguments[1] >>= maArea)) + aSize = awt::Size(maArea.Width, maArea.Height); + else + aSize = getPreferredPlayerWindowSize(); if( mbFakeVideo ) preparePlaybin( maURL, nullptr ); @@ -953,6 +964,19 @@ uno::Reference< ::media::XPlayerWindow > SAL_CALL Player::createPlayerWindow( co OUString aToolkit = OUString::createFromAscii(pEnvData->pToolkit); OUString aPlatform = OUString::createFromAscii(pEnvData->pPlatformName); + // tdf#124027: the position of embedded window is identical w/ the position + // of media object in all other vclplugs (gtk, kde5, gen), in gtk3 w/o gtksink it + // needs to be translated + if (aToolkit == "gtk3") + { + if (pParentWindow) + { + Point aPoint = pParentWindow->GetPosPixel(); + maArea.X = aPoint.getX(); + maArea.Y = aPoint.getY(); + } + } + GstElement *pVideosink = nullptr; #if defined(ENABLE_GTKSINK) pVideosink = (aToolkit == "gtk3") ? diff --git a/avmedia/source/gstreamer/gstplayer.hxx b/avmedia/source/gstreamer/gstplayer.hxx index 6db9bc586575..c57f60a7802f 100644 --- a/avmedia/source/gstreamer/gstplayer.hxx +++ b/avmedia/source/gstreamer/gstplayer.hxx @@ -102,6 +102,8 @@ private: int mnWidth; int mnHeight; + css::awt::Rectangle maArea; // Area of the player window. + guint mnWatchID; bool mbWatchID; |