diff --git a/video/out/opengl/hwdec_drmprime_drm.c b/video/out/opengl/hwdec_drmprime_drm.c index 7328fbb284..bc9f548019 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 a83abcbc12..93144f9edd 100644 --- a/wscript +++ b/wscript @@ -563,7 +563,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',