28     DXVA_PicParams_H264   
pp;
 
   38                                unsigned index, 
unsigned flag)
 
   40     assert((index&0x7f) == index && (flag&0x01) == flag);
 
   41     pic->bPicEntry = index | (flag << 7);
 
   45                                     DXVA_PicParams_H264 *pp)
 
   50     memset(pp, 0, 
sizeof(*pp));
 
   56     pp->UsedForReferenceFlags  = 0;
 
   57     pp->NonExistingFrameFlags  = 0;
 
   60         if (j < h->short_ref_count) {
 
   64             while (!r && j < h->short_ref_count + 16)
 
   73                 pp->FieldOrderCntList[i][0] = r->
field_poc[0];
 
   75                 pp->FieldOrderCntList[i][1] = r->
field_poc[1];
 
   79                 pp->UsedForReferenceFlags |= 1 << (2*i + 0);
 
   81                 pp->UsedForReferenceFlags |= 1 << (2*i + 1);
 
   83             pp->RefFrameList[i].bPicEntry = 0xff;
 
   84             pp->FieldOrderCntList[i][0]   = 0;
 
   85             pp->FieldOrderCntList[i][1]   = 0;
 
   86             pp->FrameNumList[i]           = 0;
 
   90     pp->wFrameWidthInMbsMinus1        = h->
mb_width  - 1;
 
   91     pp->wFrameHeightInMbsMinus1       = h->
mb_height - 1;
 
  117         pp->Reserved16Bits            = 0;
 
  119         pp->Reserved16Bits            = 3; 
 
  120     pp->StatusReportFeedbackNumber    = 1 + ctx->
report_id++;
 
  121     pp->CurrFieldOrderCnt[0] = 0;
 
  123         current_picture->
field_poc[0] != INT_MAX)
 
  124         pp->CurrFieldOrderCnt[0] = current_picture->
field_poc[0];
 
  125     pp->CurrFieldOrderCnt[1] = 0;
 
  127         current_picture->
field_poc[1] != INT_MAX)
 
  128         pp->CurrFieldOrderCnt[1] = current_picture->
field_poc[1];
 
  129     pp->pic_init_qs_minus26           = h->
pps.
init_qs - 26;
 
  132     pp->ContinuationFlag              = 1;
 
  133     pp->pic_init_qp_minus26           = h->
pps.
init_qp - 26;
 
  134     pp->num_ref_idx_l0_active_minus1  = h->
pps.
ref_count[0] - 1;
 
  135     pp->num_ref_idx_l1_active_minus1  = h->
pps.
ref_count[1] - 1;
 
  136     pp->Reserved8BitsA                = 0;
 
  145     pp->entropy_coding_mode_flag      = h->
pps.
cabac;
 
  151     pp->Reserved8BitsB                = 0;
 
  152     pp->slice_group_change_rate_minus1= 0;  
 
  159     memset(qm, 0, 
sizeof(*qm));
 
  161         for (i = 0; i < 6; i++)
 
  162             for (j = 0; j < 16; j++)
 
  165         for (i = 0; i < 64; i++) {
 
  170         for (i = 0; i < 6; i++)
 
  171             for (j = 0; j < 16; j++)
 
  174         for (i = 0; i < 64; i++) {
 
  183     assert(ctx->
cfg->ConfigBitstreamRaw == 1 ||
 
  184            ctx->
cfg->ConfigBitstreamRaw == 2);
 
  185     return ctx->
cfg->ConfigBitstreamRaw == 2;
 
  189                              unsigned position, 
unsigned size)
 
  191     memset(slice, 0, 
sizeof(*slice));
 
  192     slice->BSNALunitDataLocation = position;
 
  193     slice->SliceBytesInBuffer    = 
size;
 
  194     slice->wBadSliceChopping     = 0;
 
  198                             unsigned position, 
unsigned size)
 
  204     memset(slice, 0, 
sizeof(*slice));
 
  205     slice->BSNALunitDataLocation = position;
 
  206     slice->SliceBytesInBuffer    = 
