From db1edada4f3d15771ec6ad255ed3ce3a2bdba35c Mon Sep 17 00:00:00 2001 From: Jonas Karlman Date: Sat, 26 Jan 2019 20:34:21 +0100 Subject: [PATCH] mpv-drmprime: new package Useful for debugging and testing ffmpeg drmprime decoding on mainline and rockchip projects Run mpv --vo=gpu --gpu-context=drm --hwdec=drm/rkmpp/help when kodi has been stopped to start playback --- .../mpv-drmprime/package.mk | 62 ++++++++++++++++ .../patches/mpv-drmprime-PR6461.patch | 73 +++++++++++++++++++ 2 files changed, 135 insertions(+) create mode 100644 packages/addons/addon-depends/multimedia-tools-depends/mpv-drmprime/package.mk create mode 100644 packages/addons/addon-depends/multimedia-tools-depends/mpv-drmprime/patches/mpv-drmprime-PR6461.patch diff --git a/packages/addons/addon-depends/multimedia-tools-depends/mpv-drmprime/package.mk b/packages/addons/addon-depends/multimedia-tools-depends/mpv-drmprime/package.mk new file mode 100644 index 0000000000..73019789aa --- /dev/null +++ b/packages/addons/addon-depends/multimedia-tools-depends/mpv-drmprime/package.mk @@ -0,0 +1,62 @@ +# SPDX-License-Identifier: GPL-2.0 +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv) + +PKG_NAME="mpv-drmprime" +PKG_VERSION="0.29.1" +PKG_SHA256="f9f9d461d1990f9728660b4ccb0e8cb5dce29ccaa6af567bec481b79291ca623" +PKG_LICENSE="GPL" +PKG_SITE="https://mpv.io/" +PKG_URL="https://github.com/mpv-player/mpv/archive/v$PKG_VERSION.tar.gz" +PKG_DEPENDS_TARGET="toolchain waf:host alsa ffmpeg libass libdrm" +PKG_LONGDESC="A media player based on MPlayer and mplayer2. It supports a wide variety of video file formats, audio and video codecs, and subtitle types." +PKG_TOOLCHAIN="manual" + +PKG_CONFIGURE_OPTS_TARGET="--disable-libsmbclient \ + --disable-apple-remote \ + --prefix=/usr \ + --enable-drm \ + --enable-drmprime \ + --enable-gbm \ + --enable-egl-drm" + +if [ "$OPENGLES_SUPPORT" = "yes" ]; then + PKG_DEPENDS_TARGET+=" $OPENGLES" +fi + +if [ "$OPENGL_SUPPORT" = "yes" ]; then + PKG_DEPENDS_TARGET+=" $OPENGL" +fi + +if [ "$VAAPI_SUPPORT" = "yes" ]; then + PKG_DEPENDS_TARGET+=" libva" + PKG_CONFIGURE_OPTS_TARGET+=" --enable-vaapi --enable-vaapi-drm" +else + PKG_CONFIGURE_OPTS_TARGET+=" --disable-vaapi" +fi + +if [ "$PULSEAUDIO_SUPPORT" = "yes" ]; then + PKG_DEPENDS_TARGET+=" pulseaudio" + PKG_CONFIGURE_OPTS_TARGET+=" --enable-pulse" +else + PKG_CONFIGURE_OPTS_TARGET+=" --disable-pulse" +fi + +if [ "$KODI_BLURAY_SUPPORT" = "yes" ]; then + PKG_DEPENDS_TARGET+=" libbluray" + PKG_CONFIGURE_OPTS_TARGET+=" --enable-libbluray" +else + PKG_CONFIGURE_OPTS_TARGET+=" --disable-libbluray" +fi + +configure_target() { + waf configure $PKG_CONFIGURE_OPTS_TARGET +} + +make_target() { + waf build +} + +makeinstall_target() { + waf install --destdir=$INSTALL + rm -r $INSTALL/usr/share +} diff --git a/packages/addons/addon-depends/multimedia-tools-depends/mpv-drmprime/patches/mpv-drmprime-PR6461.patch b/packages/addons/addon-depends/multimedia-tools-depends/mpv-drmprime/patches/mpv-drmprime-PR6461.patch new file mode 100644 index 0000000000..a6d0417c4d --- /dev/null +++ b/packages/addons/addon-depends/multimedia-tools-depends/mpv-drmprime/patches/mpv-drmprime-PR6461.patch @@ -0,0 +1,73 @@ +From 9c39a05e87e89534bc0ebf0b1a1bfb918cfb127d Mon Sep 17 00:00:00 2001 +From: Jonas Karlman +Date: Thu, 24 Jan 2019 22:11:10 +0100 +Subject: [PATCH] vo_gpu: hwdec_drmprime_drm: add hwdec ctx + +This allows to use drm hwaccels that require a hwdevice. + +Tested with v4l2request hwaccel and cedrus driver on an allwinner device +running mpv with --vo=gpu --gpu-context=drm --hwdec=drm. +--- + video/out/opengl/hwdec_drmprime_drm.c | 14 ++++++++++++++ + wscript | 2 +- + 2 files changed, 15 insertions(+), 1 deletion(-) + +diff --git a/video/out/opengl/hwdec_drmprime_drm.c b/video/out/opengl/hwdec_drmprime_drm.c +index fd3d383c55..13fbe7528f 100644 +--- a/video/out/opengl/hwdec_drmprime_drm.c ++++ b/video/out/opengl/hwdec_drmprime_drm.c +@@ -23,6 +23,7 @@ + #include + #include + ++#include + #include + + #include "common.h" +@@ -44,6 +45,7 @@ struct drm_frame { + + struct priv { + struct mp_log *log; ++ struct mp_hwdec_ctx hwctx; + + struct mp_image_params params; + +@@ -231,6 +233,9 @@ static void uninit(struct ra_hwdec *hw) + disable_video_plane(hw); + set_current_frame(hw, NULL); + ++ hwdec_devices_remove(hw->devs, &p->hwctx); ++ av_buffer_unref(&p->hwctx.av_device_ref); ++ + if (p->ctx) { + drm_atomic_destroy_context(p->ctx); + p->ctx = NULL; +@@ -284,6 +289,15 @@ static int init(struct ra_hwdec *hw) + } + + disable_video_plane(hw); ++ ++ p->hwctx = (struct mp_hwdec_ctx) { ++ .driver_name = hw->driver->name, ++ }; ++ if (!av_hwdevice_ctx_create(&p->hwctx.av_device_ref, AV_HWDEVICE_TYPE_DRM, ++ drmGetDeviceNameFromFd2(p->ctx->fd), NULL, 0)) { ++ hwdec_devices_add(hw->devs, &p->hwctx); ++ } ++ + return 0; + + err: +diff --git a/wscript b/wscript +index d3d49090c8..c437d5adc1 100644 +--- a/wscript ++++ b/wscript +@@ -554,7 +554,7 @@ video_output_features = [ + 'name': '--drm', + 'desc': 'DRM', + 'deps': 'vt.h', +- 'func': check_pkg_config('libdrm'), ++ 'func': check_pkg_config('libdrm', '>= 2.4.74'), + }, { + 'name': '--drmprime', + 'desc': 'DRM Prime ffmpeg support',