summaryrefslogtreecommitdiffstats
path: root/avmedia
diff options
context:
space:
mode:
Diffstat (limited to 'avmedia')
-rw-r--r--avmedia/Library_avmediagst.mk10
-rw-r--r--avmedia/source/gstreamer/gstplayer.cxx34
2 files changed, 40 insertions, 4 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();