Example #1
0
void wpxReorderLists( ImageParameters *img, Slice *currSlice )
{
    int i, num_ref;

    wpxModifyRefPicList( img );

    alloc_ref_pic_list_reordering_buffer(currSlice);

    for (i = 0; i < img->num_ref_idx_l0_active + 1; i++)
    {
        currSlice->reordering_of_pic_nums_idc_l0[i] = 3;
        currSlice->abs_diff_pic_num_minus1_l0[i] = 0;
        currSlice->long_term_pic_idx_l0[i] = 0;
    }

    if (img->type == B_SLICE) // type should be part of currSlice not img
    {
        for (i = 0; i < img->num_ref_idx_l1_active + 1; i++)
        {
            currSlice->reordering_of_pic_nums_idc_l1[i] = 3;
            currSlice->abs_diff_pic_num_minus1_l1[i] = 0;
            currSlice->long_term_pic_idx_l1[i] = 0;
        }
    }

    // LIST_0
    num_ref = img->num_ref_idx_l0_active;

    poc_ref_pic_reorder_frame(listX[LIST_0], num_ref,
                              currSlice->reordering_of_pic_nums_idc_l0,
                              currSlice->abs_diff_pic_num_minus1_l0,
                              currSlice->long_term_pic_idx_l0, LIST_0);
    // reference picture reordering
    reorder_ref_pic_list(listX[LIST_0], &listXsize[LIST_0],
                         img->num_ref_idx_l0_active - 1,
                         currSlice->reordering_of_pic_nums_idc_l0,
                         currSlice->abs_diff_pic_num_minus1_l0,
                         currSlice->long_term_pic_idx_l0);

    if ( img->type == B_SLICE )
    {
        // LIST_1
        num_ref = img->num_ref_idx_l1_active;

        poc_ref_pic_reorder_frame(listX[LIST_1], num_ref,
                                  currSlice->reordering_of_pic_nums_idc_l1,
                                  currSlice->abs_diff_pic_num_minus1_l1,
                                  currSlice->long_term_pic_idx_l1, LIST_1);
        // reference picture reordering
        reorder_ref_pic_list(listX[LIST_1], &listXsize[LIST_1],
                             img->num_ref_idx_l1_active - 1,
                             currSlice->reordering_of_pic_nums_idc_l1,
                             currSlice->abs_diff_pic_num_minus1_l1,
                             currSlice->long_term_pic_idx_l1);
    }
}
Example #2
0
void wp_mcprec_reorder_lists( Slice *currSlice )
{

  int i, num_ref;

  wpxModifyRefPicList( currSlice );

  alloc_ref_pic_list_reordering_buffer(currSlice);

  for (i = 0; i < currSlice->num_ref_idx_active[LIST_0] + 1; i++)
  {
    currSlice->reordering_of_pic_nums_idc[LIST_0][i] = 3;
    currSlice->abs_diff_pic_num_minus1[LIST_0][i] = 0;
    currSlice->long_term_pic_idx[LIST_0][i] = 0;
  }

  if (currSlice->slice_type == B_SLICE) // type should be part of currSlice not p_Vid
  {
    for (i = 0; i < currSlice->num_ref_idx_active[LIST_1] + 1; i++)
    {
      currSlice->reordering_of_pic_nums_idc[LIST_1][i] = 3;
      currSlice->abs_diff_pic_num_minus1[LIST_1][i] = 0;
      currSlice->long_term_pic_idx[LIST_1][i] = 0;
    }
  }

  // LIST_0
  num_ref = currSlice->num_ref_idx_active[LIST_0];

  currSlice->poc_ref_pic_reorder_frame(currSlice, currSlice->listX[LIST_0], num_ref,
    currSlice->reordering_of_pic_nums_idc[LIST_0],
    currSlice->abs_diff_pic_num_minus1[LIST_0],
    currSlice->long_term_pic_idx[LIST_0], LIST_0);
  // reference picture reordering
  reorder_ref_pic_list ( currSlice, LIST_0);

  if ( currSlice->slice_type == B_SLICE )
  {
    // LIST_1
    num_ref = currSlice->num_ref_idx_active[LIST_1];

    currSlice->poc_ref_pic_reorder_frame(currSlice, currSlice->listX[LIST_1], num_ref,
      currSlice->reordering_of_pic_nums_idc[LIST_1],
      currSlice->abs_diff_pic_num_minus1[LIST_1],
      currSlice->long_term_pic_idx[LIST_1], LIST_1);
    // reference picture reordering
    reorder_ref_pic_list ( currSlice, LIST_1);
  }
}