[Libreoffice-commits] core.git: Branch 'libreoffice-6-2' - avmedia/source

Mark Hung (via logerrit) logerrit at kemper.freedesktop.org
Thu May 30 23:17:18 UTC 2019


 avmedia/source/gstreamer/gstplayer.cxx |   26 +++++++++++++++++++++++++-
 avmedia/source/gstreamer/gstplayer.hxx |    2 ++
 2 files changed, 27 insertions(+), 1 deletion(-)

New commits:
commit 474bef8e06ee514c4ff751b64ef395a54987bd7d
Author:     Mark Hung <marklh9 at gmail.com>
AuthorDate: Mon Feb 18 21:51:57 2019 +0800
Commit:     Mark Hung <marklh9 at gmail.com>
CommitDate: Fri May 31 01:16:22 2019 +0200

    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 at redhat.com>
    Tested-by: Caolán McNamara <caolanm at 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 at gmail.com>

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;
 


More information about the Libreoffice-commits mailing list