mirror of https://github.com/mpv-player/mpv
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.
This commit is contained in:
parent
c3687b9eaa
commit
16d2ddb505
|
@ -23,6 +23,7 @@
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
#include <libavutil/hwcontext.h>
|
||||||
#include <libavutil/hwcontext_drm.h>
|
#include <libavutil/hwcontext_drm.h>
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
@ -44,6 +45,7 @@ struct drm_frame {
|
||||||
|
|
||||||
struct priv {
|
struct priv {
|
||||||
struct mp_log *log;
|
struct mp_log *log;
|
||||||
|
struct mp_hwdec_ctx hwctx;
|
||||||
|
|
||||||
struct mp_image_params params;
|
struct mp_image_params params;
|
||||||
|
|
||||||
|
@ -231,6 +233,9 @@ static void uninit(struct ra_hwdec *hw)
|
||||||
disable_video_plane(hw);
|
disable_video_plane(hw);
|
||||||
set_current_frame(hw, NULL);
|
set_current_frame(hw, NULL);
|
||||||
|
|
||||||
|
hwdec_devices_remove(hw->devs, &p->hwctx);
|
||||||
|
av_buffer_unref(&p->hwctx.av_device_ref);
|
||||||
|
|
||||||
if (p->ctx) {
|
if (p->ctx) {
|
||||||
drm_atomic_destroy_context(p->ctx);
|
drm_atomic_destroy_context(p->ctx);
|
||||||
p->ctx = NULL;
|
p->ctx = NULL;
|
||||||
|
@ -284,6 +289,15 @@ static int init(struct ra_hwdec *hw)
|
||||||
}
|
}
|
||||||
|
|
||||||
disable_video_plane(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;
|
return 0;
|
||||||
|
|
||||||
err:
|
err:
|
||||||
|
|
2
wscript
2
wscript
|
@ -563,7 +563,7 @@ video_output_features = [
|
||||||
'name': '--drm',
|
'name': '--drm',
|
||||||
'desc': 'DRM',
|
'desc': 'DRM',
|
||||||
'deps': 'vt.h',
|
'deps': 'vt.h',
|
||||||
'func': check_pkg_config('libdrm'),
|
'func': check_pkg_config('libdrm', '>= 2.4.74'),
|
||||||
}, {
|
}, {
|
||||||
'name': '--drmprime',
|
'name': '--drmprime',
|
||||||
'desc': 'DRM Prime ffmpeg support',
|
'desc': 'DRM Prime ffmpeg support',
|
||||||
|
|
Loading…
Reference in New Issue