summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--avmedia/Library_avmediagst.mk10
-rw-r--r--avmedia/source/gstreamer/gstplayer.cxx34
-rw-r--r--vcl/qt5/Qt5Frame.cxx2
-rw-r--r--vcl/qt5/Qt5Object.cxx2
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";