diff options
author | Steve Lhomme <robux4@videolabs.io> | 2015-05-11 10:52:47 +0200 |
---|---|---|
committer | Luca Barbato <lu_zero@gentoo.org> | 2015-05-25 11:47:08 +0200 |
commit | d8039ef8d221ea273aa4f1e62e5df21bf618c772 (patch) | |
tree | e2d844c800e9e01d0fb5d755aa9df1cb53051840 /libavcodec/dxva2_internal.h | |
parent | 4e17946f10d39eec6cc03fb249ae8147373141b6 (diff) | |
download | ffmpeg-d8039ef8d221ea273aa4f1e62e5df21bf618c772.tar.gz |
D3D11va: add a Direct3D11 video decoder similar to DXVA2
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
Diffstat (limited to 'libavcodec/dxva2_internal.h')
-rw-r--r-- | libavcodec/dxva2_internal.h | 32 |
1 files changed, 27 insertions, 5 deletions
diff --git a/libavcodec/dxva2_internal.h b/libavcodec/dxva2_internal.h index b775e6c304..23be2c36f3 100644 --- a/libavcodec/dxva2_internal.h +++ b/libavcodec/dxva2_internal.h @@ -28,6 +28,7 @@ #include "config.h" #include "dxva2.h" +#include "d3d11va.h" #if HAVE_DXVA_H #include <dxva.h> #endif @@ -35,13 +36,34 @@ #include "avcodec.h" #include "mpegvideo.h" +typedef void DECODER_BUFFER_DESC; + +typedef union { + struct AVD3D11VAContext d3d11va; + struct dxva_context dxva2; +} AVDXVAContext; + +#define D3D11VA_CONTEXT(ctx) (&ctx->d3d11va) +#define DXVA2_CONTEXT(ctx) (&ctx->dxva2) + +#define DXVA_CONTEXT_WORKAROUND(avctx, ctx) (avctx->pix_fmt == AV_PIX_FMT_D3D11VA_VLD ? ctx->d3d11va.workaround : ctx->dxva2.workaround) +#define DXVA_CONTEXT_COUNT(avctx, ctx) (avctx->pix_fmt == AV_PIX_FMT_D3D11VA_VLD ? ctx->d3d11va.surface_count : ctx->dxva2.surface_count) +#define DXVA_CONTEXT_SURFACE(avctx, ctx, i) (avctx->pix_fmt == AV_PIX_FMT_D3D11VA_VLD ? ctx->d3d11va.surface[i] : ctx->dxva2.surface[i]) +#define DXVA_CONTEXT_DECODER(avctx, ctx) (avctx->pix_fmt == AV_PIX_FMT_D3D11VA_VLD ? ctx->d3d11va.decoder : ctx->dxva2.decoder) +#define DXVA_CONTEXT_REPORT_ID(avctx, ctx) (*(avctx->pix_fmt == AV_PIX_FMT_D3D11VA_VLD ? &ctx->d3d11va.report_id : &ctx->dxva2.report_id)) +#define DXVA_CONTEXT_CFG(avctx, ctx) (avctx->pix_fmt == AV_PIX_FMT_D3D11VA_VLD ? ctx->d3d11va.cfg : ctx->dxva2.cfg) +#define DXVA_CONTEXT_CFG_BITSTREAM(avctx, ctx) (avctx->pix_fmt == AV_PIX_FMT_D3D11VA_VLD ? ctx->d3d11va.cfg->ConfigBitstreamRaw : ctx->dxva2.cfg->ConfigBitstreamRaw) +#define DXVA_CONTEXT_CFG_INTRARESID(avctx, ctx) (avctx->pix_fmt == AV_PIX_FMT_D3D11VA_VLD ? ctx->d3d11va.cfg->ConfigIntraResidUnsigned : ctx->dxva2.cfg->ConfigIntraResidUnsigned) +#define DXVA_CONTEXT_CFG_RESIDACCEL(avctx, ctx) (avctx->pix_fmt == AV_PIX_FMT_D3D11VA_VLD ? ctx->d3d11va.cfg->ConfigResidDiffAccelerator : ctx->dxva2.cfg->ConfigResidDiffAccelerator) + void *ff_dxva2_get_surface(const AVFrame *frame); -unsigned ff_dxva2_get_surface_index(const struct dxva_context *, +unsigned ff_dxva2_get_surface_index(const AVCodecContext *avctx, + const AVDXVAContext *, const AVFrame *frame); -int ff_dxva2_commit_buffer(AVCodecContext *, struct dxva_context *, - DXVA2_DecodeBufferDesc *, +int ff_dxva2_commit_buffer(AVCodecContext *, AVDXVAContext *, + DECODER_BUFFER_DESC *, unsigned type, const void *data, unsigned size, unsigned mb_count); @@ -50,7 +72,7 @@ int ff_dxva2_common_end_frame(AVCodecContext *, AVFrame *, const void *pp, unsigned pp_size, const void *qm, unsigned qm_size, int (*commit_bs_si)(AVCodecContext *, - DXVA2_DecodeBufferDesc *bs, - DXVA2_DecodeBufferDesc *slice)); + DECODER_BUFFER_DESC *bs, + DECODER_BUFFER_DESC *slice)); #endif /* AVCODEC_DXVA_INTERNAL_H */ |