From 2cd4185c9c2e846db5e5c7f1d66b8404ee4cd9f2 Mon Sep 17 00:00:00 2001 From: Zach Dykstra Date: Mon, 14 Dec 2020 10:39:45 -0600 Subject: [PATCH] plex-media-player: remove deprecated opengl-cb API, use libmpv Render API --- .../patches/fix-opengl-cb-api-usage.patch | 164 ++++++++++++++++++ srcpkgs/plex-media-player/template | 6 +- 2 files changed, 165 insertions(+), 5 deletions(-) create mode 100644 srcpkgs/plex-media-player/patches/fix-opengl-cb-api-usage.patch diff --git a/srcpkgs/plex-media-player/patches/fix-opengl-cb-api-usage.patch b/srcpkgs/plex-media-player/patches/fix-opengl-cb-api-usage.patch new file mode 100644 index 00000000000..53010d9fc32 --- /dev/null +++ b/srcpkgs/plex-media-player/patches/fix-opengl-cb-api-usage.patch @@ -0,0 +1,164 @@ +The opengl-cb interface has been retired; patch in libmpv usage. +https://github.com/plexinc/plex-media-player/issues/997 +https://github.com/plexinc/plex-media-player/pull/999 + +--- src/player/PlayerComponent.cpp ++++ 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); + } + +--- src/player/PlayerQuickItem.cpp ++++ src/player/PlayerQuickItem.cpp +@@ -11,6 +11,8 @@ + #include + #include + ++#include ++ + #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(); + } +--- src/player/PlayerQuickItem.h ++++ src/player/PlayerQuickItem.h +@@ -6,7 +6,7 @@ + #include + + #include +-#include ++#include + + #ifdef Q_OS_WIN32 + #include +@@ -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/srcpkgs/plex-media-player/template b/srcpkgs/plex-media-player/template index 9704d150d25..830d09f8579 100644 --- a/srcpkgs/plex-media-player/template +++ b/srcpkgs/plex-media-player/template @@ -1,7 +1,7 @@ # Template file for 'plex-media-player' pkgname=plex-media-player version=2.58.0 -revision=2 +revision=3 _verbuild=1076 _commit_rev=38e019da # See CMakeModules/WebClient.cmake @@ -43,10 +43,6 @@ if [ "$CROSS_BUILD" ]; then hostmakedepends+=" qt5-devel qt5-host-tools" fi -case $XBPS_TARGET_MACHINE in - arm*) nocross="Qt5Webengine is not aviable for 32bit cross" -esac - post_extract() { mkdir -p "${wrksrc}/build/dependencies" cp "${XBPS_SRCDISTDIR}/plex-media-player-${version}/buildid-${_buildid_version}.cmake" "${wrksrc}/build/dependencies"