diff --git a/CMakeLists.txt b/CMakeLists.txt index e308a467..acb3157e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -62,7 +62,8 @@ if (QT_MAJOR_VERSION STREQUAL "5") PURPOSE "Qt5X11Extras is needed for the x11renderer" URL "http://doc.qt.io/qt-5/qtx11extras-index.html") elseif (QT_MAJOR_VERSION STREQUAL "6") - find_package(Qt${QT_MAJOR_VERSION} ${REQUIRED_QT_VERSION} CONFIG REQUIRED Gui) # qtx11extras_p.h + find_package(Qt${QT_MAJOR_VERSION} ${REQUIRED_QT_VERSION} CONFIG REQUIRED Gui OpenGLWidgets) + find_package(Qt${QT_MAJOR_VERSION}XcbQpaPrivate) # qtx11extras_p.h endif() include(ECMPoQmTools) diff --git a/cmake/FindGObject.cmake b/cmake/FindGObject.cmake index af0c9f73..de9e0824 100644 --- a/cmake/FindGObject.cmake +++ b/cmake/FindGObject.cmake @@ -47,6 +47,6 @@ FIND_LIBRARY(_GLibs NAMES glib-2.0 SET( GOBJECT_LIBRARIES ${_GObjectLibs} ${_GModuleLibs} ${_GThreadLibs} ${_GLibs} ) INCLUDE(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(GOBJECT DEFAULT_MSG GOBJECT_LIBRARIES GOBJECT_INCLUDE_DIR) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(GObject DEFAULT_MSG GOBJECT_LIBRARIES GOBJECT_INCLUDE_DIR) MARK_AS_ADVANCED(GOBJECT_INCLUDE_DIR _GObjectLibs _GModuleLibs _GThreadLibs _GLibs) diff --git a/gstreamer/CMakeLists.txt b/gstreamer/CMakeLists.txt index 5c7ae930..86c45a3f 100644 --- a/gstreamer/CMakeLists.txt +++ b/gstreamer/CMakeLists.txt @@ -78,7 +78,7 @@ if (OPENGL_FOUND) list(APPEND phonon_gstreamer_SRCS glrenderer.cpp) endif () -if (Qt5X11Extras_FOUND) +if (Qt5X11Extras_FOUND OR Qt6XcbQpaPrivate_FOUND) set(BUILD_X11RENDERER TRUE) endif() @@ -116,7 +116,10 @@ if (QT_MAJOR_VERSION STREQUAL "5") target_link_libraries(phonon_gstreamer Qt::X11Extras) endif() else() - target_link_libraries(phonon_gstreamer Qt6::GuiPrivate) + target_link_libraries(phonon_gstreamer Qt::GuiPrivate Qt::OpenGLWidgets) + if(Qt6XcbQpaPrivate_FOUND) + target_link_libraries(phonon_gstreamer Qt::XcbQpaPrivate) + endif() endif() if(USE_INSTALL_PLUGIN) diff --git a/gstreamer/debug.cpp b/gstreamer/debug.cpp index 2f7421fc..e43da64b 100644 --- a/gstreamer/debug.cpp +++ b/gstreamer/debug.cpp @@ -36,11 +36,9 @@ #define DEBUG_INDENT_OBJECTNAME QLatin1String("Debug_Indent_object") +QRecursiveMutex Debug::mutex; -QMutex Phonon::Gstreamer::Debug::mutex( QMutex::Recursive ); - -using namespace Phonon::Gstreamer; -using namespace Phonon::Gstreamer::Debug; +using namespace Debug; static bool s_debugColorsEnabled = true; static DebugLevel s_debugLevel = DEBUG_NONE; diff --git a/gstreamer/debug.h b/gstreamer/debug.h index 213bf719..687e4de0 100644 --- a/gstreamer/debug.h +++ b/gstreamer/debug.h @@ -42,10 +42,6 @@ #define __PRETTY_FUNCTION__ __FILE__ #endif -namespace Phonon { - -namespace Gstreamer { - /** * @namespace Debug * @short kdebug with indentation functionality and convenience macros @@ -77,7 +73,7 @@ namespace Gstreamer { */ namespace Debug { - extern QMutex mutex; + extern QRecursiveMutex mutex; enum DebugLevel { DEBUG_INFO = 0, @@ -151,7 +147,7 @@ namespace Debug class Block { public: - Block( const char *name ); + explicit Block( const char *name ); ~Block(); private: @@ -201,8 +197,4 @@ namespace Debug typedef QList List; } -} // namespace Gstreamer - -} // namespace Phonon - #endif diff --git a/gstreamer/debug_p.h b/gstreamer/debug_p.h index 676df7c5..48096578 100644 --- a/gstreamer/debug_p.h +++ b/gstreamer/debug_p.h @@ -22,6 +22,7 @@ #include "debug.h" #include +#include class IndentPrivate : public QObject diff --git a/gstreamer/devicemanager.cpp b/gstreamer/devicemanager.cpp index 2735f22b..3ce305d0 100644 --- a/gstreamer/devicemanager.cpp +++ b/gstreamer/devicemanager.cpp @@ -32,8 +32,14 @@ #include #include -#if QT_VERSION > QT_VERSION_CHECK(5, 0, 0) && defined(BUILD_X11RENDERER) +#include + +#if defined(BUILD_X11RENDERER) +# if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) #include +# else +#include +# endif #endif /* @@ -359,10 +365,10 @@ AbstractRenderer *DeviceManager::createVideoRenderer(VideoWidget *parent) return new WidgetRenderer(parent); } #if defined(BUILD_X11RENDERER) -#if QT_VERSION > QT_VERSION_CHECK(5, 0, 0) +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) else if (QX11Info::isPlatformX11()) { #else - else { + else if (nullptr != qApp->nativeInterface()) { #endif if (m_videoSinkWidget == "xwindow") { return new X11Renderer(parent); diff --git a/gstreamer/effect.cpp b/gstreamer/effect.cpp index 913afddd..7424812e 100644 --- a/gstreamer/effect.cpp +++ b/gstreamer/effect.cpp @@ -101,7 +101,7 @@ void Effect::setupEffectParams() case G_TYPE_STRING: m_parameterList.append(Phonon::EffectParameter(i, propertyName, { }, //hints - G_PARAM_SPEC_STRING(param)->default_value, + QString::fromUtf8(G_PARAM_SPEC_STRING(param)->default_value), 0, 0)); break; diff --git a/gstreamer/glrenderer.cpp b/gstreamer/glrenderer.cpp index ca241324..4c718b01 100644 --- a/gstreamer/glrenderer.cpp +++ b/gstreamer/glrenderer.cpp @@ -76,9 +76,7 @@ GLRenderer::GLRenderer(VideoWidget* videoWidget) : , m_glWindow(0) { debug() << "Creating OpenGL renderer"; - QGLFormat format = QGLFormat::defaultFormat(); - format.setSwapInterval(1); // Enable vertical sync on draw to avoid tearing - m_glWindow = new GLRenderWidgetImplementation(videoWidget, format); + m_glWindow = new GLRenderWidgetImplementation(videoWidget); GstElement *videoSink = m_glWindow->createVideoSink(); if (videoSink) { @@ -218,8 +216,8 @@ const char *const yuvToRgb = "DP3 result.color.z, R1, c[1].xwyw;" "END"; -GLRenderWidgetImplementation::GLRenderWidgetImplementation(VideoWidget*videoWidget, const QGLFormat &format) : - QGLWidget(format, videoWidget) +GLRenderWidgetImplementation::GLRenderWidgetImplementation(VideoWidget*videoWidget) : + QOpenGLWidget(videoWidget) , m_program(0) , m_yuvSupport(false) , m_videoWidget(videoWidget) @@ -227,11 +225,11 @@ GLRenderWidgetImplementation::GLRenderWidgetImplementation(VideoWidget*videoWidg makeCurrent(); glGenTextures(3, m_texture); - glProgramStringARB = (_glProgramStringARB) context()->getProcAddress(QLatin1String("glProgramStringARB")); - glBindProgramARB = (_glBindProgramARB) context()->getProcAddress(QLatin1String("glBindProgramARB")); - glDeleteProgramsARB = (_glDeleteProgramsARB) context()->getProcAddress(QLatin1String("glDeleteProgramsARB")); - glGenProgramsARB = (_glGenProgramsARB) context()->getProcAddress(QLatin1String("glGenProgramsARB")); - glActiveTexture = (_glActiveTexture) context()->getProcAddress(QLatin1String("glActiveTexture")); + glProgramStringARB = (_glProgramStringARB) context()->getProcAddress("glProgramStringARB"); + glBindProgramARB = (_glBindProgramARB) context()->getProcAddress("glBindProgramARB"); + glDeleteProgramsARB = (_glDeleteProgramsARB) context()->getProcAddress("glDeleteProgramsARB"); + glGenProgramsARB = (_glGenProgramsARB) context()->getProcAddress("glGenProgramsARB"); + glActiveTexture = (_glActiveTexture) context()->getProcAddress("glActiveTexture"); m_hasPrograms = glProgramStringARB && glBindProgramARB && glDeleteProgramsARB && glGenProgramsARB && glActiveTexture; @@ -252,7 +250,7 @@ GLRenderWidgetImplementation::GLRenderWidgetImplementation(VideoWidget*videoWidg } QPalette palette; - palette.setColor(QPalette::Background, Qt::black); + palette.setColor(backgroundRole(), Qt::black); setPalette(palette); setAutoFillBackground(true); // Videowidget always have this property to allow hiding the mouse cursor diff --git a/gstreamer/glrenderer.h b/gstreamer/glrenderer.h index c4416927..813b0186 100644 --- a/gstreamer/glrenderer.h +++ b/gstreamer/glrenderer.h @@ -22,7 +22,8 @@ #ifndef QT_NO_OPENGL -#include +#include +#include #ifndef QT_OPENGL_ES class QString; @@ -49,7 +50,7 @@ private: GLRenderWidgetImplementation *m_glWindow; }; -class GLRenderWidgetImplementation : public QGLWidget +class GLRenderWidgetImplementation : public QOpenGLWidget { Q_OBJECT @@ -60,7 +61,7 @@ class GLRenderWidgetImplementation : public QGLWidget typedef void (*_glGenProgramsARB) (GLsizei, GLuint *); typedef void (*_glActiveTexture) (GLenum); public: - GLRenderWidgetImplementation(VideoWidget *control, const QGLFormat &format); + GLRenderWidgetImplementation(VideoWidget *control); void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; GstElement *createVideoSink(); void updateTexture(const QByteArray &array, int width, int height); diff --git a/gstreamer/mediaobject.cpp b/gstreamer/mediaobject.cpp index ee490d56..4e57b164 100644 --- a/gstreamer/mediaobject.cpp +++ b/gstreamer/mediaobject.cpp @@ -30,7 +30,6 @@ #include "gsthelper.h" #include "pipeline.h" -#include #include #include #include diff --git a/gstreamer/widgetrenderer.cpp b/gstreamer/widgetrenderer.cpp index 751da125..3fdb1dd2 100644 --- a/gstreamer/widgetrenderer.cpp +++ b/gstreamer/widgetrenderer.cpp @@ -80,7 +80,7 @@ WidgetRenderer::WidgetRenderer(VideoWidget *videoWidget_) // Clear the background with black by default QPalette palette; - palette.setColor(QPalette::Background, Qt::black); + palette.setColor(videoWidget()->backgroundRole(), Qt::black); videoWidget()->setPalette(palette); videoWidget()->setAutoFillBackground(true); videoWidget()->setAttribute(Qt::WA_NoSystemBackground, false); diff --git a/gstreamer/x11renderer.cpp b/gstreamer/x11renderer.cpp index 32de24e7..561eff7a 100644 --- a/gstreamer/x11renderer.cpp +++ b/gstreamer/x11renderer.cpp @@ -72,7 +72,7 @@ X11Renderer::X11Renderer(VideoWidget *videoWidget) m_renderWidget = new OverlayWidget(videoWidget, this); debug() << "Creating X11 overlay renderer"; QPalette palette; - palette.setColor(QPalette::Background, Qt::black); + palette.setColor(videoWidget->backgroundRole(), Qt::black); videoWidget->setPalette(palette); videoWidget->setAutoFillBackground(true); m_renderWidget->setMouseTracking(true);