summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorIvan Wheeler2024-03-07 19:55:18 +0300
committerIvan Wheeler2024-03-07 20:10:10 +0300
commit79ec37f3ba4ebe645287d4281ac6ecb6079fa85e (patch)
treea8fbdb53d2d37bc42086bcb687623b6947dbc238
downloadaur-phonon-qt6-gstreamer-git.tar.gz
Patch phonon-gstreamer to work with Plasma 6
-rw-r--r--.SRCINFO27
-rw-r--r--.gitignore2
-rw-r--r--PKGBUILD49
-rw-r--r--qt6_build_patch.patch291
4 files changed, 369 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO
new file mode 100644
index 000000000000..dc9ec9a1d013
--- /dev/null
+++ b/.SRCINFO
@@ -0,0 +1,27 @@
+pkgbase = phonon-qt6-gstreamer-git
+ pkgdesc = Phonon GStreamer backend for Qt6
+ pkgver = 4.10.0_r3316.g2bfadef4
+ pkgrel = 1
+ url = https://community.kde.org/Phonon
+ arch = x86_64
+ license = LGPL
+ makedepends = extra-cmake-modules
+ makedepends = phonon-qt6
+ makedepends = qt6-tools
+ depends = gst-plugins-base
+ depends = phonon-qt6
+ optdepends = pulseaudio: PulseAudio support
+ optdepends = gst-plugins-good: PulseAudio support and good codecs
+ optdepends = gst-plugins-bad: additional codecs
+ optdepends = gst-plugins-ugly: additional codecs
+ optdepends = gst-libav: libav codec
+ provides = phonon-qt6-gstreamer
+ provides = phonon-qt6-backend
+ provides = phonon-qt6-backend-git
+ conflicts = phonon-qt6-gstreamer
+ source = git+https://github.com/KDE/phonon-gstreamer.git
+ source = qt6_build_patch.patch
+ sha256sums = SKIP
+ sha256sums = 3da6e5739f36f829141edc3d4c814389a425d1eecd597f1e7e63708356b8f148
+
+pkgname = phonon-qt6-gstreamer-git
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 000000000000..d6b7ef32c847
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
diff --git a/PKGBUILD b/PKGBUILD
new file mode 100644
index 000000000000..8fc06b23ac48
--- /dev/null
+++ b/PKGBUILD
@@ -0,0 +1,49 @@
+# Based on AUR PKGBUILDS for phonon-gstreamer-git, phonon-qt6-git
+# and phonon-qt6-mpv-git (all respective contributors apply herein)
+# Maintainer: Ivan Wheeler <ivanwheeler90 at gmail dot com>
+
+pkgname=phonon-qt6-gstreamer-git
+pkgver=4.10.0_r3316.g2bfadef4
+pkgrel=1
+arch=($CARCH)
+pkgdesc='Phonon GStreamer backend for Qt6'
+url='https://community.kde.org/Phonon'
+license=(LGPL)
+depends=(gst-plugins-base phonon-qt6)
+optdepends=('pulseaudio: PulseAudio support'
+ 'gst-plugins-good: PulseAudio support and good codecs'
+ 'gst-plugins-bad: additional codecs'
+ 'gst-plugins-ugly: additional codecs'
+ 'gst-libav: libav codec')
+makedepends=(extra-cmake-modules phonon-qt6 qt6-tools)
+conflicts=(${pkgname%-git})
+provides=(${pkgname%-git} phonon-qt6-backend phonon-qt6-backend-git)
+source=("git+https://github.com/KDE/phonon-gstreamer.git"
+ qt6_build_patch.patch)
+sha256sums=('SKIP'
+ '3da6e5739f36f829141edc3d4c814389a425d1eecd597f1e7e63708356b8f148')
+
+pkgver() {
+ cd phonon-gstreamer
+ _ver="$(grep -m1 'project(PhononGStreamer VERSION' CMakeLists.txt | cut -d ' ' -f3 | tr -d ')' | tr - .)"
+ echo "${_ver}_r$(git rev-list --count HEAD).g$(git rev-parse --short HEAD)"
+}
+
+prepare() {
+ patch -d phonon-gstreamer -p1 < qt6_build_patch.patch # Fix building on Qt6
+}
+
+build() {
+ cmake -B build -S phonon-gstreamer \
+ -DQT_MAJOR_VERSION=6 \
+ -DBUILD_TESTING=OFF
+ cmake --build build
+}
+
+package() {
+ DESTDIR="$pkgdir" cmake --install build
+ # phonon-gstreamer-qt5 contains this files
+ # User may have it installed for compatibility with Qt5 apps
+ # Remove our copy to avoid file conflicts
+ rm -r "$pkgdir"/usr/share
+}
diff --git a/qt6_build_patch.patch b/qt6_build_patch.patch
new file mode 100644
index 000000000000..463e2d22dc84
--- /dev/null
+++ b/qt6_build_patch.patch
@@ -0,0 +1,291 @@
+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<QVariant> 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 <QtCore/QString>
++#include <QIODevice>
+
+ 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 <gst/gst.h>
+
+ #include <QtCore/QSettings>
+-#if QT_VERSION > QT_VERSION_CHECK(5, 0, 0) && defined(BUILD_X11RENDERER)
++#include <QGuiApplication>
++
++#if defined(BUILD_X11RENDERER)
++# if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
+ #include <QtX11Extras/QX11Info>
++# else
++#include <qpa/qplatformnativeinterface.h>
++# 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<QNativeInterface::QX11Application>()) {
+ #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 <QtOpenGL/QGLWidget>
++#include <QOpenGLWidget>
++#include <QOpenGLContext>
+
+ #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 <QtCore/QByteRef>
+ #include <QtCore/QEvent>
+ #include <QtCore/QFile>
+ #include <QtCore/QFileInfo>
+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);