29     DXVA_PicParams_H264   
pp;
 
   39                                unsigned index, 
unsigned flag)
 
   41     assert((index&0x7f) == index && (flag&0x01) == flag);
 
   42     pic->bPicEntry = index | (flag << 7);
 
   46                                     DXVA_PicParams_H264 *pp)
 
   51     memset(pp, 0, 
sizeof(*pp));
 
   57     pp->UsedForReferenceFlags  = 0;
 
   58     pp->NonExistingFrameFlags  = 0;
 
   61         if (j < h->short_ref_count) {
 
   65             while (!r && j < h->short_ref_count + 16)
 
   74                 pp->FieldOrderCntList[i][0] = r->
field_poc[0];
 
   76                 pp->FieldOrderCntList[i][1] = r->
field_poc[1];
 
   80                 pp->UsedForReferenceFlags |= 1 << (2*i + 0);
 
   82                 pp->UsedForReferenceFlags |= 1 << (2*i + 1);
 
   84             pp->RefFrameList[i].bPicEntry = 0xff;
 
   85             pp->FieldOrderCntList[i][0]   = 0;
 
   86             pp->FieldOrderCntList[i][1]   = 0;
 
   87             pp->FrameNumList[i]           = 0;
 
   91     pp->wFrameWidthInMbsMinus1        = h->
mb_width  - 1;
 
   92     pp->wFrameHeightInMbsMinus1       = h->
mb_height - 1;
 
  118         pp->Reserved16Bits            = 0;
 
  120         pp->Reserved16Bits            = 0x34c;
 
  122         pp->Reserved16Bits            = 3; 
 
  123     pp->StatusReportFeedbackNumber    = 1 + ctx->
report_id++;
 
  124     pp->CurrFieldOrderCnt[0] = 0;
 
  126         current_picture->
field_poc[0] != INT_MAX)
 
  127         pp->CurrFieldOrderCnt[0] = current_picture->
field_poc[0];
 
  128     pp->CurrFieldOrderCnt[1] = 0;
 
  130         current_picture->
field_poc[1] != INT_MAX)
 
  131         pp->CurrFieldOrderCnt[1] = current_picture->
field_poc[1];
 
  132     pp->pic_init_qs_minus26           = h->
pps.
init_qs - 26;
 
  135     pp->ContinuationFlag              = 1;
 
  136     pp->pic_init_qp_minus26           = h->
pps.
init_qp - 26;
 
  137     pp->num_ref_idx_l0_active_minus1  = h->
pps.
ref_count[0] - 1;
 
  138     pp->num_ref_idx_l1_active_minus1  = h->
pps.
ref_count[1] - 1;
 
  139     pp->Reserved8BitsA                = 0;
 
  148     pp->entropy_coding_mode_flag      = h->
pps.
cabac;
 
  154     pp->Reserved8BitsB                = 0;
 
  155     pp->slice_group_change_rate_minus1= 0;  
 
  162     memset(qm, 0, 
sizeof(*qm));
 
  164         for (i = 0; i < 6; i++)
 
  165             for (j = 0; j < 16; j++)
 
  168         for (i = 0; i < 64; i++) {
 
  173         for (i = 0; i < 6; i++)
 
  174             for (j = 0; j < 16; j++)
 
  177         for (i = 0; i < 64; i++) {
 
  186     assert(ctx->
cfg->ConfigBitstreamRaw == 1 ||
 
  187            ctx->
cfg->ConfigBitstreamRaw == 2);
 
  188     return ctx->
cfg->ConfigBitstreamRaw == 2;
 
  192                              unsigned position, 
unsigned size)
 
  194     memset(slice, 0, 
sizeof(*slice));
 
  195     slice->BSNALunitDataLocation = position;
 
  196     slice->SliceBytesInBuffer    = 
size;
 
  197     slice->wBadSliceChopping     = 0;
 
  204         if ((pp->RefFrameList[i].bPicEntry & 0x7f) == surface_index)
 
  211                             const DXVA_PicParams_H264 *pp, 
unsigned position, 
unsigned size)
 
  217     memset(slice, 0, 
sizeof(*slice));
 
  218     slice->BSNALunitDataLocation = position;
 
  219     slice->SliceBytesInBuffer    = 