size;
 
  207     slice->wBadSliceChopping     = 0;
 
  210     slice->NumMbsForSlice        = 0; 
 
  214         slice->slice_type += 5;
 
  218         slice->num_ref_idx_l0_active_minus1 = h->
ref_count[0] - 1;
 
  220         slice->num_ref_idx_l1_active_minus1 = h->
ref_count[1] - 1;
 
  223     slice->Reserved8Bits                = 0;
 
  225     for (list = 0; list < 2; list++) {
 
  228             if (list < h->list_count && i < h->ref_count[list]) {
 
  234                 for (plane = 0; plane < 3; plane++) {
 
  247                     slice->Weights[list][i][plane][0] = w;
 
  248                     slice->Weights[list][i][plane][1] = o;
 
  252                 slice->RefPicList[list][i].bPicEntry = 0xff;
 
  253                 for (plane = 0; plane < 3; plane++) {
 
  254                     slice->Weights[list][i][plane][0] = 0;
 
  255                     slice->Weights[list][i][plane][1] = 0;
 
  260     slice->slice_qs_delta    = 0; 
 
  274                                              DXVA2_DecodeBufferDesc *bs,
 
  275                                              DXVA2_DecodeBufferDesc *sc)
 
  282     DXVA_Slice_H264_Short *
slice = NULL;
 
  292                                                DXVA2_BitStreamDateBufferType,
 
  293                                                (
void **)&dxva_data, &dxva_size)))
 
  296     end = dxva_data + dxva_size;
 
  300         static const unsigned start_code_size = 
sizeof(
start_code);
 
  301         unsigned position, 
size;
 
  303         assert(offsetof(DXVA_Slice_H264_Short, BSNALunitDataLocation) ==
 
  304                offsetof(DXVA_Slice_H264_Long,  BSNALunitDataLocation));
 
  305         assert(offsetof(DXVA_Slice_H264_Short, SliceBytesInBuffer) ==
 
  306                offsetof(DXVA_Slice_H264_Long,  SliceBytesInBuffer));
 
  311             slice = (DXVA_Slice_H264_Short*)&ctx_pic->
slice_long[i];
 
  313         position = slice->BSNALunitDataLocation;
 
  314         size     = slice->SliceBytesInBuffer;
 
  315         if (start_code_size + size > end - current) {
 
  320         slice->BSNALunitDataLocation = current - dxva_data;
 
  321         slice->SliceBytesInBuffer    = start_code_size + 
size;
 
  324             DXVA_Slice_H264_Long *
slice_long = (DXVA_Slice_H264_Long*)slice;
 
  326                 slice_long->NumMbsForSlice =
 
  327                     slice_long[1].first_mb_in_slice - slice_long[0].first_mb_in_slice;
 
  329                 slice_long->NumMbsForSlice = mb_count - slice_long->first_mb_in_slice;
 
  332         memcpy(current, start_code, start_code_size);
 
  333         current += start_code_size;
 
  335         memcpy(current, &ctx_pic->
bitstream[position], size);
 
  338     padding = 
FFMIN(128 - ((current - dxva_data) & 127), end - current);
 
  339     if (slice && padding > 0) {
 
  340         memset(current, 0, padding);
 
  343         slice->SliceBytesInBuffer += padding;
 
  346                                                   DXVA2_BitStreamDateBufferType)))
 
  351     memset(bs, 0, 
sizeof(*bs));
 
  352     bs->CompressedBufferType = DXVA2_BitStreamDateBufferType;
 
  353     bs->DataSize             = current - dxva_data;
 
  354     bs->NumMBsInBuffer       = mb_count;
 
  363     assert((bs->DataSize & 127) == 0);
 
  365                                   DXVA2_SliceControlBufferType,
 
  366                                   slice_data, slice_size, mb_count);
 
  421         ctx_pic->
pp.wBitFields &= ~(1 << 15); 
 
  435                                     &ctx_pic->
pp, 
sizeof(ctx_pic->
pp),
 
  436                                     &ctx_pic->
qm, 
sizeof(ctx_pic->
qm),
 
  444     .
name           = 
"h264_dxva2",