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,
 
This struct aggregates all the (hardware/vendor-specific) "high-level" state, i.e. 
 
int ff_dxva2_decode_init(AVCodecContext *avctx)
 
This structure is used to provides the necessary configurations and data to the Direct3D11 FFmpeg HWA...
 
int ff_dxva2_common_frame_params(AVCodecContext *avctx, AVBufferRef *hw_frames_ctx)
 
This structure describes decoded (raw) audio or video data. 
 
int ff_dxva2_commit_buffer(AVCodecContext *, AVDXVAContext *, DECODER_BUFFER_DESC *, unsigned type, const void *data, unsigned size, unsigned mb_count)
 
ptrdiff_t const GLvoid * data
 
An API-specific header for AV_HWDEVICE_TYPE_D3D11VA. 
 
An API-specific header for AV_HWDEVICE_TYPE_DXVA2. 
 
Public libavcodec D3D11VA header. 
 
unsigned ff_dxva2_get_surface_index(const AVCodecContext *avctx, const AVDXVAContext *, const AVFrame *frame)
 
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))
 
AVHWDeviceContext * device_ctx
 
enum AVPixelFormat pix_fmt
 
Public libavcodec DXVA2 header. 
 
Libavcodec external API header. 
 
main external API structure. 
 
AVBufferRef * decoder_ref
 
A reference to a data buffer. 
 
common internal api header. 
 
int ff_dxva2_decode_uninit(AVCodecContext *avctx)
 
int ff_dxva2_is_d3d11(const AVCodecContext *avctx)
 
AVPixelFormat
Pixel format. 
 
This structure is used to provides the necessary configurations and data to the DXVA2 FFmpeg HWAccel ...