size;
 
  220     slice->wBadSliceChopping     = 0;
 
  223     slice->NumMbsForSlice        = 0; 
 
  227         slice->slice_type += 5;
 
  231         slice->num_ref_idx_l0_active_minus1 = h->
ref_count[0] - 1;
 
  233         slice->num_ref_idx_l1_active_minus1 = h->
ref_count[1] - 1;
 
  236     slice->Reserved8Bits                = 0;
 
  238     for (list = 0; list < 2; list++) {
 
  241             if (list < h->list_count && i < h->ref_count[list]) {
 
  251                 for (plane = 0; plane < 3; plane++) {
 
  264                     slice->Weights[list][i][plane][0] = w;
 
  265                     slice->Weights[list][i][plane][1] = o;
 
  269                 slice->RefPicList[list][i].bPicEntry = 0xff;
 
  270                 for (plane = 0; plane < 3; plane++) {
 
  271                     slice->Weights[list][i][plane][0] = 0;
 
  272                     slice->Weights[list][i][plane][1] = 0;
 
  277     slice->slice_qs_delta    = 0; 
 
  291                                              DXVA2_DecodeBufferDesc *bs,
 
  292                                              DXVA2_DecodeBufferDesc *sc)
 
  299     DXVA_Slice_H264_Short *
slice = NULL;
 
  309                                                DXVA2_BitStreamDateBufferType,
 
  310                                                (
void **)&dxva_data, &dxva_size)))
 
  313     end = dxva_data + dxva_size;
 
  317         static const unsigned start_code_size = 
sizeof(
start_code);
 
  318         unsigned position, 
size;
 
  320         assert(offsetof(DXVA_Slice_H264_Short, BSNALunitDataLocation) ==
 
  321                offsetof(DXVA_Slice_H264_Long,  BSNALunitDataLocation));
 
  322         assert(offsetof(DXVA_Slice_H264_Short, SliceBytesInBuffer) ==
 
  323                offsetof(DXVA_Slice_H264_Long,  SliceBytesInBuffer));
 
  328             slice = (DXVA_Slice_H264_Short*)&ctx_pic->
slice_long[i];
 
  330         position = slice->BSNALunitDataLocation;
 
  331         size     = slice->SliceBytesInBuffer;
 
  332         if (start_code_size + size > end - current) {
 
  337         slice->BSNALunitDataLocation = current - dxva_data;
 
  338         slice->SliceBytesInBuffer    = start_code_size + 
size;
 
  341             DXVA_Slice_H264_Long *
slice_long = (DXVA_Slice_H264_Long*)slice;
 
  343                 slice_long->NumMbsForSlice =
 
  344                     slice_long[1].first_mb_in_slice - slice_long[0].first_mb_in_slice;
 
  346                 slice_long->NumMbsForSlice = mb_count - slice_long->first_mb_in_slice;
 
  349         memcpy(current, start_code, start_code_size);
 
  350         current += start_code_size;
 
  352         memcpy(current, &ctx_pic->
bitstream[position], size);
 
  355     padding = 
FFMIN(128 - ((current - dxva_data) & 127), end - current);
 
  356     if (slice && padding > 0) {
 
  357         memset(current, 0, padding);
 
  360         slice->SliceBytesInBuffer += padding;
 
  363                                                   DXVA2_BitStreamDateBufferType)))
 
  368     memset(bs, 0, 
sizeof(*bs));
 
  369     bs->CompressedBufferType = DXVA2_BitStreamDateBufferType;
 
  370     bs->DataSize             = current - dxva_data;
 
  371     bs->NumMBsInBuffer       = mb_count;
 
  380     assert((bs->DataSize & 127) == 0);
 
  382                                   DXVA2_SliceControlBufferType,
 
  383                                   slice_data, slice_size, mb_count);
 
  434                         &ctx_pic->
pp, position, size);
 
  438         ctx_pic->
pp.wBitFields &= ~(1 << 15); 
 
  452                                     &ctx_pic->
pp, 
sizeof(ctx_pic->
pp),
 
  453                                     &ctx_pic->
qm, 
sizeof(ctx_pic->
qm),
 
  461     .
name           = 
"h264_dxva2",