summarylogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.SRCINFO44
-rw-r--r--PKGBUILD78
-rw-r--r--mpv.patch164
-rw-r--r--plex-media-player.desktop7
-rw-r--r--plex-wayland-hwdec.patch63
-rw-r--r--plex-wayland.patch53
-rw-r--r--plex.patch12
7 files changed, 358 insertions, 63 deletions
diff --git a/.SRCINFO b/.SRCINFO
index a6ce54f1df6f..f8fc7cf3eab9 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,11 +1,12 @@
pkgbase = plex-media-player
pkgdesc = Next generation Plex Desktop Client
- pkgver = 2.32.0
- 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.96.0-8a62818.tar.xz
- source = plex-media-player-2.32.0.973-62b2e27f.tar.gz::https://github.com/plexinc/plex-media-player/archive/v2.32.0.973-62b2e27f.tar.gz
- source = buildid-115-8a62818ecd072f.cmake::https://artifacts.plex.tv/web-client-pmp/115-8a62818ecd072f/buildid.cmake
- source = https://artifacts.plex.tv/web-client-pmp/115-8a62818ecd072f/web-client-desktop-3.83.2-ecd072f.tar.xz
- source = https://artifacts.plex.tv/web-client-pmp/115-8a62818ecd072f/web-client-desktop-3.83.2-ecd072f.tar.xz.sha1
- source = https://artifacts.plex.tv/web-client-pmp/115-8a62818ecd072f/web-client-tv-3.96.0-8a62818.tar.xz
- source = https://artifacts.plex.tv/web-client-pmp/115-8a62818ecd072f/web-client-tv-3.96.0-8a62818.tar.xz.sha1
- source = plex-media-player.desktop
- sha512sums = 60f162b98d245d9af88d4a60bc3cbfbfbe01b6fce57bc8ba0d2751936770be642ff6714c10724443a0c0db393b101a24d072b87378c90a5fba77e47d8e238c58
- sha512sums = 830eaed2d61d1d5b4bf1c1ca1f80d34f97e9e65f23eb875a7ef021ff9b7fed1398f594dbddb744eec098055d4c7cc95b20784e1e99cd74ebee2b444d2ef4526e
- sha512sums = eadfb4de376a754eb67d098569e90f4f3a00543a32d0957f8f0c7f912cfb4518ca217e0ec803f0e210795c8d4c5d1a3801b848d10cd47b4bd54438047b2d053b
- sha512sums = 955a33a976a67738779b7020caa8f024f8e49a0605400adfe6336065499c9976fbf2b5c4238bef9915a639a199ab500bea4c3118b0388fb7e05ab3e2586b1841
- sha512sums = 151ed348894fb749ef06d9b5312a45f1b8dcddada0eaf08bc3bf0d0f328ad88e030a47b121bba40fd95bff0001343d01b0284ae4d15214b33e15371624ddc1ca
- sha512sums = e0f7ff1c88bc53421d349664ff441ee03ee0a722df5fea6bfc4ef48096bbab38642b6cce9025233988642194a90a199e578add075ffb7b36b725f7944a6d41f6
- 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
-
diff --git a/PKGBUILD b/PKGBUILD
index 6a7334478eff..9bc84ebbb0f3 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -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.32.0
-_gitrev=973
-_gitver=62b2e27f
-_fullver="$pkgver.$_gitrev-$_gitver"
+pkgver=2.58.1
+_gitrev=
+_gitver=ae73e074
+_fullver="$pkgver-$_gitver"
_fullname="$pkgname-$_fullver"
-_web_buildid="115-8a62818ecd072f"
-_web_desktop_ver="3.83.2-ecd072f"
-_web_tv_ver="3.96.0-8a62818"
-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=('60f162b98d245d9af88d4a60bc3cbfbfbe01b6fce57bc8ba0d2751936770be642ff6714c10724443a0c0db393b101a24d072b87378c90a5fba77e47d8e238c58'
- '830eaed2d61d1d5b4bf1c1ca1f80d34f97e9e65f23eb875a7ef021ff9b7fed1398f594dbddb744eec098055d4c7cc95b20784e1e99cd74ebee2b444d2ef4526e'
- 'eadfb4de376a754eb67d098569e90f4f3a00543a32d0957f8f0c7f912cfb4518ca217e0ec803f0e210795c8d4c5d1a3801b848d10cd47b4bd54438047b2d053b'
- '955a33a976a67738779b7020caa8f024f8e49a0605400adfe6336065499c9976fbf2b5c4238bef9915a639a199ab500bea4c3118b0388fb7e05ab3e2586b1841'
- '151ed348894fb749ef06d9b5312a45f1b8dcddada0eaf08bc3bf0d0f328ad88e030a47b121bba40fd95bff0001343d01b0284ae4d15214b33e15371624ddc1ca'
- 'e0f7ff1c88bc53421d349664ff441ee03ee0a722df5fea6bfc4ef48096bbab38642b6cce9025233988642194a90a199e578add075ffb7b36b725f7944a6d41f6'
- '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"
+ };
+
+ /////////////////////////////////////////////////////////////////////////////////////////