亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? h.264

?? H.264編碼解碼器源碼(c語言版本)
?? 264
?? 第 1 頁 / 共 5 頁
字號:
//      printf("listX[1] currPoc=%d (Poc): ", img->framepoc); for (i=0; i<listXsize[1]; i++){printf ("%d  ", listX[1][i]->poc);} printf("\n");

      // long term handling
      for (i=0; i<dpb.ltref_frames_in_buffer; i++)
      {
        fs_listlt[listltidx++]=dpb.fs_ltref[i];
      }

      qsort((void *)fs_listlt, listltidx, sizeof(FrameStore*), compare_fs_by_lt_pic_idx_asc);

      gen_pic_list_from_frame_list(currPicStructure, fs_listlt, listltidx, listX[0], &listXsize[0], 1);
      gen_pic_list_from_frame_list(currPicStructure, fs_listlt, listltidx, listX[1], &listXsize[1], 1);

      free(fs_list0);
      free(fs_list1);
      free(fs_listlt);
    }
  }

  if ((listXsize[0] == listXsize[1]) && (listXsize[0] > 1))
  {
    // check if lists are identical, if yes swap first two elements of listX[1]
    diff=0;
    for (j = 0; j< listXsize[0]; j++)
    {
      if (listX[0][j]!=listX[1][j])
        diff=1;
    }
    if (!diff)
    {
      tmp_s = listX[1][0];
      listX[1][0]=listX[1][1];
      listX[1][1]=tmp_s;
    }
  }

  // set max size
  listXsize[0] = min (listXsize[0], img->num_ref_idx_l0_active);
  listXsize[1] = min (listXsize[1], img->num_ref_idx_l1_active);

  
  // set the unused list entries to NULL
  for (i=listXsize[0]; i< (2*dpb.size) ; i++)
  {
    listX[0][i] = NULL;
  }
  for (i=listXsize[1]; i< (2*dpb.size) ; i++)
  {
    listX[1][i] = NULL;
  }
}

/*!
 ************************************************************************
 * \brief
 *    Initilaize listX[2..5] from lists 0 and 1
 *    listX[2]: list0 for current_field==top
 *    listX[3]: list1 for current_field==top
 *    listX[4]: list0 for current_field==bottom
 *    listX[5]: list1 for current_field==bottom
 *
 ************************************************************************
 */
void init_mbaff_lists()
{
  unsigned j;
  int i;

  for (i=2;i<6;i++)
  {
    for (j=0; j<(2*dpb.size)+1; j++)
    {
      listX[i][j] = NULL;
    }
    listXsize[i]=0;
  }

  for (i=0; i<listXsize[0]; i++)
  {
    listX[2][2*i]  =listX[0][i]->top_field;
    listX[2][2*i+1]=listX[0][i]->bottom_field;
    listX[4][2*i]  =listX[0][i]->bottom_field;
    listX[4][2*i+1]=listX[0][i]->top_field;
  }
  listXsize[2]=listXsize[4]=listXsize[0] * 2;

  for (i=0; i<listXsize[1]; i++)
  {
    listX[3][2*i]  =listX[1][i]->top_field;
    listX[3][2*i+1]=listX[1][i]->bottom_field;
    listX[5][2*i]  =listX[1][i]->bottom_field;
    listX[5][2*i+1]=listX[1][i]->top_field;
  }
  listXsize[3]=listXsize[5]=listXsize[1] * 2;
}
 
 /*!
 ************************************************************************
 * \brief
 *    Returns short term pic with given picNum
 *
 ************************************************************************
 */
static StorablePicture*  get_short_term_pic(int picNum)
{
  unsigned i;

  for (i=0; i<dpb.ref_frames_in_buffer; i++)
  {
    if (img->type==FRAME)
    {
      if (dpb.fs_ref[i]->is_reference == 3)
        if ((!dpb.fs_ref[i]->frame->is_long_term)&&(dpb.fs_ref[i]->frame->pic_num == picNum))
          return dpb.fs_ref[i]->frame;
    }
    else
    {
      if (dpb.fs_ref[i]->is_reference & 1)
        if ((!dpb.fs_ref[i]->top_field->is_long_term)&&(dpb.fs_ref[i]->top_field->pic_num == picNum))
          return dpb.fs_ref[i]->top_field;
      if (dpb.fs_ref[i]->is_reference & 2)
        if ((!dpb.fs_ref[i]->bottom_field->is_long_term)&&(dpb.fs_ref[i]->bottom_field->pic_num == picNum))
          return dpb.fs_ref[i]->bottom_field;
    }
  }
  return NULL;
}

