34 DXVA_PicParams_VP9
pp;
43 av_assert0((index & 0x7f) == index && (flag & 0x01) == flag);
44 pic->bPicEntry = index | (flag << 7);
48 DXVA_PicParams_VP9 *pp)
56 memset(pp, 0,
sizeof(*pp));
61 pp->wFormatAndPictureInfoFlags = ((h->
h.
keyframe == 0) << 0) |
75 pp->width = avctx->
width;
76 pp->height = avctx->
height;
77 pp->BitDepthMinus8Luma = pixdesc->
comp[0].
depth - 8;
78 pp->BitDepthMinus8Chroma = pixdesc->
comp[1].
depth - 8;
81 pp->Reserved8Bits = 0;
83 for (i = 0; i < 8; i++) {
86 pp->ref_frame_coded_width[i] = h->
refs[i].
f->
width;
87 pp->ref_frame_coded_height[i] = h->
refs[i].
f->
height;
89 pp->ref_frame_map[i].bPicEntry = 0xFF;
92 for (i = 0; i < 3; i++) {
97 pp->frame_refs[i].bPicEntry = 0xFF;
99 pp->ref_frame_sign_bias[i + 1] = h->
h.
signbias[i];
110 for (i = 0; i < 4; i++)
113 for (i = 0; i < 2; i++)
128 for (i = 0; i < 7; i++)
132 for (i = 0; i < 3; i++)
135 memset(pp->stVP9Segments.pred_probs, 255,
sizeof(pp->stVP9Segments.pred_probs));
137 for (i = 0; i < 8; i++) {
146 pp->stVP9Segments.feature_data[i][3] = 0;
155 pp->StatusReportFeedbackNumber = 1 + DXVA_CONTEXT_REPORT_ID(avctx, ctx)++;
160 unsigned position,
unsigned size)
162 memset(slice, 0,
sizeof(*slice));
163 slice->BSNALunitDataLocation = position;
164 slice->SliceBytesInBuffer =
size;
165 slice->wBadSliceChopping = 0;
183 type = D3D11_VIDEO_DECODER_BUFFER_BITSTREAM;
184 if (
FAILED(ID3D11VideoContext_GetDecoderBuffer(D3D11VA_CONTEXT(ctx)->video_context,
187 &dxva_size, &dxva_data_ptr)))
193 type = DXVA2_BitStreamDateBufferType;
194 if (
FAILED(IDirectXVideoDecoder_GetBuffer(DXVA2_CONTEXT(ctx)->
decoder,
196 &dxva_data_ptr, &dxva_size)))
201 dxva_data = dxva_data_ptr;
203 if (ctx_pic->
slice.SliceBytesInBuffer > dxva_size) {
208 memcpy(dxva_data, ctx_pic->
bitstream, ctx_pic->
slice.SliceBytesInBuffer);
210 padding =
FFMIN(128 - ((ctx_pic->
slice.SliceBytesInBuffer) & 127), dxva_size - ctx_pic->
slice.SliceBytesInBuffer);
212 memset(dxva_data + ctx_pic->
slice.SliceBytesInBuffer, 0, padding);
213 ctx_pic->
slice.SliceBytesInBuffer += padding;
218 if (
FAILED(ID3D11VideoContext_ReleaseDecoderBuffer(D3D11VA_CONTEXT(ctx)->video_context, D3D11VA_CONTEXT(ctx)->
decoder, type)))
223 if (
FAILED(IDirectXVideoDecoder_ReleaseBuffer(DXVA2_CONTEXT(ctx)->
decoder, type)))
229 D3D11_VIDEO_DECODER_BUFFER_DESC *dsc11 = bs;
230 memset(dsc11, 0,
sizeof(*dsc11));
231 dsc11->BufferType =
type;
232 dsc11->DataSize = ctx_pic->
slice.SliceBytesInBuffer;
233 dsc11->NumMBsInBuffer = 0;
235 type = D3D11_VIDEO_DECODER_BUFFER_SLICE_CONTROL;
240 DXVA2_DecodeBufferDesc *dsc2 = bs;
241 memset(dsc2, 0,
sizeof(*dsc2));
242 dsc2->CompressedBufferType =
type;
243 dsc2->DataSize = ctx_pic->
slice.SliceBytesInBuffer;
244 dsc2->NumMBsInBuffer = 0;
246 type = DXVA2_SliceControlBufferType;
264 if (DXVA_CONTEXT_DECODER(avctx, ctx) ==
NULL ||
265 DXVA_CONTEXT_CFG(avctx, ctx) ==
NULL ||
266 DXVA_CONTEXT_COUNT(avctx, ctx) <= 0)
307 &ctx_pic->
pp,
sizeof(ctx_pic->
pp),
313 #if CONFIG_VP9_DXVA2_HWACCEL
326 #if CONFIG_VP9_D3D11VA_HWACCEL
328 .
name =
"vp9_d3d11va",
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
AVBufferRef * buf[AV_NUM_DATA_POINTERS]
AVBuffer references backing the data for this frame.
static int commit_bitstream_and_slice_buffer(AVCodecContext *avctx, DECODER_BUFFER_DESC *bs, DECODER_BUFFER_DESC *sc)
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
uint8_t log2_chroma_w
Amount to shift the luma width right to find the chroma width.
#define av_assert0(cond)
assert() equivalent, that is always enabled.
static void fill_slice_short(DXVA_Slice_VPx_Short *slice, unsigned position, unsigned size)
AVComponentDescriptor comp[4]
Parameters that describe how pixels are packed.
void * hwaccel_context
Hardware accelerator context.
int ff_dxva2_common_end_frame(AVCodecContext *avctx, AVFrame *frame, 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 width
width and height of the video frame
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
uint8_t log2_chroma_h
Amount to shift the luma height right to find the chroma height.
const uint8_t * bitstream
void * hwaccel_picture_private
simple assert() macros that are a bit more flexible than ISO C assert().
const char * name
Name of the hardware accelerated codec.
static const chunk_decoder decoder[8]
int width
picture width / height.
static void fill_picture_entry(DXVA_PicEntry_VPx *pic, unsigned index, unsigned flag)
unsigned ff_dxva2_get_surface_index(const AVCodecContext *avctx, const AVDXVAContext *ctx, const AVFrame *frame)
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
main external API structure.
int ff_dxva2_commit_buffer(AVCodecContext *avctx, AVDXVAContext *ctx, DECODER_BUFFER_DESC *dsc, unsigned type, const void *data, unsigned size, unsigned mb_count)
static int fill_picture_parameters(const AVCodecContext *avctx, AVDXVAContext *ctx, const VP9SharedContext *h, DXVA_PicParams_VP9 *pp)
HW decoding through DXVA2, Picture.data[3] contains a LPDIRECT3DSURFACE9 pointer. ...
static int dxva2_vp9_end_frame(AVCodecContext *avctx)
DXVA_Slice_VPx_Short slice
static int dxva2_vp9_decode_slice(AVCodecContext *avctx, const uint8_t *buffer, uint32_t size)
static int dxva2_vp9_start_frame(AVCodecContext *avctx, av_unused const uint8_t *buffer, av_unused uint32_t size)
HW decoding through Direct3D11, Picture.data[3] contains a ID3D11VideoDecoderOutputView pointer...
int depth
Number of bits in the component.
enum AVPixelFormat sw_pix_fmt
Nominal unaccelerated pixel format, see AV_PIX_FMT_xxx.