diff options
-rw-r--r-- | avmedia/Library_avmediagst.mk | 10 | ||||
-rw-r--r-- | avmedia/source/gstreamer/gstplayer.cxx | 34 | ||||
-rw-r--r-- | vcl/qt5/Qt5Frame.cxx | 2 | ||||
-rw-r--r-- | vcl/qt5/Qt5Object.cxx | 2 |
4 files changed, 42 insertions, 6 deletions
diff --git a/avmedia/Library_avmediagst.mk b/avmedia/Library_avmediagst.mk index cd651c82e60b..027123911e87 100644 --- a/avmedia/Library_avmediagst.mk +++ b/avmedia/Library_avmediagst.mk @@ -31,6 +31,16 @@ $(eval $(call gb_Library_add_libs,avmediagst,\ )) endif +ifneq ($(ENABLE_QT5),) +$(eval $(call gb_Library_add_cxxflags,avmediagst,\ + $$(QT5_CFLAGS) \ +)) + +$(eval $(call gb_Library_add_libs,avmediagst,\ + $(QT5_LIBS) \ +)) +endif + $(eval $(call gb_Library_use_external,avmediagst,boost_headers)) $(eval $(call gb_Library_use_sdk_api,avmediagst)) diff --git a/avmedia/source/gstreamer/gstplayer.cxx b/avmedia/source/gstreamer/gstplayer.cxx index 1fd480504236..3f727ed8e7e4 100644 --- a/avmedia/source/gstreamer/gstplayer.cxx +++ b/avmedia/source/gstreamer/gstplayer.cxx @@ -51,6 +51,10 @@ # define AVMEDIA_GST_PLAYER_SERVICENAME "com.sun.star.media.Player_GStreamer" #endif +#if ENABLE_QT5 && ! defined (AVMEDIA_GST_0_10) +#include <QtWidgets/QWidget> +#endif + #include <gst/pbutils/missing-plugins.h> #include <gst/pbutils/pbutils.h> @@ -1009,10 +1013,32 @@ uno::Reference< ::media::XPlayerWindow > SAL_CALL Player::createPlayerWindow( co else #endif { - if (aPlatform == "wayland") - pVideosink = gst_element_factory_make("waylandsink", "video-output"); - else - pVideosink = gst_element_factory_make("autovideosink", "video-output"); +#if ENABLE_QT5 && ! defined (AVMEDIA_GST_0_10) + // try to use qwidget5videosink for qt5 on Wayland, which requires the Qt5 packages for QtGStreamer to be installed + if (aToolkit == "qt5" && aPlatform == "wayland") + { + pVideosink = gst_element_factory_make("qwidget5videosink", "qwidget5videosink"); + if (pVideosink) { + QWidget* pQWidget = static_cast<QWidget*>(pEnvData->pWidget); + g_object_set(G_OBJECT(pVideosink), "widget", pQWidget, nullptr); + } + else + { + SAL_WARN("avmedia.gstreamer", "Couldn't initialize qwidget5videosink." + " Video playback might not work as expected." + " Please install Qt5 packages for QtGStreamer."); + // with no videosink explicitly set, GStreamer will open it's own (misplaced) window(s) to display video + } + } +#endif + if (!pVideosink) + { + if (aPlatform == "wayland") + pVideosink = gst_element_factory_make("waylandsink", "video-output"); + else + pVideosink = gst_element_factory_make("autovideosink", "video-output"); + } + if (!pVideosink) { xRet.clear(); diff --git a/vcl/qt5/Qt5Frame.cxx b/vcl/qt5/Qt5Frame.cxx index da3dc665379e..f17ae82c819e 100644 --- a/vcl/qt5/Qt5Frame.cxx +++ b/vcl/qt5/Qt5Frame.cxx @@ -185,7 +185,7 @@ Qt5Frame::Qt5Frame(Qt5Frame* pParent, SalFrameStyleFlags nStyle, bool bUseCairo) m_aSystemData.aShellWindow = reinterpret_cast<sal_IntPtr>(this); //m_aSystemData.pSalFrame = this; - //m_aSystemData.pWidget = m_pQWidget; + m_aSystemData.pWidget = m_pQWidget; //m_aSystemData.nScreen = m_nXScreen.getXScreen(); m_aSystemData.pToolkit = "qt5"; if (!bWayland) diff --git a/vcl/qt5/Qt5Object.cxx b/vcl/qt5/Qt5Object.cxx index a0afe811a40c..961622eeb893 100644 --- a/vcl/qt5/Qt5Object.cxx +++ b/vcl/qt5/Qt5Object.cxx @@ -44,7 +44,7 @@ Qt5Object::Qt5Object(Qt5Frame* pParent, bool bShow) m_aSystemData.nSize = sizeof(SystemEnvData); m_aSystemData.aShellWindow = reinterpret_cast<sal_IntPtr>(this); //m_aSystemData.pSalFrame = this; - //m_aSystemData.pWidget = m_pQWidget; + m_aSystemData.pWidget = m_pQWidget; //m_aSystemData.nScreen = m_nXScreen.getXScreen(); m_aSystemData.pToolkit = "qt5"; m_aSystemData.pPlatformName = "xcb"; |