/*!
 ************************************************************************
 * \brief
 *    Returns short term pic with given LongtermPicNum
 *
 ************************************************************************
 */
static StorablePicture*  get_long_term_pic(int LongtermPicNum)
{
  unsigned i;

  for (i=0; i<dpb.ref_frames_in_buffer; i++)
  {
    if (img->type==FRAME)
    {
      if (dpb.fs_ref[i]->is_reference == 3)
        if ((dpb.fs_ref[i]->frame->is_long_term)&&(dpb.fs_ref[i]->frame->long_term_pic_num == LongtermPicNum))
          return dpb.fs_ref[i]->frame;
    }
    else
    {
      if (dpb.fs_ref[i]->is_reference & 1)
        if ((dpb.fs_ref[i]->top_field->is_long_term)&&(dpb.fs_ref[i]->top_field->long_term_pic_num == LongtermPicNum))
          return dpb.fs_ref[i]->top_field;
      if (dpb.fs_ref[i]->is_reference & 2)
        if ((dpb.fs_ref[i]->bottom_field->is_long_term)&&(dpb.fs_ref[i]->bottom_field->long_term_pic_num == LongtermPicNum))
          return dpb.fs_ref[i]->bottom_field;
    }
  }
  return NULL;
}

/*!
 ************************************************************************
 * \brief
 *    Reordering process for short-term reference pictures
 *
 ************************************************************************
 */
static void reorder_short_term(StorablePicture **RefPicListX, int num_ref_idx_lX_active_minus1, int picNumLX, int *refIdxLX)
{
  int cIdx, nIdx;

  StorablePicture *picLX;

  picLX = get_short_term_pic(picNumLX);

  for( cIdx = num_ref_idx_lX_active_minus1+1; cIdx > *refIdxLX; cIdx-- )
    RefPicListX[ cIdx ] = RefPicListX[ cIdx - 1];
  
  RefPicListX[ (*refIdxLX)++ ] = picLX;

  nIdx = *refIdxLX;

  for( cIdx = *refIdxLX; cIdx <= num_ref_idx_lX_active_minus1+1; cIdx++ )
    if (RefPicListX[ cIdx ])
      if( (RefPicListX[ cIdx ]->is_long_term ) ||  (RefPicListX[ cIdx ]->pic_num != picNumLX ))
	      RefPicListX[ nIdx++ ] = RefPicListX[ cIdx ];

}


/*!
 ************************************************************************
 * \brief
 *    Reordering process for short-term reference pictures
 *
 ************************************************************************
 */
static void reorder_long_term(StorablePicture **RefPicListX, int num_ref_idx_lX_active_minus1, int LongTermPicNum, int *refIdxLX)
{
  int cIdx, nIdx;

  StorablePicture *picLX;

  picLX = get_long_term_pic(LongTermPicNum);

  for( cIdx = num_ref_idx_lX_active_minus1+1; cIdx > *refIdxLX; cIdx-- )
    RefPicListX[ cIdx ] = RefPicListX[ cIdx - 1];
  
  RefPicListX[ (*refIdxLX)++ ] = picLX;

  nIdx = *refIdxLX;

  for( cIdx = *refIdxLX; cIdx <= num_ref_idx_lX_active_minus1+1; cIdx++ )
    if( (!RefPicListX[ cIdx ]->is_long_term ) ||  (RefPicListX[ cIdx ]->long_term_pic_num != LongTermPicNum ))
	    RefPicListX[ nIdx++ ] = RefPicListX[ cIdx ];
}


/*!
 ************************************************************************
 * \brief
 *    Reordering process for reference picture lists
 *
 ************************************************************************
 */
