summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--video/decode/lavc.h2
-rw-r--r--video/decode/vd_lavc.c6
-rw-r--r--video/out/gpu/hwdec.c1
-rw-r--r--video/out/opengl/hwdec_cuda.c18
4 files changed, 7 insertions, 20 deletions
diff --git a/video/decode/lavc.h b/video/decode/lavc.h
index 8383c0a67f..6287dc8577 100644
--- a/video/decode/lavc.h
+++ b/video/decode/lavc.h
@@ -85,6 +85,8 @@ typedef struct lavc_ctx {
struct vd_lavc_hwdec {
enum hwdec_type type;
+ // If non-0, get this hwdec type from the VO (for the AVHWDeviceContext).
+ enum hwdec_type interop_type;
// If not-0: the IMGFMT_ format that should be accepted in the libavcodec
// get_format callback.
int image_format;
diff --git a/video/decode/vd_lavc.c b/video/decode/vd_lavc.c
index ecc9e89962..6422346d31 100644
--- a/video/decode/vd_lavc.c
+++ b/video/decode/vd_lavc.c
@@ -160,6 +160,7 @@ static const struct vd_lavc_hwdec mp_vd_lavc_rkmpp = {
#if HAVE_CUDA_HWACCEL
static const struct vd_lavc_hwdec mp_vd_lavc_nvdec = {
.type = HWDEC_NVDEC,
+ .interop_type = HWDEC_CUDA,
.image_format = IMGFMT_CUDA,
.generic_hwaccel = true,
.set_hwframes = true,
@@ -369,8 +370,9 @@ static struct mp_hwdec_ctx *hwdec_create_dev(struct dec_video *vd,
if (hwdec->create_dev)
return hwdec->create_dev(vd->global, vd->log, autoprobe);
if (vd->hwdec_devs) {
- hwdec_devices_request(vd->hwdec_devs, hwdec->type);
- return hwdec_devices_get(vd->hwdec_devs, hwdec->type);
+ int type = hwdec->interop_type ? hwdec->interop_type : hwdec->type;
+ hwdec_devices_request(vd->hwdec_devs, type);
+ return hwdec_devices_get(vd->hwdec_devs, type);
}
return NULL;
}
diff --git a/video/out/gpu/hwdec.c b/video/out/gpu/hwdec.c
index d88dc5e779..48ed4db58e 100644
--- a/video/out/gpu/hwdec.c
+++ b/video/out/gpu/hwdec.c
@@ -66,7 +66,6 @@ static const struct ra_hwdec_driver *const mpgl_hwdec_drivers[] = {
#endif
#if HAVE_CUDA_HWACCEL
&ra_hwdec_cuda,
- &ra_hwdec_cuda_nvdec,
#endif
#if HAVE_RPI
&ra_hwdec_rpi_overlay,
diff --git a/video/out/opengl/hwdec_cuda.c b/video/out/opengl/hwdec_cuda.c
index 5aefed106d..321826eb49 100644
--- a/video/out/opengl/hwdec_cuda.c
+++ b/video/out/opengl/hwdec_cuda.c
@@ -326,24 +326,8 @@ static int mapper_map(struct ra_hwdec_mapper *mapper)
}
const struct ra_hwdec_driver ra_hwdec_cuda = {
- .name = "cuda",
- .api = HWDEC_CUDA,
- .imgfmts = {IMGFMT_CUDA, 0},
- .priv_size = sizeof(struct priv_owner),
- .init = cuda_init,
- .uninit = cuda_uninit,
- .mapper = &(const struct ra_hwdec_mapper_driver){
- .priv_size = sizeof(struct priv),
- .init = mapper_init,
- .uninit = mapper_uninit,
- .map = mapper_map,
- .unmap = mapper_unmap,
- },
-};
-
-const struct ra_hwdec_driver ra_hwdec_cuda_nvdec = {
.name = "cuda-nvdec",
- .api = HWDEC_NVDEC,
+ .api = HWDEC_CUDA,
.imgfmts = {IMGFMT_CUDA, 0},
.priv_size = sizeof(struct priv_owner),
.init = cuda_init,