23#include "config_components.h"
34 DXVA_PicParams_VP9
pp;
42 memset(slice, 0,
sizeof(*slice));
43 slice->BSNALunitDataLocation = position;
44 slice->SliceBytesInBuffer =
size;
45 slice->wBadSliceChopping = 0;
96 D3D12_VIDEO_DECODE_FRAME_ARGUMENT *args;
98 if (ctx_pic->
slice.SliceBytesInBuffer >
ctx->bitstream_size) {
103 if (FAILED(ID3D12Resource_Map(
buffer, 0,
NULL, &mapped_data))) {
108 args = &input_args->FrameArguments[input_args->NumFrameArguments++];
109 args->Type = D3D12_VIDEO_DECODE_ARGUMENT_TYPE_SLICE_CONTROL;
110 args->Size =
sizeof(ctx_pic->
slice);
111 args->pData = &ctx_pic->
slice;
113 memcpy(mapped_data, ctx_pic->
bitstream, ctx_pic->
slice.SliceBytesInBuffer);
117 input_args->CompressedBitstream = (D3D12_VIDEO_DECODE_COMPRESSED_BITSTREAM){
120 .Size = ctx_pic->
slice.SliceBytesInBuffer,
141 DXVA_PicParams_VP9 pp;
146 ctx->cfg.DecodeProfile = D3D12_VIDEO_DECODE_PROFILE_VP9_10BIT_PROFILE2;
152 ctx->cfg.DecodeProfile = D3D12_VIDEO_DECODE_PROFILE_VP9;
161#if CONFIG_VP9_D3D12VA_HWACCEL
163 .p.name =
"vp9_d3d12va",
simple assert() macros that are a bit more flexible than ISO C assert().
#define av_assert0(cond)
assert() equivalent, that is always enabled.
static int update_input_arguments(AVCodecContext *avctx, D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS *input_args, ID3D12Resource *buffer)
av_cold int ff_d3d12va_decode_init(AVCodecContext *avctx)
init D3D12VADecodeContext
int ff_d3d12va_common_frame_params(AVCodecContext *avctx, AVBufferRef *hw_frames_ctx)
d3d12va common frame params
av_cold int ff_d3d12va_decode_uninit(AVCodecContext *avctx)
uninit D3D12VADecodeContext
int ff_d3d12va_common_end_frame(AVCodecContext *avctx, AVFrame *frame, const void *pp, unsigned pp_size, const void *qm, unsigned qm_size, int(*update_input_arguments)(AVCodecContext *, D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS *, ID3D12Resource *))
d3d12va common end frame
#define D3D12VA_DECODE_CONTEXT(avctx)
static void fill_slice_short(DXVA_Slice_VPx_Short *slice, unsigned position, unsigned size)
static int update_input_arguments(AVCodecContext *avctx, D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS *input_args, ID3D12Resource *buffer)
static int d3d12va_vp9_start_frame(AVCodecContext *avctx, av_unused const AVBufferRef *buffer_ref, av_unused const uint8_t *buffer, av_unused uint32_t size)
static int d3d12va_vp9_end_frame(AVCodecContext *avctx)
static av_cold int d3d12va_vp9_decode_init(AVCodecContext *avctx)
static int d3d12va_vp9_decode_slice(AVCodecContext *avctx, const uint8_t *buffer, uint32_t size)
int ff_dxva2_vp9_fill_picture_parameters(const AVCodecContext *avctx, AVDXVAContext *ctx, DXVA_PicParams_VP9 *pp)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
const struct FFHWAccel ff_vp9_d3d12va_hwaccel
@ AV_PIX_FMT_D3D12
Hardware surfaces for Direct3D 12.
#define FF_ARRAY_ELEMS(a)
A reference to a data buffer.
main external API structure.
This structure is used to provide the necessary configurations and data to the FFmpeg Direct3D 12 HWA...
DXVA_Slice_VPx_Short slice
const uint8_t * bitstream
static AVFormatContext * ctx