From 084162d6fe9033cb3499a7013a2489a70e1aed93 Mon Sep 17 00:00:00 2001 From: Kevin Mitchell Date: Sat, 30 Jan 2016 01:04:34 -0800 Subject: dxva2: add interop (non-copyback) hwdec_type This always falls back to software decoding right now. VO support will be added in future commits. --- options/options.c | 1 + video/decode/dxva2.c | 16 ++++++++++++++-- video/decode/vd_lavc.c | 2 ++ video/hwdec.h | 5 +++-- 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/options/options.c b/options/options.c index e1be68dc07..ac7d706222 100644 --- a/options/options.c +++ b/options/options.c @@ -86,6 +86,7 @@ const struct m_opt_choice_alternatives mp_hwdec_names[] = { {"videotoolbox",HWDEC_VIDEOTOOLBOX}, {"vaapi", HWDEC_VAAPI}, {"vaapi-copy", HWDEC_VAAPI_COPY}, + {"dxva2", HWDEC_DXVA2}, {"dxva2-copy", HWDEC_DXVA2_COPY}, {"rpi", HWDEC_RPI}, {0} diff --git a/video/decode/dxva2.c b/video/decode/dxva2.c index 987da326d0..4cc1dcf630 100644 --- a/video/decode/dxva2.c +++ b/video/decode/dxva2.c @@ -296,9 +296,11 @@ static int dxva2_init(struct lavc_ctx *s) s->hwdec_priv = ctx; ctx->log = mp_log_new(s, s->log, "dxva2"); - ctx->sw_pool = talloc_steal(ctx, mp_image_pool_new(17)); - mp_check_gpu_memcpy(ctx->log, NULL); + if (s->hwdec->type == HWDEC_DXVA2_COPY) { + mp_check_gpu_memcpy(ctx->log, NULL); + ctx->sw_pool = talloc_steal(ctx, mp_image_pool_new(17)); + } ctx->deviceHandle = INVALID_HANDLE_VALUE; @@ -633,6 +635,16 @@ static int probe(struct vd_lavc_hwdec *hwdec, struct mp_hwdec_info *info, return HWDEC_ERR_NO_CODEC; } +const struct vd_lavc_hwdec mp_vd_lavc_dxva2 = { + .type = HWDEC_DXVA2, + .image_format = IMGFMT_DXVA2, + .probe = probe, + .init = dxva2_init, + .uninit = dxva2_uninit, + .init_decoder = dxva2_init_decoder, + .allocate_image = dxva2_allocate_image, +}; + const struct vd_lavc_hwdec mp_vd_lavc_dxva2_copy = { .type = HWDEC_DXVA2_COPY, .image_format = IMGFMT_DXVA2, diff --git a/video/decode/vd_lavc.c b/video/decode/vd_lavc.c index ef713c2d65..19c05a9c2f 100644 --- a/video/decode/vd_lavc.c +++ b/video/decode/vd_lavc.c @@ -124,6 +124,7 @@ extern const struct vd_lavc_hwdec mp_vd_lavc_vdpau; extern const struct vd_lavc_hwdec mp_vd_lavc_videotoolbox; extern const struct vd_lavc_hwdec mp_vd_lavc_vaapi; extern const struct vd_lavc_hwdec mp_vd_lavc_vaapi_copy; +extern const struct vd_lavc_hwdec mp_vd_lavc_dxva2; extern const struct vd_lavc_hwdec mp_vd_lavc_dxva2_copy; extern const struct vd_lavc_hwdec mp_vd_lavc_rpi; @@ -142,6 +143,7 @@ static const struct vd_lavc_hwdec *const hwdec_list[] = { &mp_vd_lavc_vaapi_copy, #endif #if HAVE_DXVA2_HWACCEL + &mp_vd_lavc_dxva2, &mp_vd_lavc_dxva2_copy, #endif NULL diff --git a/video/hwdec.h b/video/hwdec.h index f2a72aef99..1588901442 100644 --- a/video/hwdec.h +++ b/video/hwdec.h @@ -13,8 +13,9 @@ enum hwdec_type { HWDEC_VIDEOTOOLBOX = 3, HWDEC_VAAPI = 4, HWDEC_VAAPI_COPY = 5, - HWDEC_DXVA2_COPY = 6, - HWDEC_RPI = 7, + HWDEC_DXVA2 = 6, + HWDEC_DXVA2_COPY = 7, + HWDEC_RPI = 8, }; // hwdec_type names (options.c) -- cgit v1.2.3