diff options
author | Ivan Wheeler | 2024-03-07 19:55:18 +0300 |
---|---|---|
committer | Ivan Wheeler | 2024-03-07 20:10:10 +0300 |
commit | 79ec37f3ba4ebe645287d4281ac6ecb6079fa85e (patch) | |
tree | a8fbdb53d2d37bc42086bcb687623b6947dbc238 | |
download | aur-phonon-qt6-gstreamer-git.tar.gz |
Patch phonon-gstreamer to work with Plasma 6
-rw-r--r-- | .SRCINFO | 27 | ||||
-rw-r--r-- | .gitignore | 2 | ||||
-rw-r--r-- | PKGBUILD | 49 | ||||
-rw-r--r-- | qt6_build_patch.patch | 291 |
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); |