summaryrefslogtreecommitdiff
path: root/avmedia
diff options
context:
space:
mode:
authorMark Hung <marklh9@gmail.com>2019-02-18 21:51:57 +0800
committerMark Hung <marklh9@gmail.com>2019-05-31 01:16:22 +0200
commit474bef8e06ee514c4ff751b64ef395a54987bd7d (patch)
tree64ab46fe1e45a23cbc683a0b8e108ce732a50b63 /avmedia
parentbaf574312c68df5674d78066f7bb468481caad40 (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.cxx26
-rw-r--r--avmedia/source/gstreamer/gstplayer.hxx2
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;