23#include "config_components.h"
31#define MAX_SLICES 1024
32#define INVALID_REF 0xffff
35 DXVA_PictureParameters
pp;
97 const int is_field =
s->picture_structure !=
PICT_FRAME;
98 const unsigned mb_count =
s->mb_width * (
s->mb_height >> is_field);
101 void *mapped_data =
NULL;
102 D3D12_VIDEO_DECODE_FRAME_ARGUMENT *args = &input_args->FrameArguments[input_args->NumFrameArguments++];
104 D3D12_RANGE
range = {
114 if (FAILED(ID3D12Resource_Map(
buffer, 0, &
range, &mapped_data))) {
120 DXVA_SliceInfo *slice = &ctx_pic->
slices[
i];
123 slice->wNumberMBsInSlice = slice[1].wNumberMBsInSlice - slice[0].wNumberMBsInSlice;
125 slice->wNumberMBsInSlice = mb_count - slice[0].wNumberMBsInSlice;
132 args->Type = D3D12_VIDEO_DECODE_ARGUMENT_TYPE_SLICE_CONTROL;
133 args->Size =
sizeof(DXVA_SliceInfo) * ctx_pic->
slice_count;
134 args->pData = ctx_pic->
slices;
136 input_args->CompressedBitstream = (D3D12_VIDEO_DECODE_COMPRESSED_BITSTREAM){
166 ctx->cfg.DecodeProfile = D3D12_VIDEO_DECODE_PROFILE_MPEG2;
168 ctx->max_num_ref = 3;
173#if CONFIG_MPEG2_D3D12VA_HWACCEL
175 .p.name =
"mpeg2_d3d12va",
simple assert() macros that are a bit more flexible than ISO C assert().
#define av_assert0(cond)
assert() equivalent, that is always enabled.
#define i(width, name, range_min, range_max)
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 av_cold int d3d12va_mpeg2_decode_init(AVCodecContext *avctx)
static int update_input_arguments(AVCodecContext *avctx, D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS *input_args, ID3D12Resource *buffer)
static int d3d12va_mpeg2_start_frame(AVCodecContext *avctx, av_unused const AVBufferRef *buffer_ref, av_unused const uint8_t *buffer, av_unused uint32_t size)
static int d3d12va_mpeg2_decode_slice(AVCodecContext *avctx, const uint8_t *buffer, uint32_t size)
static int d3d12va_mpeg2_end_frame(AVCodecContext *avctx)
void ff_dxva2_mpeg2_fill_quantization_matrices(AVCodecContext *avctx, AVDXVAContext *ctx, DXVA_QmatrixData *qm)
void ff_dxva2_mpeg2_fill_picture_parameters(AVCodecContext *avctx, AVDXVAContext *ctx, DXVA_PictureParameters *pp)
void ff_dxva2_mpeg2_fill_slice(AVCodecContext *avctx, DXVA_SliceInfo *slice, unsigned position, const uint8_t *buffer, unsigned size)
@ AV_CODEC_ID_MPEG2VIDEO
preferred ID for MPEG-1/2 video decoding
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
const struct FFHWAccel ff_mpeg2_d3d12va_hwaccel
void ff_mpeg_draw_horiz_band(MpegEncContext *s, int y, int h)
mpegvideo decoder header.
@ AV_PIX_FMT_D3D12
Hardware surfaces for Direct3D 12.
A reference to a data buffer.
main external API structure.
const uint8_t * bitstream
DXVA_SliceInfo slices[MAX_SLICES]
DXVA_PictureParameters pp
This structure is used to provide the necessary configurations and data to the FFmpeg Direct3D 12 HWA...
static AVFormatContext * ctx