33     DXVA_PicParams_H264   
pp;
 
   45     assert((index&0x7f) == index && (flag&0x01) == flag);
 
   46     pic->bPicEntry = index | (flag << 7);
 
   50                                     DXVA_PicParams_H264 *pp)
 
   55     memset(pp, 0, 
sizeof(*pp));
 
   61     pp->UsedForReferenceFlags  = 0;
 
   62     pp->NonExistingFrameFlags  = 0;
 
   65         if (j < h->short_ref_count) {
 
   69             while (!r && j < h->short_ref_count + 16)
 
   78                 pp->FieldOrderCntList[i][0] = r->
field_poc[0];
 
   80                 pp->FieldOrderCntList[i][1] = r->
field_poc[1];
 
   84                 pp->UsedForReferenceFlags |= 1 << (2*i + 0);
 
   86                 pp->UsedForReferenceFlags |= 1 << (2*i + 1);
 
   88             pp->RefFrameList[i].bPicEntry = 0xff;
 
   89             pp->FieldOrderCntList[i][0]   = 0;
 
   90             pp->FieldOrderCntList[i][1]   = 0;
 
   91             pp->FrameNumList[i]           = 0;
 
   95     pp->wFrameWidthInMbsMinus1        = h->
mb_width  - 1;
 
   96     pp->wFrameHeightInMbsMinus1       = h->
mb_height - 1;
 
  122         pp->Reserved16Bits            = 0;
 
  124         pp->Reserved16Bits            = 0x34c;
 
  126         pp->Reserved16Bits            = 3; 
 
  127     pp->StatusReportFeedbackNumber    = 1 + DXVA_CONTEXT_REPORT_ID(avctx, ctx)++;
 
  128     pp->CurrFieldOrderCnt[0] = 0;
 
  130         current_picture->
field_poc[0] != INT_MAX)
 
  131         pp->CurrFieldOrderCnt[0] = current_picture->
field_poc[0];
 
  132     pp->CurrFieldOrderCnt[1] = 0;
 
  134         current_picture->
field_poc[1] != INT_MAX)
 
  135         pp->CurrFieldOrderCnt[1] = current_picture->
field_poc[1];
 
  136     pp->pic_init_qs_minus26           = h->
pps.
init_qs - 26;
 
  139     pp->ContinuationFlag              = 1;
 
  140     pp->pic_init_qp_minus26           = h->
pps.
init_qp - 26;
 
  141     pp->num_ref_idx_l0_active_minus1  = h->
pps.
ref_count[0] - 1;
 
  142     pp->num_ref_idx_l1_active_minus1  = h->
pps.
ref_count[1] - 1;
 
  143     pp->Reserved8BitsA                = 0;
 
  152     pp->entropy_coding_mode_flag      = h->
pps.
cabac;
 
  158     pp->Reserved8BitsB                = 0;
 
  159     pp->slice_group_change_rate_minus1= 0;  
 
  166     memset(qm, 0, 
sizeof(*qm));
 
  168         for (i = 0; i < 6; i++)
 
  169             for (j = 0; j < 16; j++)
 
  172         for (i = 0; i < 64; i++) {
 
  177         for (i = 0; i < 6; i++)
 
  178             for (j = 0; j < 16; j++)
 
  181         for (i = 0; i < 64; i++) {
 
  190     assert(DXVA_CONTEXT_CFG_BITSTREAM(avctx, ctx) == 1 ||
 
  191            DXVA_CONTEXT_CFG_BITSTREAM(avctx, ctx) == 2);
 
  192     return DXVA_CONTEXT_CFG_BITSTREAM(avctx, ctx) == 2;
 
  196                              unsigned position, 
unsigned size)
 
  198     memset(slice, 0, 
sizeof(*slice));
 
  199     slice->BSNALunitDataLocation = position;
 
  200     slice->SliceBytesInBuffer    = 
size;
 
  201     slice->wBadSliceChopping     = 0;
 
  208         if ((pp->RefFrameList[i].bPicEntry & 0x7f) == surface_index)
 
  215                             const DXVA_PicParams_H264 *pp, 
unsigned position, 
unsigned size)
 
  222     memset(slice, 0, 
sizeof(*slice));
 
  223     slice->BSNALunitDataLocation = position;
 
  224     slice->SliceBytesInBuffer    = 
