|
|
|
@ -27,8 +27,12 @@ |
|
|
|
|
|
|
|
|
|
#include "config.h" |
|
|
|
|
|
|
|
|
|
#if CONFIG_DXVA2 |
|
|
|
|
#include "dxva2.h" |
|
|
|
|
#endif |
|
|
|
|
#if CONFIG_D3D11VA |
|
|
|
|
#include "d3d11va.h" |
|
|
|
|
#endif |
|
|
|
|
#if HAVE_DXVA_H |
|
|
|
|
#include <dxva.h> |
|
|
|
|
#endif |
|
|
|
@ -39,13 +43,22 @@ |
|
|
|
|
typedef void DECODER_BUFFER_DESC; |
|
|
|
|
|
|
|
|
|
typedef union { |
|
|
|
|
#if CONFIG_D3D11VA |
|
|
|
|
struct AVD3D11VAContext d3d11va; |
|
|
|
|
#endif |
|
|
|
|
#if CONFIG_DXVA2 |
|
|
|
|
struct dxva_context dxva2; |
|
|
|
|
#endif |
|
|
|
|
} AVDXVAContext; |
|
|
|
|
|
|
|
|
|
#if CONFIG_D3D11VA |
|
|
|
|
#define D3D11VA_CONTEXT(ctx) (&ctx->d3d11va) |
|
|
|
|
#endif |
|
|
|
|
#if CONFIG_DXVA2 |
|
|
|
|
#define DXVA2_CONTEXT(ctx) (&ctx->dxva2) |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
#if CONFIG_D3D11VA && CONFIG_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]) |
|
|
|
@ -55,6 +68,27 @@ typedef union { |
|
|
|
|
#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) |
|
|
|
|
#elif CONFIG_DXVA2 |
|
|
|
|
#define DXVA_CONTEXT_WORKAROUND(avctx, ctx) (ctx->dxva2.workaround) |
|
|
|
|
#define DXVA_CONTEXT_COUNT(avctx, ctx) (ctx->dxva2.surface_count) |
|
|
|
|
#define DXVA_CONTEXT_SURFACE(avctx, ctx, i) (ctx->dxva2.surface[i]) |
|
|
|
|
#define DXVA_CONTEXT_DECODER(avctx, ctx) (ctx->dxva2.decoder) |
|
|
|
|
#define DXVA_CONTEXT_REPORT_ID(avctx, ctx) (*(&ctx->dxva2.report_id)) |
|
|
|
|
#define DXVA_CONTEXT_CFG(avctx, ctx) (ctx->dxva2.cfg) |
|
|
|
|
#define DXVA_CONTEXT_CFG_BITSTREAM(avctx, ctx) (ctx->dxva2.cfg->ConfigBitstreamRaw) |
|
|
|
|
#define DXVA_CONTEXT_CFG_INTRARESID(avctx, ctx) (ctx->dxva2.cfg->ConfigIntraResidUnsigned) |
|
|
|
|
#define DXVA_CONTEXT_CFG_RESIDACCEL(avctx, ctx) (ctx->dxva2.cfg->ConfigResidDiffAccelerator) |
|
|
|
|
#elif CONFIG_D3D11VA |
|
|
|
|
#define DXVA_CONTEXT_WORKAROUND(avctx, ctx) (ctx->d3d11va.workaround) |
|
|
|
|
#define DXVA_CONTEXT_COUNT(avctx, ctx) (ctx->d3d11va.surface_count) |
|
|
|
|
#define DXVA_CONTEXT_SURFACE(avctx, ctx, i) (ctx->d3d11va.surface[i]) |
|
|
|
|
#define DXVA_CONTEXT_DECODER(avctx, ctx) (ctx->d3d11va.decoder) |
|
|
|
|
#define DXVA_CONTEXT_REPORT_ID(avctx, ctx) (*(&ctx->d3d11va.report_id)) |
|
|
|
|
#define DXVA_CONTEXT_CFG(avctx, ctx) (ctx->d3d11va.cfg) |
|
|
|
|
#define DXVA_CONTEXT_CFG_BITSTREAM(avctx, ctx) (ctx->d3d11va.cfg->ConfigBitstreamRaw) |
|
|
|
|
#define DXVA_CONTEXT_CFG_INTRARESID(avctx, ctx) (ctx->d3d11va.cfg->ConfigIntraResidUnsigned) |
|
|
|
|
#define DXVA_CONTEXT_CFG_RESIDACCEL(avctx, ctx) (ctx->d3d11va.cfg->ConfigResidDiffAccelerator) |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
void *ff_dxva2_get_surface(const AVFrame *frame); |
|
|
|
|
|
|
|
|
|