void reorder_ref_pic_list(StorablePicture **list, int *list_size, int num_ref_idx_lX_active_minus1, int *remapping_of_pic_nums_idc, int *abs_diff_pic_num_minus1, int *long_term_pic_idx)
{
  int i;

  int maxPicNum, currPicNum, picNumLXNoWrap, picNumLXPred, picNumLX;
  int refIdxLX = 0;

  if (img->structure==FRAME)
  {
    maxPicNum  = img->MaxFrameNum;
    currPicNum = img->frame_num;
  }
  else
  {
    maxPicNum  = 2 * img->MaxFrameNum;
    currPicNum = 2 * img->frame_num;
  }

  picNumLXPred = currPicNum;

  for (i=0; remapping_of_pic_nums_idc[i]!=3; i++)
  {
    if (remapping_of_pic_nums_idc[i]>3)
      error ("Invalid remapping_of_pic_nums_idc command", 500);

    if (remapping_of_pic_nums_idc[i] < 2)
    {
      if (remapping_of_pic_nums_idc[i] == 0)
      {
        if( picNumLXPred - ( abs_diff_pic_num_minus1[i] + 1 ) < 0 )
          picNumLXNoWrap = picNumLXPred - ( abs_diff_pic_num_minus1[i] + 1 ) + maxPicNum;
        else
          picNumLXNoWrap = picNumLXPred - ( abs_diff_pic_num_minus1[i] + 1 );
      }
      else // (remapping_of_pic_nums_idc[i] == 1)
      {
        if( picNumLXPred + ( abs_diff_pic_num_minus1[i] + 1 )  >=  maxPicNum )
          picNumLXNoWrap = picNumLXPred + ( abs_diff_pic_num_minus1[i] + 1 ) - maxPicNum;
        else
          picNumLXNoWrap = picNumLXPred + ( abs_diff_pic_num_minus1[i] + 1 );
      }
      picNumLXPred = picNumLXNoWrap;

      if( picNumLXNoWrap > currPicNum )
        picNumLX = picNumLXNoWrap - maxPicNum;
      else
        picNumLX = picNumLXNoWrap;

      reorder_short_term(list, num_ref_idx_lX_active_minus1, picNumLX, &refIdxLX);
    }
    else //(remapping_of_pic_nums_idc[i] == 2)
    {
      reorder_long_term(list, num_ref_idx_lX_active_minus1, long_term_pic_idx[i], &refIdxLX);
    }
    
  }
  // that's a definition
  *list_size = num_ref_idx_lX_active_minus1 + 1;
}



/*!
 ************************************************************************
 * \brief
 *    Update the list of frame stores that contain reference frames/fields
 *
 ************************************************************************
 */
void update_ref_list()
{
  unsigned i, j;
  for (i=0, j=0; i<dpb.used_size; i++)
  {
    if (is_short_term_reference(dpb.fs[i]))
    {
      dpb.fs_ref[j++]=dpb.fs[i];
    }
  }

  dpb.ref_frames_in_buffer = j;

  while (j<dpb.size)
  {
    dpb.fs_ref[j++]=NULL;
  }
}


/*!
 ************************************************************************
 * \brief
 *    Update the list of frame stores that contain long-term reference 
 *    frames/fields
 *
 ************************************************************************
 */
void update_ltref_list()
{
  unsigned i, j;
  for (i=0, j=0; i<dpb.used_size; i++)
  {
    if (is_long_term_reference(dpb.fs[i]))
    {
      dpb.fs_ltref[j++]=dpb.fs[i];
    }
  }

  dpb.ltref_frames_in_buffer=j;

  while (j<dpb.size)
  {
    dpb.fs_ltref[j++]=NULL;
  }
}

/*!
 ************************************************************************
 * \brief
 *    Perform Memory management for idr pictures
 *
 ************************************************************************
 */
static void idr_memory_management(StorablePicture* p)
{
  unsigned i;

  assert (img->idr_flag);

  if (img->no_output_of_prior_pics_flag)
  {
    // free all stored pictures
    for (i=0; i<dpb.used_size; i++)
    {
      free_frame_store(dpb.fs[i]);
      dpb.fs[i]=NULL;
    }
    for (i=0; i<dpb.ref_frames_in_buffer; i++)
    {
      dpb.fs_ref[i]=NULL;
    }
    for (i=0; i<dpb.ltref_frames_in_buffer; i++)
    {
      dpb.fs_ltref[i]=NULL;
    }
    dpb.used_size=0;
  }
  else
  {
    flush_dpb();
  }

  update_ref_list();
  update_ltref_list();
  dpb.last_output_poc = INT_MIN;
  
  if (img->long_term_reference_flag)
  {
    dpb.max_long_term_pic_idx = 0;
    p->is_long_term           = 1;
    p->long_term_frame_idx    = 0;
  }
  else
  {
    dpb.max_long_term_pic_idx = -1;
    p->is_long_term           = 0;
  }
}