size;
 
  225     slice->wBadSliceChopping     = 0;
 
  228     slice->NumMbsForSlice        = 0; 
 
  232         slice->slice_type += 5;
 
  236         slice->num_ref_idx_l0_active_minus1 = sl->
ref_count[0] - 1;
 
  238         slice->num_ref_idx_l1_active_minus1 = sl->
ref_count[1] - 1;
 
  241     slice->Reserved8Bits                = 0;
 
  243     for (list = 0; list < 2; list++) {
 
  246             if (list < sl->list_count && i < sl->ref_count[list]) {
 
  256                 for (plane = 0; plane < 3; plane++) {
 
  269                     slice->Weights[list][i][
plane][0] = w;
 
  270                     slice->Weights[list][i][
plane][1] = o;
 
  274                 slice->RefPicList[list][i].bPicEntry = 0xff;
 
  275                 for (plane = 0; plane < 3; plane++) {
 
  276                     slice->Weights[list][i][
plane][0] = 0;
 
  277                     slice->Weights[list][i][
plane][1] = 0;
 
  282     slice->slice_qs_delta    = 0; 
 
  305     void     *dxva_data_ptr = 
NULL;
 
  307     unsigned dxva_size = 0;
 
  317         type = D3D11_VIDEO_DECODER_BUFFER_BITSTREAM;
 
  318         if (
FAILED(ID3D11VideoContext_GetDecoderBuffer(D3D11VA_CONTEXT(ctx)->video_context,
 
  321                                                        &dxva_size, &dxva_data_ptr)))
 
  327         type = DXVA2_BitStreamDateBufferType;
 
  328         if (
FAILED(IDirectXVideoDecoder_GetBuffer(DXVA2_CONTEXT(ctx)->
decoder,
 
  330                                                   &dxva_data_ptr, &dxva_size)))
 
  335     dxva_data = dxva_data_ptr;
 
  337     end = dxva_data + dxva_size;
 
  341         static const unsigned start_code_size = 
sizeof(
start_code);
 
  342         unsigned position, 
size;
 
  344         assert(offsetof(DXVA_Slice_H264_Short, BSNALunitDataLocation) ==
 
  345                offsetof(DXVA_Slice_H264_Long,  BSNALunitDataLocation));
 
  346         assert(offsetof(DXVA_Slice_H264_Short, SliceBytesInBuffer) ==
 
  347                offsetof(DXVA_Slice_H264_Long,  SliceBytesInBuffer));
 
  352             slice = (DXVA_Slice_H264_Short*)&ctx_pic->
slice_long[i];
 
  354         position = slice->BSNALunitDataLocation;
 
  355         size     = slice->SliceBytesInBuffer;
 
  356         if (start_code_size + size > end - current) {
 
  361         slice->BSNALunitDataLocation = current - dxva_data;
 
  362         slice->SliceBytesInBuffer    = start_code_size + 
size;
 
  365             DXVA_Slice_H264_Long *
slice_long = (DXVA_Slice_H264_Long*)slice;
 
  367                 slice_long->NumMbsForSlice =
 
  368                     slice_long[1].first_mb_in_slice - slice_long[0].first_mb_in_slice;
 
  370                 slice_long->NumMbsForSlice = mb_count - slice_long->first_mb_in_slice;
 
  373         memcpy(current, start_code, start_code_size);
 
  374         current += start_code_size;
 
  376         memcpy(current, &ctx_pic->
bitstream[position], size);
 
  379     padding = 
FFMIN(128 - ((current - dxva_data) & 127), end - current);
 
  380     if (slice && padding > 0) {
 
  381         memset(current, 0, padding);
 
  384         slice->SliceBytesInBuffer += padding;
 
  388         if (
FAILED(ID3D11VideoContext_ReleaseDecoderBuffer(D3D11VA_CONTEXT(ctx)->video_context, D3D11VA_CONTEXT(ctx)->
decoder, type)))
 
  393         if (
FAILED(IDirectXVideoDecoder_ReleaseBuffer(DXVA2_CONTEXT(ctx)->
decoder, type)))
 
  401         D3D11_VIDEO_DECODER_BUFFER_DESC *dsc11 = bs;
 
  402         memset(dsc11, 0, 
sizeof(*dsc11));
 
  403         dsc11->BufferType           = 
type;
 
  404         dsc11->DataSize             = current - dxva_data;
 
  405         dsc11->NumMBsInBuffer       = mb_count;
 
  407         type = D3D11_VIDEO_DECODER_BUFFER_SLICE_CONTROL;
 
  412         DXVA2_DecodeBufferDesc *dsc2 = bs;
 
  413         memset(dsc2, 0, 
sizeof(*dsc2));
 
  414         dsc2->CompressedBufferType = 
type;
 
  415         dsc2->DataSize             = current - dxva_data;
 
  416         dsc2->NumMBsInBuffer       = mb_count;
 
  418         type = DXVA2_SliceControlBufferType;
 
  429     assert((bs->DataSize & 127) == 0);
 
  432                                   slice_data, slice_size, mb_count);
 
  444     if (DXVA_CONTEXT_DECODER(avctx, ctx) == 
NULL ||
 
  445         DXVA_CONTEXT_CFG(avctx, ctx) == 
NULL ||
 
  446         DXVA_CONTEXT_COUNT(avctx, ctx) <= 0)
 
  486                         &ctx_pic->
pp, position, size);
 
  490         ctx_pic->
pp.wBitFields &= ~(1 << 15); 
 
  505                                     &ctx_pic->
pp, 
sizeof(ctx_pic->
pp),
 
  506                                     &ctx_pic->
qm, 
sizeof(ctx_pic->
qm),
 
  513 #if CONFIG_H264_DXVA2_HWACCEL 
  515     .
name           = 
"h264_dxva2",
 
  526 #if CONFIG_H264_D3D11VA_HWACCEL 
  528     .
name           = 
"h264_d3d11va",
 
int long_ref
1->long term reference 0->short term reference 
 
int luma_weight[48][2][2]
 
int chroma_qp_index_offset[2]
 
unsigned int ref_count[2]
num_ref_idx_l0/1_active_minus1 + 1 
 
void ff_h264_draw_horiz_band(const H264Context *h, H264SliceContext *sl, int y, int height)
 
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx. 
 
H264Picture * long_ref[32]
 
int luma_weight_flag[2]
7.4.3.2 luma_weight_lX_flag 
 
unsigned int ref_count[2]
num_ref_idx_l0/1_active_minus1 + 1 
 
static void fill_slice_long(AVCodecContext *avctx, DXVA_Slice_H264_Long *slice, const DXVA_PicParams_H264 *pp, unsigned position, unsigned size)
 
DXVA_SliceInfo slice[MAX_SLICES]
 
uint8_t scaling_matrix4[6][16]
 
int deblocking_filter_parameters_present
deblocking_filter_parameters_present_flag 
 
void * hwaccel_context
Hardware accelerator context. 
 
int slice_alpha_c0_offset
 
int bit_depth_chroma
bit_depth_chroma_minus8 + 8 
 
static av_cold int end(AVCodecContext *avctx)
 
static int is_slice_short(const AVCodecContext *avctx, AVDXVAContext *ctx)
 
int cabac
entropy_coding_mode_flag 
 
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))
 
#define PICT_BOTTOM_FIELD
 
static int get_bits_count(const GetBitContext *s)
 
int redundant_pic_cnt_present
redundant_pic_cnt_present_flag 
 
#define FF_DXVA2_WORKAROUND_SCALING_LIST_ZIGZAG
Work around for Direct3D11 and old UVD/UVD+ ATI video cards. 
 
H.264 / AVC / MPEG4 part10 codec. 
 
int mb_aff
mb_adaptive_frame_field_flag 
 
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered. 
 
int poc_type
pic_order_cnt_type 
 
int constrained_intra_pred
constrained_intra_pred_flag 
 
void * hwaccel_picture_private
hardware accelerator private data 
 
int deblocking_filter
disable_deblocking_filter_idc with 1 <-> 0 
 
int weighted_pred
weighted_pred_flag 
 
int direct_spatial_mv_pred
 
int frame_num
frame_num (raw frame_num from slice header) 
 
int residual_color_transform_flag
residual_colour_transform_flag 
 
int delta_pic_order_always_zero_flag
 
#define FIELD_OR_MBAFF_PICTURE(h)
 
static void fill_picture_parameters(const AVCodecContext *avctx, AVDXVAContext *ctx, const H264Context *h, DXVA_PicParams_H264 *pp)
 
uint8_t scaling_matrix8[6][64]
 
int ref_frame_count
num_ref_frames 
 
const char * name
Name of the hardware accelerated codec. 
 
static const chunk_decoder decoder[8]
 
#define FF_DXVA2_WORKAROUND_INTEL_CLEARVIDEO
Work around for Direct3D11 and old Intel GPUs with ClearVideo interface. 
 
int init_qp
pic_init_qp_minus26 + 26 
 
H264SliceContext * slice_ctx
 
int direct_8x8_inference_flag
 
int chroma_log2_weight_denom
 
#define FF_ARRAY_ELEMS(a)
 
DXVA_Slice_H264_Long slice_long[MAX_SLICES]
 
int ff_h264_get_slice_type(const H264SliceContext *sl)
Reconstruct bitstream slice_type. 
 
int pic_order_present
pic_order_present_flag 
 
static void fill_slice_short(DXVA_Slice_H264_Short *slice, unsigned position, unsigned size)
 
static int get_refpic_index(const DXVA_PicParams_H264 *pp, int surface_index)
 
H264 / AVC / MPEG4 part10 codec data table  
 
static const uint8_t zigzag_scan[16+1]
 
H264Picture * short_ref[32]
 
unsigned ff_dxva2_get_surface_index(const AVCodecContext *avctx, const AVDXVAContext *ctx, const AVFrame *frame)
 
int field_poc[2]
top/bottom POC 
 
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)
 
H264Picture * cur_pic_ptr
 
static void fill_scaling_lists(const AVCodecContext *avctx, AVDXVAContext *ctx, const H264Context *h, DXVA_Qmatrix_H264 *qm)
 
const uint8_t ff_zigzag_direct[64]
 
int log2_max_poc_lsb
log2_max_pic_order_cnt_lsb_minus4 
 
HW decoding through DXVA2, Picture.data[3] contains a LPDIRECT3DSURFACE9 pointer. ...
 
static int dxva2_h264_decode_slice(AVCodecContext *avctx, const uint8_t *buffer, uint32_t size)
 
static const uint8_t start_code[]
 
int transform_8x8_mode
transform_8x8_mode_flag 
 
static int commit_bitstream_and_slice_buffer(AVCodecContext *avctx, DECODER_BUFFER_DESC *bs, DECODER_BUFFER_DESC *sc)
 
const uint8_t * bitstream
 
int init_qs
pic_init_qs_minus26 + 26 
 
int pic_id
pic_num (short -> no wrap version of pic_num, pic_num & max_pic_num; long -> long_pic_num) ...
 
int log2_max_frame_num
log2_max_frame_num_minus4 + 4 
 
int bit_depth_luma
bit_depth_luma_minus8 + 8 
 
static int dxva2_h264_start_frame(AVCodecContext *avctx, av_unused const uint8_t *buffer, av_unused uint32_t size)
 
static int dxva2_h264_end_frame(AVCodecContext *avctx)
 
int luma_log2_weight_denom
 
int chroma_weight[48][2][2][2]
 
int current_slice
current slice number, used to initialize slice_num of each thread/context 
 
int slice_group_count
num_slice_groups_minus1 + 1 
 
H264Ref ref_list[2][48]
0..15: frame refs, 16..47: mbaff field refs. 
 
HW decoding through Direct3D11, Picture.data[3] contains a ID3D11VideoDecoderOutputView pointer...
 
DXVA_Slice_H264_Short slice_short[MAX_SLICES]
 
static void fill_picture_entry(DXVA_PicEntry_H264 *pic, unsigned index, unsigned flag)
 
int chroma_weight_flag[2]
7.4.3.2 chroma_weight_lX_flag 
 
int short_ref_count
number of actual short term references 
 
int mb_slice_group_map_type