commit 8e96e02000ce0a7f8a4b3852c7a2d2f610f12015
Author: Leigh Scott <leigh123linux(a)gmail.com>
Date: Sun Jan 31 13:00:42 2021 +0000
Patch for new mpv
5430cd807250a8f7329baad76b15a363f35b53fa.patch | 178 +++++++++++++++++++++++++
plex-media-player.spec | 9 +-
2 files changed, 185 insertions(+), 2 deletions(-)
---
diff --git a/5430cd807250a8f7329baad76b15a363f35b53fa.patch
b/5430cd807250a8f7329baad76b15a363f35b53fa.patch
new file mode 100644
index 0000000..b7be786
--- /dev/null
+++ b/5430cd807250a8f7329baad76b15a363f35b53fa.patch
@@ -0,0 +1,178 @@
+From 5430cd807250a8f7329baad76b15a363f35b53fa Mon Sep 17 00:00:00 2001
+From: Matthew Hitchens <matt(a)hitchens.net>
+Date: Sat, 28 Nov 2020 12:46:01 -0600
+Subject: [PATCH] player: replaces opengl-cb with the libmpv Render API
+
+Plex-CLA-1.0-signed-off-by: Matthew Hitchens matt(a)hitchens.net
+---
+ src/player/PlayerComponent.cpp | 4 +--
+ src/player/PlayerQuickItem.cpp | 50 +++++++++++++++++++++++++---------
+ src/player/PlayerQuickItem.h | 6 ++--
+ 3 files changed, 42 insertions(+), 18 deletions(-)
+
+diff --git a/src/player/PlayerComponent.cpp b/src/player/PlayerComponent.cpp
+index 4dc5e7ba..65fbfa06 100644
+--- 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..7628c5c6 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.spec b/plex-media-player.spec
index 184452e..30cd188 100644
--- a/plex-media-player.spec
+++ b/plex-media-player.spec
@@ -6,15 +6,16 @@
%global web_client_desktop 4.29.2-e50e175
%global web_client_tv 4.29.6-045db5b
%global arti_url
https://artifacts.plex.tv/web-client-pmp
+%global git_url
https://github.com/plexinc/plex-media-player
Name: plex-media-player
Version: 2.58.0
-Release: 6%{?dist}
+Release: 7%{?dist}
Summary: Plex Media Player
License: GPLv2+
URL:
https://plex.tv/
-Source0:
https://github.com/plexinc/plex-media-player/archive/v%{plex_hash}/%{name...
+Source0: %{git_url}/archive/v%{plex_hash}/%{name}-%{plex_hash}.tar.gz
Source1: plexmediaplayer.desktop
Source2: plexmediaplayer.appdata.xml
Source3: plexmediaplayer.service
@@ -32,6 +33,7 @@ Source93:
%{arti_url}/%{clients_hash}/web-client-tv-%{web_client_tv}.tar.x
Source94: %{arti_url}/%{clients_hash}/web-client-tv-%{web_client_tv}.tar.xz.sha1
Patch0: buildfix_qt514.patch
+Patch1: %{git_url}/commit/5430cd807250a8f7329baad76b15a363f35b53fa.patch
# qtwebengine is not available there
ExcludeArch: ppc64le
@@ -209,6 +211,9 @@ exit 0
%{_unitdir}/%{name}.target
%changelog
+* Sun Jan 31 2021 Leigh Scott <leigh123linux(a)gmail.com> - 2.58.0-7
+- Patch for new mpv
+
* Mon Nov 23 2020 Leigh Scott <leigh123linux(a)gmail.com> - 2.58.0-6
- Rebuild for new mpv