/*!
 ************************************************************************
 * \brief
 *    Perform Sliding window decoded reference picture marking process
 *
 ************************************************************************
 */
static void sliding_window_memory_management(StorablePicture* p)
{
  unsigned i;

  assert (!img->idr_flag);
  // if this is a reference pic with sliding sliding window, unmark first ref frame
  if (dpb.ref_frames_in_buffer==active_sps->num_ref_frames)
  {
    for (i=0; i<dpb.used_size;i++)
    {
      if (dpb.fs[i]->is_reference)
      {
        unmark_for_reference(dpb.fs[i]);
        update_ref_list();
        break;
      }
    }
  }

  p->is_long_term = 0;
}

/*!
 ************************************************************************
 * \brief
 *    Calculate picNumX
 ************************************************************************
 */
static int get_pic_num_x (StorablePicture *p, int difference_of_pic_nums_minus1)
{
  int currPicNum;

  if (p->structure == FRAME)
    currPicNum = img->frame_num;
  else 
    currPicNum = 2 * img->frame_num;
  
  return currPicNum - (difference_of_pic_nums_minus1 + 1);
}


/*!
 ************************************************************************
 * \brief
 *    Adaptive Memory Management: Mark short term picture unused
 ************************************************************************
 */
static void mm_unmark_short_term_for_reference(StorablePicture *p, int difference_of_pic_nums_minus1)
{
  int picNumX;

  unsigned i;

  picNumX = get_pic_num_x(p, difference_of_pic_nums_minus1);

  for (i=0; i<dpb.ref_frames_in_buffer; i++)
  {
    if (p->structure == FRAME)
    {
      if ((dpb.fs_ref[i]->is_reference==3) && (dpb.fs_ref[i]->is_long_term==0))
      {
        if (dpb.fs_ref[i]->frame->pic_num == picNumX)
        {
          unmark_for_reference(dpb.fs_ref[i]);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色美美综合视频| 亚洲免费在线视频一区 二区| 久久精品亚洲麻豆av一区二区 | 国产成人av电影免费在线观看| 色综合天天综合网天天看片| 精品欧美一区二区三区精品久久| 亚洲欧美一区二区在线观看| 国内精品写真在线观看| 色8久久精品久久久久久蜜 | 日韩中文欧美在线| 91丨九色丨国产丨porny| 日韩欧美在线1卡| 亚洲妇熟xx妇色黄| 91色乱码一区二区三区| 久久精品亚洲乱码伦伦中文 | 日韩欧美国产电影| 午夜久久久久久电影| 91亚洲精华国产精华精华液| 久久精品夜色噜噜亚洲aⅴ| 视频在线观看一区| 欧美最新大片在线看| 综合久久国产九一剧情麻豆| 夫妻av一区二区| 精品国产乱码久久久久久闺蜜| 亚洲国产wwwccc36天堂| 色94色欧美sute亚洲线路一久| 最新热久久免费视频| 国产69精品久久久久毛片| 久久综合久久鬼色| 蜜桃一区二区三区四区| 91麻豆精品国产91久久久资源速度| 夜夜爽夜夜爽精品视频| 色老综合老女人久久久| 亚洲四区在线观看| 91麻豆成人久久精品二区三区| 亚洲私人影院在线观看| 色欧美片视频在线观看| 亚洲综合图片区| 欧美性生活久久| 婷婷开心激情综合| 日韩亚洲欧美高清| 黄色日韩三级电影| 中文字幕精品一区二区三区精品 | 国产女人18水真多18精品一级做 | 激情亚洲综合在线| 精品99久久久久久| 国产成a人亚洲| 亚洲人吸女人奶水| 欧美亚洲高清一区| 日韩av中文字幕一区二区| 欧美一区二区三区免费在线看| 免费看黄色91| 中文字幕第一区二区| 色老头久久综合| 日韩精品每日更新| 久久蜜桃一区二区| 99re这里都是精品| 视频一区中文字幕国产| 久久中文字幕电影| 成人av一区二区三区| 亚洲国产中文字幕在线视频综合| 91精品麻豆日日躁夜夜躁| 国产精品一区二区三区99| 国产欧美日韩在线看| 91免费在线播放| 青青草成人在线观看| 国产精品女主播av| 欧美性色综合网| 黄色成人免费在线| 亚洲午夜成aⅴ人片| 日韩精品一区二区三区四区| av电影在线观看一区| 午夜av电影一区| 国产日韩精品一区| 欧美日韩精品一区二区三区蜜桃| 国产综合成人久久大片91| 亚洲精品综合在线| 欧美精品一区二区三| 91麻豆国产自产在线观看| 精品一区二区三区在线观看国产| 亚洲女同ⅹxx女同tv| 久久午夜老司机| 欧美一区二区三区在线观看视频| av不卡免费在线观看| 美国十次综合导航| 一区二区三区日韩精品| 国产日韩欧美在线一区| 日韩一区二区三区在线| 色综合一区二区三区| 国产一区久久久| 天天综合网 天天综合色| 国产精品少妇自拍| 日韩精品一区国产麻豆| 51精品秘密在线观看| 99国产精品国产精品久久| 国产精品69久久久久水密桃| 奇米精品一区二区三区在线观看 | 久久99久久精品欧美| 亚洲一区二区av在线| 亚洲欧美激情小说另类| 欧美—级在线免费片| 精品欧美一区二区久久| 91麻豆精品国产91| 欧美日韩国产在线观看| 91久久精品午夜一区二区| 91网站最新网址| av中文字幕一区| 99精品视频一区二区| 成人国产免费视频| 成人免费毛片嘿嘿连载视频| 国产成人在线看| 国产成人午夜视频| 国产精品影视网| 国产剧情在线观看一区二区| 国产精品 日产精品 欧美精品| 精品一区二区久久久| 精品一区二区三区久久久| 激情图片小说一区| 国产在线日韩欧美| 国产精品一级黄| 国产99久久久国产精品潘金 | 精品一区二区三区香蕉蜜桃| 精品在线播放午夜| 国产剧情一区二区三区| 成人免费看片app下载| 99在线精品观看| 一本久久a久久精品亚洲| 3d动漫精品啪啪一区二区竹菊| 欧美午夜一区二区三区免费大片| 欧美性欧美巨大黑白大战| 欧美卡1卡2卡| 久久综合色一综合色88| 欧美极品少妇xxxxⅹ高跟鞋| 亚洲三级在线播放| 亚洲永久精品大片| 秋霞影院一区二区| 国产乱淫av一区二区三区| 国产91综合一区在线观看| 91女厕偷拍女厕偷拍高清| 欧美天天综合网| 91精品国产91久久久久久最新毛片| 日韩欧美久久一区| 国产视频视频一区| 亚洲美女区一区| 日韩成人av影视| 东方aⅴ免费观看久久av| 在线亚洲+欧美+日本专区| 日韩三级伦理片妻子的秘密按摩| 国产性天天综合网| 亚洲国产精品一区二区www在线| 秋霞国产午夜精品免费视频| 国产精品18久久久久久vr| 色综合欧美在线视频区| 日韩视频在线永久播放| 日本一区二区成人| 日韩和欧美一区二区| 国产iv一区二区三区| 欧美高清激情brazzers| 国产精品久久久久久久第一福利| 婷婷成人综合网| 99国产精品久| xnxx国产精品| 五月天一区二区三区| 99久久精品国产毛片| 日韩欧美亚洲另类制服综合在线| 椎名由奈av一区二区三区| 国产最新精品精品你懂的| 欧美系列亚洲系列| 日本一区二区三区高清不卡 | 国产精品一品二品| 欧美二区乱c少妇| 亚洲欧美国产高清| 国产精品18久久久久久久久 | 综合激情成人伊人| 国产黄人亚洲片| 欧美一级夜夜爽| 亚洲午夜久久久久久久久电影院 | 日韩午夜av电影| 亚洲一区av在线| 色婷婷香蕉在线一区二区| 欧美国产日韩a欧美在线观看| 看片的网站亚洲| 国产日韩欧美麻豆| 丝袜国产日韩另类美女| 色婷婷激情久久| 成人免费视频在线观看| av亚洲精华国产精华精| 亚洲国产精品传媒在线观看| 国产精品2024| 久久久久久久久久电影| 玖玖九九国产精品| 欧美精选午夜久久久乱码6080| 亚洲精品高清在线| 色综合色综合色综合色综合色综合 | 国产成人在线视频免费播放| 日韩欧美国产不卡| 免费看日韩a级影片| 日韩欧美在线不卡| 久久精品av麻豆的观看方式| 精品国产精品网麻豆系列|