23 #ifndef AVCODEC_DXVA2_INTERNAL_H
24 #define AVCODEC_DXVA2_INTERNAL_H
45 #define WINAPI_FAMILY WINAPI_FAMILY_DESKTOP_APP
46 #undef _CRT_BUILD_DESKTOP_APP
47 #define _CRT_BUILD_DESKTOP_APP 0
79 ID3D11VideoDecoder *d3d11_decoder;
80 D3D11_VIDEO_DECODER_CONFIG d3d11_config;
81 ID3D11VideoDecoderOutputView **d3d11_views;
83 ID3D11Texture2D *d3d11_texture;
87 IDirectXVideoDecoder *dxva2_decoder;
88 IDirectXVideoDecoderService *dxva2_service;
89 DXVA2_ConfigPictureDecode dxva2_config;
97 #define DXVA_SHARED_CONTEXT(avctx) ((FFDXVASharedContext *)((avctx)->internal->hwaccel_priv_data))
99 #define DXVA_CONTEXT(avctx) (AVDXVAContext *)((avctx)->hwaccel_context ? (avctx)->hwaccel_context : (&(DXVA_SHARED_CONTEXT(avctx)->ctx)))
101 #define D3D11VA_CONTEXT(ctx) (&ctx->d3d11va)
102 #define DXVA2_CONTEXT(ctx) (&ctx->dxva2)
104 #if CONFIG_D3D11VA && CONFIG_DXVA2
105 #define DXVA_CONTEXT_WORKAROUND(avctx, ctx) (ff_dxva2_is_d3d11(avctx) ? ctx->d3d11va.workaround : ctx->dxva2.workaround)
106 #define DXVA_CONTEXT_COUNT(avctx, ctx) (ff_dxva2_is_d3d11(avctx) ? ctx->d3d11va.surface_count : ctx->dxva2.surface_count)
107 #define DXVA_CONTEXT_DECODER(avctx, ctx) (ff_dxva2_is_d3d11(avctx) ? (void *)ctx->d3d11va.decoder : (void *)ctx->dxva2.decoder)
108 #define DXVA_CONTEXT_REPORT_ID(avctx, ctx) (*(ff_dxva2_is_d3d11(avctx) ? &ctx->d3d11va.report_id : &ctx->dxva2.report_id))
109 #define DXVA_CONTEXT_CFG(avctx, ctx) (ff_dxva2_is_d3d11(avctx) ? (void *)ctx->d3d11va.cfg : (void *)ctx->dxva2.cfg)
110 #define DXVA_CONTEXT_CFG_BITSTREAM(avctx, ctx) (ff_dxva2_is_d3d11(avctx) ? ctx->d3d11va.cfg->ConfigBitstreamRaw : ctx->dxva2.cfg->ConfigBitstreamRaw)
111 #define DXVA_CONTEXT_CFG_INTRARESID(avctx, ctx) (ff_dxva2_is_d3d11(avctx) ? ctx->d3d11va.cfg->ConfigIntraResidUnsigned : ctx->dxva2.cfg->ConfigIntraResidUnsigned)
112 #define DXVA_CONTEXT_CFG_RESIDACCEL(avctx, ctx) (ff_dxva2_is_d3d11(avctx) ? ctx->d3d11va.cfg->ConfigResidDiffAccelerator : ctx->dxva2.cfg->ConfigResidDiffAccelerator)
113 #define DXVA_CONTEXT_VALID(avctx, ctx) (DXVA_CONTEXT_DECODER(avctx, ctx) && \
114 DXVA_CONTEXT_CFG(avctx, ctx) && \
115 (ff_dxva2_is_d3d11(avctx) || ctx->dxva2.surface_count))
117 #define DXVA_CONTEXT_WORKAROUND(avctx, ctx) (ctx->dxva2.workaround)
118 #define DXVA_CONTEXT_COUNT(avctx, ctx) (ctx->dxva2.surface_count)
119 #define DXVA_CONTEXT_DECODER(avctx, ctx) (ctx->dxva2.decoder)
120 #define DXVA_CONTEXT_REPORT_ID(avctx, ctx) (*(&ctx->dxva2.report_id))
121 #define DXVA_CONTEXT_CFG(avctx, ctx) (ctx->dxva2.cfg)
122 #define DXVA_CONTEXT_CFG_BITSTREAM(avctx, ctx) (ctx->dxva2.cfg->ConfigBitstreamRaw)
123 #define DXVA_CONTEXT_CFG_INTRARESID(avctx, ctx) (ctx->dxva2.cfg->ConfigIntraResidUnsigned)
124 #define DXVA_CONTEXT_CFG_RESIDACCEL(avctx, ctx) (ctx->dxva2.cfg->ConfigResidDiffAccelerator)
125 #define DXVA_CONTEXT_VALID(avctx, ctx) (ctx->dxva2.decoder && ctx->dxva2.cfg && ctx->dxva2.surface_count)
127 #define DXVA_CONTEXT_WORKAROUND(avctx, ctx) (ctx->d3d11va.workaround)
128 #define DXVA_CONTEXT_COUNT(avctx, ctx) (ctx->d3d11va.surface_count)
129 #define DXVA_CONTEXT_DECODER(avctx, ctx) (ctx->d3d11va.decoder)
130 #define DXVA_CONTEXT_REPORT_ID(avctx, ctx) (*(&ctx->d3d11va.report_id))
131 #define DXVA_CONTEXT_CFG(avctx, ctx) (ctx->d3d11va.cfg)
132 #define DXVA_CONTEXT_CFG_BITSTREAM(avctx, ctx) (ctx->d3d11va.cfg->ConfigBitstreamRaw)
133 #define DXVA_CONTEXT_CFG_INTRARESID(avctx, ctx) (ctx->d3d11va.cfg->ConfigIntraResidUnsigned)
134 #define DXVA_CONTEXT_CFG_RESIDACCEL(avctx, ctx) (ctx->d3d11va.cfg->ConfigResidDiffAccelerator)
135 #define DXVA_CONTEXT_VALID(avctx, ctx) (ctx->d3d11va.decoder && ctx->d3d11va.cfg)
149 const void *pp,
unsigned pp_size,
150 const void *qm,
unsigned qm_size,
Libavcodec external API header.
Public libavcodec D3D11VA header.
Public libavcodec DXVA2 header.
int ff_dxva2_is_d3d11(const AVCodecContext *avctx)
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 *, DECODER_BUFFER_DESC *bs, DECODER_BUFFER_DESC *slice))
int ff_dxva2_decode_init(AVCodecContext *avctx)
int ff_dxva2_decode_uninit(AVCodecContext *avctx)
int ff_dxva2_common_frame_params(AVCodecContext *avctx, AVBufferRef *hw_frames_ctx)
int ff_dxva2_commit_buffer(AVCodecContext *, AVDXVAContext *, DECODER_BUFFER_DESC *, unsigned type, const void *data, unsigned size, unsigned mb_count)
unsigned ff_dxva2_get_surface_index(const AVCodecContext *avctx, const AVDXVAContext *, const AVFrame *frame)
An API-specific header for AV_HWDEVICE_TYPE_D3D11VA.
An API-specific header for AV_HWDEVICE_TYPE_DXVA2.
common internal API header
AVPixelFormat
Pixel format.
A reference to a data buffer.
main external API structure.
This structure is used to provides the necessary configurations and data to the Direct3D11 FFmpeg HWA...
This structure describes decoded (raw) audio or video data.
This struct aggregates all the (hardware/vendor-specific) "high-level" state, i.e.
AVHWDeviceContext * device_ctx
enum AVPixelFormat pix_fmt
AVBufferRef * decoder_ref
This structure is used to provides the necessary configurations and data to the DXVA2 FFmpeg HWAccel ...