diff options
-rw-r--r-- | .SRCINFO | 44 | ||||
-rw-r--r-- | PKGBUILD | 78 | ||||
-rw-r--r-- | mpv.patch | 164 | ||||
-rw-r--r-- | plex-media-player.desktop | 7 | ||||
-rw-r--r-- | plex-wayland-hwdec.patch | 63 | ||||
-rw-r--r-- | plex-wayland.patch | 53 | ||||
-rw-r--r-- | plex.patch | 12 |
7 files changed, 358 insertions, 63 deletions
@@ -1,11 +1,12 @@ pkgbase = plex-media-player pkgdesc = Next generation Plex Desktop Client - pkgver = 2.33.1 - pkgrel = 1 + pkgver = 2.58.1 + pkgrel = 3 url = https://github.com/plexinc/plex-media-player arch = i686 arch = x86_64 arch = armv7h + arch = aarch64 license = GPL makedepends = cmake depends = mpv @@ -16,22 +17,27 @@ pkgbase = plex-media-player depends = qt5-quickcontrols depends = p8-platform depends = protobuf - noextract = web-client-desktop-3.83.2-ecd072f.tar.xz - noextract = web-client-tv-3.98.0-f53ed3c.tar.xz - source = plex-media-player-2.33.1.979-c4087ea7.tar.gz::https://github.com/plexinc/plex-media-player/archive/v2.33.1.979-c4087ea7.tar.gz - source = buildid-121-f53ed3cecd072f.cmake::https://artifacts.plex.tv/web-client-pmp/121-f53ed3cecd072f/buildid.cmake - source = https://artifacts.plex.tv/web-client-pmp/121-f53ed3cecd072f/web-client-desktop-3.83.2-ecd072f.tar.xz - source = https://artifacts.plex.tv/web-client-pmp/121-f53ed3cecd072f/web-client-desktop-3.83.2-ecd072f.tar.xz.sha1 - source = https://artifacts.plex.tv/web-client-pmp/121-f53ed3cecd072f/web-client-tv-3.98.0-f53ed3c.tar.xz - source = https://artifacts.plex.tv/web-client-pmp/121-f53ed3cecd072f/web-client-tv-3.98.0-f53ed3c.tar.xz.sha1 - source = plex-media-player.desktop - sha512sums = 78c9c62d89ad45343474cbd1055b7623df87f9272f0eb7a88df285000523c2117564bc82e64a055c52ac0818280ff1b5264dfb216fbb8b5809a822034c353185 - sha512sums = 7c032be3ba0d10f7e82fc59e6bfd1e645046a9efdc6682544756aff5c80d22d682337781f739f6c855edf1c537824265197becd25a5ba28a8fb2f18e40e3ac20 - sha512sums = 8f94b48803c3bfc828ca9f5fab9dec24c614852e8f0923585ad3f62cc15d9ce3e05c74a07d780e382b41450eb216e0ef137004245ee7436f61a0322077b55626 - sha512sums = e4304d3de9d2274361b751aecd56938e7afbd5a5e9bb99b66c2161af1023d061d23e126b0c6f7b454e0a6017d0cf3b4ba71dc231a13d7f82d59f83180ac0bf68 - sha512sums = 7be9598c9c0ef2ec2910acb73efc579aa7df607b9c422b26e56179ec030df7e94a75feaaf831f7e7f5b0920a4b4cde18ff061604591226fbf3f54f639396ecb7 - sha512sums = 13a3a259fa792a5603d4274a8ae5918e6823ccdfdbd25d9b84c21f3d7d34d815da1ccf1907d75f24e4c18ebbfdb2b4acb776c3e53e898ae26b4b88d8c43d9191 - sha512sums = d3dbd66be744f497e095eb118ea28180769c74b3e8a8d3554b1570a224bdcd66c0c1416a3baaa72e6fff5a63beda30d3ce953cd886a2f313a655fee5d8f26019 + depends = python + conflicts = jellyfin-media-player + noextract = web-client-desktop-183-045db5be50e175-4.29.2-e50e175.tar.xz + noextract = web-client-tv-183-045db5be50e175-4.29.6-045db5b.tar.xz + source = plex-media-player-2.58.1-ae73e074.tar.gz::https://github.com/plexinc/plex-media-player/archive/v2.58.1-ae73e074.tar.gz + source = buildid-183-045db5be50e175.cmake::https://artifacts.plex.tv/web-client-pmp/183-045db5be50e175/buildid.cmake + source = web-client-desktop-183-045db5be50e175-4.29.2-e50e175.tar.xz::https://artifacts.plex.tv/web-client-pmp/183-045db5be50e175/web-client-desktop-4.29.2-e50e175.tar.xz + source = web-client-desktop-183-045db5be50e175-4.29.2-e50e175.tar.xz.sha1::https://artifacts.plex.tv/web-client-pmp/183-045db5be50e175/web-client-desktop-4.29.2-e50e175.tar.xz.sha1 + source = web-client-tv-183-045db5be50e175-4.29.6-045db5b.tar.xz::https://artifacts.plex.tv/web-client-pmp/183-045db5be50e175/web-client-tv-4.29.6-045db5b.tar.xz + source = web-client-tv-183-045db5be50e175-4.29.6-045db5b.tar.xz.sha1::https://artifacts.plex.tv/web-client-pmp/183-045db5be50e175/web-client-tv-4.29.6-045db5b.tar.xz.sha1 + source = plex.patch + source = plex-wayland.patch + source = plex-wayland-hwdec.patch + sha512sums = 86fc3cd4c37700a1881ccd2aa43c0aa5e7ff20eacc643e3babef6acfab4b355903b69988b9d8821c87269fc5d6bdc8803e115ef867f5f388a1e9b6cad8fd321e + sha512sums = 6c3fa0d2fa26da3c8ed47de5385f0f2fb1af0409f4a58aef5bc2c2cf75741dcbddd4b496ca5b9a55c4ce35e09ed076d411c3e9c330de1d99761aa0ebc3fae6bc + sha512sums = 0c09ebf57cd39e8e4dae449e3882725686214e0bed07e3dac25eae579ebdc3a136e51bb2272aaca6a5b8e317b1ccbe94231eb214ddf11cbfb14307a0e7f3e3e0 + sha512sums = 3f2de45e29303445bca976d61e343acabc29edbca0c9dcddeff9134d75c317a8f678a122e6c429fea0801b49fe40d2b30a4f44cd8fdcc040b3c9ab5b15f04d0e + sha512sums = d60cc01f6b9abf579b3fa2e5b5c9b19e71a986578b0ca46173572324fb54573c97f09ac0ef1654a0b04d68eee20ab3d81ab19a85a761ba638b2b543548ff94ac + sha512sums = 442c2e5a31eed30167009bdaf263c66bea482d4ad03e168c9d9eb5e9f4e40f771dee9bc6913d6be46f7d86feb961603f172bb6497fac28c4f5d36a1f05d0ec66 + sha512sums = SKIP + sha512sums = SKIP + sha512sums = SKIP pkgname = plex-media-player - @@ -1,66 +1,70 @@ -# Maintainer: Daniel Egeberg <daniel.egeberg@gmail.com> +# Maintainer: Aaron Schmocker <>, Lukas Grimm <ombre@ombre.ch> +# Contributor: Daniel Egeberg <daniel.egeberg@gmail.com> # Contributor: Sven-Hendrik Haase <sh@lutzhaase.com> # Contributor: TingPing <tingping@tingping.se> - pkgname=plex-media-player -pkgver=2.33.1 -_gitrev=979 -_gitver=c4087ea7 -_fullver="$pkgver.$_gitrev-$_gitver" +pkgver=2.58.1 +_gitrev= +_gitver=ae73e074 +_fullver="$pkgver-$_gitver" _fullname="$pkgname-$_fullver" -_web_buildid="121-f53ed3cecd072f" -_web_desktop_ver="3.83.2-ecd072f" -_web_tv_ver="3.98.0-f53ed3c" -pkgrel=1 +_web_buildid=183-045db5be50e175 +_web_desktop_ver=4.29.2-e50e175 +_web_tv_ver=4.29.6-045db5b +pkgrel=3 pkgdesc='Next generation Plex Desktop Client' -arch=('i686' 'x86_64' 'armv7h') +arch=('i686' 'x86_64' 'armv7h' 'aarch64') license=('GPL') url='https://github.com/plexinc/plex-media-player' -depends=('mpv' 'qt5-webengine' 'libcec' 'sdl2' 'qt5-x11extras' 'qt5-quickcontrols' 'p8-platform' 'protobuf') +depends=('mpv' 'qt5-webengine' 'libcec' 'sdl2' 'qt5-x11extras' 'qt5-quickcontrols' 'p8-platform' 'protobuf' 'python') makedepends=('cmake') +conflicts=('jellyfin-media-player') source=("$_fullname.tar.gz::https://github.com/plexinc/plex-media-player/archive/v${_fullver}.tar.gz" "buildid-${_web_buildid}.cmake::https://artifacts.plex.tv/web-client-pmp/${_web_buildid}/buildid.cmake" - "https://artifacts.plex.tv/web-client-pmp/${_web_buildid}/web-client-desktop-${_web_desktop_ver}.tar.xz"{,.sha1} - "https://artifacts.plex.tv/web-client-pmp/${_web_buildid}/web-client-tv-${_web_tv_ver}.tar.xz"{,.sha1} - 'plex-media-player.desktop') -noextract=("web-client-desktop-${_web_desktop_ver}.tar.xz" - "web-client-tv-${_web_tv_ver}.tar.xz") -sha512sums=('78c9c62d89ad45343474cbd1055b7623df87f9272f0eb7a88df285000523c2117564bc82e64a055c52ac0818280ff1b5264dfb216fbb8b5809a822034c353185' - '7c032be3ba0d10f7e82fc59e6bfd1e645046a9efdc6682544756aff5c80d22d682337781f739f6c855edf1c537824265197becd25a5ba28a8fb2f18e40e3ac20' - '8f94b48803c3bfc828ca9f5fab9dec24c614852e8f0923585ad3f62cc15d9ce3e05c74a07d780e382b41450eb216e0ef137004245ee7436f61a0322077b55626' - 'e4304d3de9d2274361b751aecd56938e7afbd5a5e9bb99b66c2161af1023d061d23e126b0c6f7b454e0a6017d0cf3b4ba71dc231a13d7f82d59f83180ac0bf68' - '7be9598c9c0ef2ec2910acb73efc579aa7df607b9c422b26e56179ec030df7e94a75feaaf831f7e7f5b0920a4b4cde18ff061604591226fbf3f54f639396ecb7' - '13a3a259fa792a5603d4274a8ae5918e6823ccdfdbd25d9b84c21f3d7d34d815da1ccf1907d75f24e4c18ebbfdb2b4acb776c3e53e898ae26b4b88d8c43d9191' - 'd3dbd66be744f497e095eb118ea28180769c74b3e8a8d3554b1570a224bdcd66c0c1416a3baaa72e6fff5a63beda30d3ce953cd886a2f313a655fee5d8f26019') - + "web-client-desktop-${_web_buildid}-${_web_desktop_ver}.tar.xz::https://artifacts.plex.tv/web-client-pmp/${_web_buildid}/web-client-desktop-${_web_desktop_ver}.tar.xz" + "web-client-desktop-${_web_buildid}-${_web_desktop_ver}.tar.xz.sha1::https://artifacts.plex.tv/web-client-pmp/${_web_buildid}/web-client-desktop-${_web_desktop_ver}.tar.xz.sha1" + "web-client-tv-${_web_buildid}-${_web_tv_ver}.tar.xz::https://artifacts.plex.tv/web-client-pmp/${_web_buildid}/web-client-tv-${_web_tv_ver}.tar.xz" + "web-client-tv-${_web_buildid}-${_web_tv_ver}.tar.xz.sha1::https://artifacts.plex.tv/web-client-pmp/${_web_buildid}/web-client-tv-${_web_tv_ver}.tar.xz.sha1" + 'plex.patch' + 'plex-wayland.patch' + 'plex-wayland-hwdec.patch') +noextract=("web-client-desktop-${_web_buildid}-${_web_desktop_ver}.tar.xz" + "web-client-tv-${_web_buildid}-${_web_tv_ver}.tar.xz") +sha512sums=('86fc3cd4c37700a1881ccd2aa43c0aa5e7ff20eacc643e3babef6acfab4b355903b69988b9d8821c87269fc5d6bdc8803e115ef867f5f388a1e9b6cad8fd321e' + '6c3fa0d2fa26da3c8ed47de5385f0f2fb1af0409f4a58aef5bc2c2cf75741dcbddd4b496ca5b9a55c4ce35e09ed076d411c3e9c330de1d99761aa0ebc3fae6bc' + '0c09ebf57cd39e8e4dae449e3882725686214e0bed07e3dac25eae579ebdc3a136e51bb2272aaca6a5b8e317b1ccbe94231eb214ddf11cbfb14307a0e7f3e3e0' + '3f2de45e29303445bca976d61e343acabc29edbca0c9dcddeff9134d75c317a8f678a122e6c429fea0801b49fe40d2b30a4f44cd8fdcc040b3c9ab5b15f04d0e' + 'd60cc01f6b9abf579b3fa2e5b5c9b19e71a986578b0ca46173572324fb54573c97f09ac0ef1654a0b04d68eee20ab3d81ab19a85a761ba638b2b543548ff94ac' + '442c2e5a31eed30167009bdaf263c66bea482d4ad03e168c9d9eb5e9f4e40f771dee9bc6913d6be46f7d86feb961603f172bb6497fac28c4f5d36a1f05d0ec66' + 'SKIP' + 'SKIP' + 'SKIP') prepare() { cd "${srcdir}/$_fullname" - + patch --forward --strip=1 --input="${srcdir}/plex.patch" + patch --forward --strip=1 --input="${srcdir}/plex-wayland.patch" + patch --forward --strip=1 --input="${srcdir}/plex-wayland-hwdec.patch" # All this git version junk fails, just remove it we already have the version sed -i 's|include(GetGitRevisionDescription)|| s|get_git_head_revision(REFSPEC FULL_GIT_REVISION)||' \ CMakeModules/VersionConfiguration.cmake - mkdir -p build/dependencies - for f in "buildid-${_web_buildid}.cmake" "web-client-desktop-${_web_desktop_ver}.tar.xz"{,.sha1} "web-client-tv-${_web_tv_ver}.tar.xz"{,.sha1}; do - ln -sf "${srcdir}/${f}" "build/dependencies/${f}" + for f in "buildid-${_web_buildid}.cmake"; do + ln -sf "${srcdir}/${f}" "build/dependencies/${f}" + done + for f in "web-client-desktop-${_web_buildid}-${_web_desktop_ver}.tar.xz"{,.sha1} "web-client-tv-${_web_buildid}-${_web_tv_ver}.tar.xz"{,.sha1}; do + target="${f/-${_web_buildid}-/-}" + ln -sf "${srcdir}/${f}" "build/dependencies/${target}" done } - build() { cd "${srcdir}/$_fullname/build" - cmake -DCMAKE_INSTALL_PREFIX='/usr' -DCMAKE_BUILD_TYPE='Release' -DCMAKE_SKIP_RPATH=1 \ - -DFULL_GIT_REVISION="$_gitver" -DQTROOT='/usr' \ + -DFULL_GIT_REVISION="$_gitver" -DLINUX_X11POWER=on -DQTROOT='/usr' \ .. make } - package() { cd "${srcdir}/$_fullname/build" - DESTDIR="$pkgdir" make install - - install -Dm644 "$srcdir/plex-media-player.desktop" "$pkgdir/usr/share/applications/plex-media-player.desktop" - install -Dm644 ../resources/images/icon.png "$pkgdir/usr/share/icons/hicolor/256x256/apps/plex-media-player.png" } diff --git a/mpv.patch b/mpv.patch new file mode 100644 index 000000000000..946242374401 --- /dev/null +++ b/mpv.patch @@ -0,0 +1,164 @@ +--- a/src/player/PlayerComponent.cpp ++++ b/src/player/PlayerComponent.cpp +@@ -259,7 +259,7 @@ void PlayerComponent::setQtQuickWindow(QQuickWindow* window) + /////////////////////////////////////////////////////////////////////////////////////////////////// + void PlayerComponent::setWindow(QQuickWindow* window) + { +- QString vo = "opengl-cb"; ++ QString vo = "libmpv"; + + #ifdef TARGET_RPI + window->setFlags(Qt::FramelessWindowHint); +@@ -276,7 +276,7 @@ void PlayerComponent::setWindow(QQuickWindow* window) + + mpv::qt::set_property(m_mpv, "vo", vo); + +- if (vo == "opengl-cb") ++ if (vo == "libmpv") + setQtQuickWindow(window); + } + +diff --git a/src/player/PlayerQuickItem.cpp b/src/player/PlayerQuickItem.cpp +index 6f5a46bb..1a7aa6c4 100644 +--- a/src/player/PlayerQuickItem.cpp ++++ b/src/player/PlayerQuickItem.cpp +@@ -11,6 +11,8 @@ + #include <QtQuick/QQuickWindow> + #include <QOpenGLFunctions> + ++#include <mpv/render_gl.h> ++ + #include "QsLog.h" + #include "utils/Utils.h" + +@@ -93,7 +95,6 @@ class RequestRepaintJob : public QRunnable + PlayerRenderer::PlayerRenderer(mpv::qt::Handle mpv, QQuickWindow* window) + : m_mpv(mpv), m_mpvGL(nullptr), m_window(window), m_size(), m_hAvrtHandle(nullptr), m_videoRectangle(-1, -1, -1, -1), m_fbo(0) + { +- m_mpvGL = (mpv_opengl_cb_context *)mpv_get_sub_api(m_mpv, MPV_SUB_API_OPENGL_CB); + } + + /////////////////////////////////////////////////////////////////////////////////////////////////// +@@ -104,11 +105,27 @@ bool PlayerRenderer::init() + DwmEnableMMCSS(TRUE); + #endif + +- mpv_opengl_cb_set_update_callback(m_mpvGL, on_update, (void *)this); + + // Signals presence of MPGetNativeDisplay(). + const char *extensions = "GL_MP_MPGetNativeDisplay"; +- return mpv_opengl_cb_init_gl(m_mpvGL, extensions, get_proc_address, nullptr) >= 0; ++ ++ mpv_opengl_init_params opengl_params = { ++ .get_proc_address = get_proc_address, ++ .get_proc_address_ctx = NULL, ++ .extra_exts = extensions, ++ }; ++ mpv_render_param params[] = { ++ {MPV_RENDER_PARAM_API_TYPE, (void*)MPV_RENDER_API_TYPE_OPENGL}, ++ {MPV_RENDER_PARAM_OPENGL_INIT_PARAMS, &opengl_params}, ++ {MPV_RENDER_PARAM_INVALID}, ++ }; ++ int err = mpv_render_context_create(&m_mpvGL, m_mpv, params); ++ ++ if (err >= 0) { ++ mpv_render_context_set_update_callback(m_mpvGL, on_update, (void *)this); ++ return true; ++ } ++ return false; + } + + /////////////////////////////////////////////////////////////////////////////////////////////////// +@@ -116,7 +133,8 @@ PlayerRenderer::~PlayerRenderer() + { + // Keep in mind that the m_mpv handle must be held until this is done. + if (m_mpvGL) +- mpv_opengl_cb_uninit_gl(m_mpvGL); ++ mpv_render_context_free(m_mpvGL); ++ m_mpvGL = nullptr; + delete m_fbo; + } + +@@ -158,9 +176,18 @@ void PlayerRenderer::render() + } + } + +- // The negative height signals to mpv that the video should be flipped +- // (according to the flipped OpenGL coordinate system). +- mpv_opengl_cb_draw(m_mpvGL, fbo, fboSize.width(), (flip ? -1 : 1) * fboSize.height()); ++ mpv_opengl_fbo mpv_fbo = { ++ .fbo = fbo, ++ .w = fboSize.width(), ++ .h = fboSize.height(), ++ }; ++ int mpv_flip = flip ? -1 : 0; ++ mpv_render_param params[] = { ++ {MPV_RENDER_PARAM_OPENGL_FBO, &mpv_fbo}, ++ {MPV_RENDER_PARAM_FLIP_Y, &mpv_flip}, ++ {MPV_RENDER_PARAM_INVALID} ++ }; ++ mpv_render_context_render(m_mpvGL, params); + + m_window->resetOpenGLState(); + +@@ -177,7 +204,8 @@ void PlayerRenderer::render() + /////////////////////////////////////////////////////////////////////////////////////////////////// + void PlayerRenderer::swap() + { +- mpv_opengl_cb_report_flip(m_mpvGL, 0); ++ if (m_mpvGL) ++ mpv_render_context_report_swap(m_mpvGL); + } + + /////////////////////////////////////////////////////////////////////////////////////////////////// +@@ -224,7 +252,7 @@ PlayerQuickItem::PlayerQuickItem(QQuickItem* parent) + PlayerQuickItem::~PlayerQuickItem() + { + if (m_mpvGL) +- mpv_opengl_cb_set_update_callback(m_mpvGL, nullptr, nullptr); ++ mpv_render_context_set_update_callback(m_mpvGL, nullptr, nullptr); + } + + /////////////////////////////////////////////////////////////////////////////////////////////////// +@@ -298,10 +326,6 @@ void PlayerQuickItem::initMpv(PlayerComponent* player) + { + m_mpv = player->getMpvHandle(); + +- m_mpvGL = (mpv_opengl_cb_context *)mpv_get_sub_api(m_mpv, MPV_SUB_API_OPENGL_CB); +- if (!m_mpvGL) +- throw FatalException(tr("OpenGL not enabled in libmpv.")); +- + connect(player, &PlayerComponent::windowVisible, this, &QQuickItem::setVisible); + window()->update(); + } +diff --git a/src/player/PlayerQuickItem.h b/src/player/PlayerQuickItem.h +index b706b892..644a62e0 100644 +--- a/src/player/PlayerQuickItem.h ++++ b/src/player/PlayerQuickItem.h +@@ -6,7 +6,7 @@ + #include <QOpenGLFramebufferObject> + + #include <mpv/client.h> +-#include <mpv/opengl_cb.h> ++#include <mpv/render.h> + + #ifdef Q_OS_WIN32 + #include <windows.h> +@@ -34,7 +34,7 @@ public slots: + private: + static void on_update(void *ctx); + mpv::qt::Handle m_mpv; +- mpv_opengl_cb_context* m_mpvGL; ++ mpv_render_context* m_mpvGL; + QQuickWindow* m_window; + QSize m_size; + HANDLE m_hAvrtHandle; +@@ -64,7 +64,7 @@ private slots: + + private: + mpv::qt::Handle m_mpv; +- mpv_opengl_cb_context* m_mpvGL; ++ mpv_render_context* m_mpvGL; + PlayerRenderer* m_renderer; + QString m_debugInfo; + }; diff --git a/plex-media-player.desktop b/plex-media-player.desktop deleted file mode 100644 index 4bdfde7812c9..000000000000 --- a/plex-media-player.desktop +++ /dev/null @@ -1,7 +0,0 @@ -[Desktop Entry] -Type=Application -Name=Plex Media Player -GenericName=Media Player -Exec=/usr/bin/plexmediaplayer -Icon=plex-media-player -Categories=AudioVideo; diff --git a/plex-wayland-hwdec.patch b/plex-wayland-hwdec.patch new file mode 100644 index 000000000000..5b5b6bfc8596 --- /dev/null +++ b/plex-wayland-hwdec.patch @@ -0,0 +1,63 @@ +From 6ae471023a30b1f16d2ed54bf48717af1483352e Mon Sep 17 00:00:00 2001 +From: Eivind Uggedal <eivind@uggedal.com> +Date: Tue, 13 Apr 2021 06:14:22 +0000 +Subject: [PATCH] Fix hwdec for wayland + +Passing the wayland display to libmpv should improve stability and +enable direct rendering. This seems to be needed for hw decoding to work +on wayland. + +Should properly fix #9. +--- + CMakeModules/QtConfiguration.cmake | 7 ++++++- + src/player/PlayerQuickItem.cpp | 5 +++++ + 2 files changed, 11 insertions(+), 1 deletion(-) + +diff --git a/CMakeModules/QtConfiguration.cmake b/CMakeModules/QtConfiguration.cmake +index 61d1602..8fe9073 100644 +--- a/CMakeModules/QtConfiguration.cmake ++++ b/CMakeModules/QtConfiguration.cmake +@@ -26,7 +26,7 @@ set(components Core Network WebChannel Qml Quick Xml WebEngine Widgets) + + if(UNIX AND (NOT APPLE) AND ((NOT BUILD_TARGET STREQUAL "RPI"))) + add_definitions(-DUSE_X11EXTRAS) +- set(components ${components} X11Extras) ++ set(components ${components} X11Extras Gui) + endif() + + if(LINUX_DBUS) +@@ -47,6 +47,11 @@ foreach(COMP ${components}) + include_directories(${${mod}_PRIVATE_INCLUDE_DIRS}) + endif(OPENELEC) + ++ # Need private interfaces for qpa/qplatformnativeinterface.h: ++ if(${mod} STREQUAL Qt5Gui) ++ include_directories(${Qt5Gui_PRIVATE_INCLUDE_DIRS}) ++ endif() ++ + list(APPEND QT5_LIBRARIES ${${mod}_LIBRARIES}) + list(APPEND QT5_CFLAGS ${${mod}_EXECUTABLE_COMPILE_FLAGS}) + endforeach(COMP ${components}) +diff --git a/src/player/PlayerQuickItem.cpp b/src/player/PlayerQuickItem.cpp +index 19a62c5..655ac40 100644 +--- a/src/player/PlayerQuickItem.cpp ++++ b/src/player/PlayerQuickItem.cpp +@@ -26,6 +26,7 @@ + + #ifdef USE_X11EXTRAS + #include <QX11Info> ++#include <qpa/qplatformnativeinterface.h> + #endif + + /////////////////////////////////////////////////////////////////////////////////////////////////// +@@ -114,6 +115,10 @@ mpv_opengl_init_params opengl_params = { + if (platformName.contains("xcb")) { + params[2].type = MPV_RENDER_PARAM_X11_DISPLAY; + params[2].data = QX11Info::display(); ++ } else if (platformName.contains("wayland")) { ++ QPlatformNativeInterface *native = QGuiApplication::platformNativeInterface(); ++ params[2].type = MPV_RENDER_PARAM_WL_DISPLAY; ++ params[2].data = native->nativeResourceForWindow("display", NULL); + } + #endif + int err = mpv_render_context_create(&m_mpvGL, m_mpv, params); diff --git a/plex-wayland.patch b/plex-wayland.patch new file mode 100644 index 000000000000..ae56678a61da --- /dev/null +++ b/plex-wayland.patch @@ -0,0 +1,53 @@ +From 540a78e1061199c6120c9b4587be34d285b40b9a Mon Sep 17 00:00:00 2001 +From: Eivind Uggedal <eivind@uggedal.com> +Date: Mon, 12 Apr 2021 13:20:13 +0000 +Subject: [PATCH] Fix libmpv initialization on wayland + +This makes the x11 specific initialization of libmpv conditional on +actually running under x11 (or forcing XWayland with +QT_QPA_PLATFORM=xcb). + +In the future, libmpv wayland awareness could be added, but the +current implementation seems to work ok. + +Should fix #9. +--- + src/player/PlayerQuickItem.cpp | 13 ++++++++++--- + 1 file changed, 10 insertions(+), 3 deletions(-) + +diff --git a/src/player/PlayerQuickItem.cpp b/src/player/PlayerQuickItem.cpp +index 0acae27..19a62c5 100644 +--- a/src/player/PlayerQuickItem.cpp ++++ b/src/player/PlayerQuickItem.cpp +@@ -3,6 +3,7 @@ + #include <stdexcept> + + #include <QCoreApplication> ++#include <QGuiApplication> + #include <QOpenGLContext> + #include <QRunnable> + +@@ -101,14 +102,20 @@ mpv_opengl_init_params opengl_params = { + #endif + }; + ++ const QString platformName = QGuiApplication::platformName(); ++ + mpv_render_param params[] = { + {MPV_RENDER_PARAM_API_TYPE, (void*)MPV_RENDER_API_TYPE_OPENGL}, + {MPV_RENDER_PARAM_OPENGL_INIT_PARAMS, &opengl_params}, +-#ifdef USE_X11EXTRAS +- {MPV_RENDER_PARAM_X11_DISPLAY, QX11Info::display()}, +-#endif ++ {MPV_RENDER_PARAM_INVALID}, + {MPV_RENDER_PARAM_INVALID}, + }; ++#ifdef USE_X11EXTRAS ++ if (platformName.contains("xcb")) { ++ params[2].type = MPV_RENDER_PARAM_X11_DISPLAY; ++ params[2].data = QX11Info::display(); ++ } ++#endif + int err = mpv_render_context_create(&m_mpvGL, m_mpv, params); + + if (err >= 0) { diff --git a/plex.patch b/plex.patch new file mode 100644 index 000000000000..c48b73e15021 --- /dev/null +++ b/plex.patch @@ -0,0 +1,12 @@ +--- a/src/main.cpp ++++ b/src/main.cpp +@@ -86,7 +86,8 @@ void ShowLicenseInfo() + ///////////////////////////////////////////////////////////////////////////////////////// + QStringList g_qtFlags = { + "--disable-gpu", +- "--disable-web-security" ++ "--disable-web-security", ++ "--disable-viz-display-compositor" + }; + + ///////////////////////////////////////////////////////////////////////////////////////// |