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

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

?? mbuffer.c

?? 此源碼是關于h264圖像編解碼的工程
?? C
?? 第 1 頁 / 共 5 頁
字號:
  }
  
  // this is a frame or a field which has no stored complementatry field

  // sliding window, if necessary
  if ((!img->currentPicture->idr_flag)&&(p->used_for_reference && (!img->adaptive_ref_pic_buffering_flag)))
  {
    sliding_window_memory_management(p);
  } 

  // first try to remove unused frames
  if (dpb.used_size==dpb.size)
  {
    remove_unused_frame_from_dpb();
  }
  
  // then output frames until one can be removed
  while (dpb.used_size==dpb.size)
  {
    // non-reference frames may be output directly
    if (!p->used_for_reference)
    {
      get_smallest_poc(&poc, &pos);
      if ((-1==pos) || (p->poc < poc))
      {
        direct_output(p, p_dec);
        return;
      }
    }
    // flush a frame
    output_one_frame_from_dpb();
  }
  
  // check for duplicate frame number in short term reference buffer
  if ((p->used_for_reference)&&(!p->is_long_term))
  {
    for (i=0; i<dpb.ref_frames_in_buffer; i++)
    {
      if (dpb.fs_ref[i]->frame_num == img->frame_num)
      {
        error("duplicate frame_num im short-term reference picture buffer", 500);
      }
    }

  }
  // store at end of buffer
//  printf ("store frame/field at pos %d\n",dpb.used_size);
  insert_picture_in_dpb(dpb.fs[dpb.used_size],p);
  dpb.used_size++;

  update_ref_list();
  update_ltref_list();
  dump_dpb();
}

/*!
 ************************************************************************
 * \brief
 *    Insert the picture into the DPB. A free DPB position is necessary
 *    for frames, .
 *
 * \param p
 *    Picture to be freed
 *
 ************************************************************************
 */
static void insert_picture_in_dpb(FrameStore* fs, StorablePicture* p)
{
//  printf ("insert (%s) pic with frame_num #%d, poc %d\n", (p->structure == FRAME)?"FRAME":(p->structure == TOP_FIELD)?"TOP_FIELD":"BOTTOM_FIELD", img->frame_num, p->poc);
  assert (p!=NULL);
  assert (fs!=NULL);

  // upsample a reference picture
  if (p->used_for_reference)
  {
    UnifiedOneForthPix(p);
  }

  switch (p->structure)
  {
  case FRAME: 
    fs->frame = p;
    fs->is_used = 3;
    if (p->used_for_reference)
    {
      fs->is_reference = 3;
      if (p->is_long_term)
      {
        fs->is_long_term = 3;
      }
    }
    // generate field views
    dpb_split_field(fs);
    break;
  case TOP_FIELD:
    fs->top_field = p;
    fs->is_used |= 1;
    if (p->used_for_reference)
    {
      fs->is_reference |= 1;
      if (p->is_long_term)
      {
        fs->is_long_term |= 1;
        fs->long_term_frame_idx = p->long_term_frame_idx;
      }
    }
    if (fs->is_used == 3)
    {
      // generate frame view
      dpb_combine_field(fs);
    } else
    {
      fs->poc = p->poc;
    }
    break;
  case BOTTOM_FIELD:
    fs->bottom_field = p;
    fs->is_used |= 2;
    if (p->used_for_reference)
    {
      fs->is_reference |= 2;
      if (p->is_long_term)
      {
        fs->is_long_term |= 2;
        fs->long_term_frame_idx = p->long_term_frame_idx;
      }
    }
    if (fs->is_used == 3)
    {
      // generate frame view
      dpb_combine_field(fs);
    } else
    {
      fs->poc = p->poc;
    }
    break;
  }
  fs->frame_num = img->frame_num;
  fs->is_output = 0;

}

/*!
 ************************************************************************
 * \brief
 *    Check if one of the frames/fields in frame store is used for reference
 ************************************************************************
 */
static int is_used_for_reference(FrameStore* fs)
{
  if (fs->is_reference)
  {
    return 1;
  }
  
  if (fs->is_used==3) // frame
  {
    if (fs->frame->used_for_reference)
    {
      return 1;
    }
  }

  if (fs->is_used&1) // top field
  {
    if (fs->top_field->used_for_reference)
    {
      return 1;
    }
  }

  if (fs->is_used&2) // bottom field
  {
    if (fs->bottom_field->used_for_reference)
    {
      return 1;
    }
  }
  return 0;
}


/*!
 ************************************************************************
 * \brief
 *    Check if one of the frames/fields in frame store is used for short-term reference
 ************************************************************************
 */
static int is_short_term_reference(FrameStore* fs)
{

  if (fs->is_used==3) // frame
  {
    if ((fs->frame->used_for_reference)&&(!fs->frame->is_long_term))
    {
      return 1;
    }
  }

  if (fs->is_used&1) // top field
  {
    if ((fs->top_field->used_for_reference)&&(!fs->top_field->is_long_term))
    {
      return 1;
    }
  }

  if (fs->is_used&2) // bottom field
  {
    if ((fs->bottom_field->used_for_reference)&&(!fs->top_field->is_long_term))
    {
      return 1;
    }
  }
  return 0;
}


/*!
 ************************************************************************
 * \brief
 *    Check if one of the frames/fields in frame store is used for short-term reference
 ************************************************************************
 */
static int is_long_term_reference(FrameStore* fs)
{

  if (fs->is_used==3) // frame
  {
    if ((fs->frame->used_for_reference)&&(fs->frame->is_long_term))
    {
      return 1;
    }
  }

  if (fs->is_used&1) // top field
  {
    if ((fs->top_field->used_for_reference)&&(fs->top_field->is_long_term))
    {
      return 1;
    }
  }

  if (fs->is_used&2) // bottom field
  {
    if ((fs->bottom_field->used_for_reference)&&(fs->top_field->is_long_term))
    {
      return 1;
    }
  }
  return 0;
}


/*!
 ************************************************************************
 * \brief
 *    remove one frame from DPB
 ************************************************************************
 */
static void remove_frame_from_dpb(int pos)
{
  FrameStore* fs = dpb.fs[pos];
  FrameStore* tmp;
  unsigned i;
  
//  printf ("remove frame with frame_num #%d\n", fs->frame_num);
  switch (fs->is_used)
  {
  case 3:
    free_storable_picture(fs->frame);
    free_storable_picture(fs->top_field);
    free_storable_picture(fs->bottom_field);
    fs->frame=NULL;
    fs->top_field=NULL;
    fs->bottom_field=NULL;
    break;
  case 2:
    free_storable_picture(fs->bottom_field);
    fs->bottom_field=NULL;
    break;
  case 1:
    free_storable_picture(fs->top_field);
    fs->top_field=NULL;
    break;
  case 0:
    break;
  default:
    error("invalid frame store type",500);
  }
  fs->is_used = 0;

  // move empty framestore to end of buffer
  tmp = dpb.fs[pos];

  for (i=pos; i<dpb.used_size-1;i++)
  {
    dpb.fs[i] = dpb.fs[i+1];
  }
  dpb.fs[dpb.used_size-1] = tmp;
  dpb.used_size--;
}

/*!
 ************************************************************************
 * \brief
 *    find smallest POC in the DPB.
 ************************************************************************
 */
static void get_smallest_poc(int *poc,int * pos)
{
  unsigned i;

  if (dpb.used_size<1)
  {
    error("Cannot determine smallest POC, DPB empty.",150);
  }

  *pos=-1;
  *poc = INT_MAX;
  for (i=0; i<dpb.used_size; i++)
  {
    if ((*poc>dpb.fs[i]->poc)&&(!dpb.fs[i]->is_output))
    {
      *poc = dpb.fs[i]->poc;
      *pos=i;
    }
  }
}

/*!
 ************************************************************************
 * \brief
 *    Remove a picture from DPB which is no longer needed.
 ************************************************************************
 */
static int remove_unused_frame_from_dpb()
{
  unsigned i;

  // check for frames that were already output and no longer used for reference
  for (i=0; i<dpb.used_size; i++)
  {
    if (dpb.fs[i]->is_output && (!is_used_for_reference(dpb.fs[i])))
    {
      remove_frame_from_dpb(i);
      return 1;
    }
  }
  return 0;
}

/*!
 ************************************************************************
 * \brief
 *    Output one picture stored in the DPB.
 ************************************************************************
 */
static void output_one_frame_from_dpb()
{
  int poc, pos;
  //diagnostics
  if (dpb.used_size<1)
  {
    error("Cannot output frame, DPB empty.",150);
  }

  // find smallest POC
  get_smallest_poc(&poc, &pos);

  if(pos==-1)
  {
    error("no frames for output available", 150);
  }

  // call the output function
//  printf ("output frame with frame_num #%d, poc %d (dpb. dpb.size=%d, dpb.used_size=%d)\n", dpb.fs[pos]->frame_num, dpb.fs[pos]->frame->poc, dpb.size, dpb.used_size);

  write_stored_frame(dpb.fs[pos], p_dec);

  if (dpb.last_output_poc >= poc)
  {
    error ("output POC must be in ascending order", 150);
  } 
  dpb.last_output_poc = poc;
  // free frame store and move empty store to end of buffer
  if (!is_used_for_reference(dpb.fs[pos]))
  {
    remove_frame_from_dpb(pos);
  }
}



/*!
 ************************************************************************
 * \brief
 *    All stored picture are output. Should be called to empty the buffer
 ************************************************************************
 */
void flush_dpb()
{
  unsigned i;

  //diagnostics
//  printf("Flush remaining frames from dpb. dpb.size=%d, dpb.used_size=%d\n",dpb.size,dpb.used_size);

  // mark all frames unused
  for (i=0; i<dpb.used_size; i++)
  {
    unmark_for_reference (dpb.fs[i]);
  }

  while (remove_unused_frame_from_dpb()) ;
  
  // output frames in POC order
  while (dpb.used_size)
  {
    output_one_frame_from_dpb();
  }
}

/*!
 ************************************************************************
 * \brief
 *    Extract top field from a frame
 ************************************************************************
 */
void dpb_split_field(FrameStore *fs)
{
  int i;

  fs->top_field    = alloc_storable_picture(TOP_FIELD,    fs->frame->size_x, fs->frame->size_y/2, fs->frame->size_x_cr, fs->frame->size_y_cr/2);
  fs->bottom_field = alloc_storable_picture(BOTTOM_FIELD, fs->frame->size_x, fs->frame->size_y/2, fs->frame->size_x_cr, fs->frame->size_y_cr/2);

  for (i=0; i<fs->frame->size_y/2; i++)
  {
    memcpy(fs->top_field->imgY[i], fs->frame->imgY[i*2], fs->frame->size_x);
  }

  for (i=0; i<fs->frame->size_y_cr/2; i++)
  {
    memcpy(fs->top_field->imgUV[0][i], fs->frame->imgUV[0][i*2], fs->frame->size_x_cr);
    memcpy(fs->top_field->imgUV[1][i], fs->frame->imgUV[1][i*2], fs->frame->size_x_cr);
  }

  for (i=0; i<fs->frame->size_y/2; i++)
  {
    memcpy(fs->bottom_field->imgY[i], fs->frame->imgY[i*2 + 1], fs->frame->size_x);
  }

  for (i=0; i<fs->frame->size_y_cr/2; i++)
  {
    memcpy(fs->bottom_field->imgUV[0][i], fs->frame->imgUV[0][i*2 + 1], fs->frame->size_x_cr);
    memcpy(fs->bottom_field->imgUV[1][i], fs->frame->imgUV[1][i*2 + 1], fs->frame->size_x_cr);
  }

  UnifiedOneForthPix(fs->top_field);
  UnifiedOneForthPix(fs->bottom_field);

  fs->poc = fs->top_field->poc 
          = fs->bottom_field->poc 
          =

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩av成人高清| 亚洲另类在线一区| 韩国精品主播一区二区在线观看 | 日韩美一区二区三区| 亚洲国产成人porn| 91精品午夜视频| 久久99久久久久久久久久久| 久久综合网色—综合色88| 国产精品一级黄| 亚洲欧美偷拍卡通变态| 欧美日韩久久久一区| 美女网站在线免费欧美精品| 国产亚洲成aⅴ人片在线观看| www.亚洲免费av| 亚洲va在线va天堂| 精品少妇一区二区三区视频免付费| 国产精品一级二级三级| 亚洲欧美日韩中文字幕一区二区三区 | 欧美精品久久一区| 国产综合久久久久久久久久久久 | 一区二区在线免费| 欧美一级久久久久久久大片| 国产剧情一区二区| 亚洲精品v日韩精品| 69久久夜色精品国产69蝌蚪网| 久久99久久久久| 亚洲美女区一区| 精品国产伦一区二区三区观看体验| 大白屁股一区二区视频| 亚洲五月六月丁香激情| 国产亚洲欧美日韩俺去了| 色欧美片视频在线观看| 久久99九九99精品| 亚洲乱码国产乱码精品精98午夜 | 国产精品无人区| 欧美在线看片a免费观看| 久久精品国产精品青草| 中文字幕一区二区三区视频| 欧美一区二区久久久| aaa亚洲精品一二三区| 奇米综合一区二区三区精品视频| 国产精品天天看| 精品国产凹凸成av人导航| 色婷婷久久久久swag精品| 国产真实乱偷精品视频免| 亚洲成在线观看| 中文字幕一区免费在线观看| 精品久久久久一区二区国产| 在线精品亚洲一区二区不卡| 国产一区二区久久| 久久精品国产色蜜蜜麻豆| 亚洲国产另类精品专区| 亚洲视频免费看| 国产亚洲成av人在线观看导航| 91精品国产日韩91久久久久久| 色婷婷久久久久swag精品| 成人动漫精品一区二区| 国产一区中文字幕| 日本特黄久久久高潮| 夜夜嗨av一区二区三区中文字幕| 国产日韩精品一区| 久久久久久电影| 精品精品国产高清a毛片牛牛| 欧美日韩在线播| 欧亚一区二区三区| 91老师片黄在线观看| 成人激情校园春色| 成人av网址在线| 成人av在线观| 成av人片一区二区| 懂色av一区二区三区蜜臀| 国产成人综合网| 国产不卡视频在线播放| 国产91精品一区二区麻豆网站| 国产美女一区二区| 国产成人午夜视频| 成人综合婷婷国产精品久久| 国产成+人+日韩+欧美+亚洲| 成人免费观看男女羞羞视频| 成人涩涩免费视频| 欧美一级国产精品| 在线电影国产精品| 欧美精品久久久久久久多人混战 | 精品福利视频一区二区三区| 欧美精品日韩精品| 日韩欧美一二区| 欧美电影精品一区二区| 久久色在线观看| 欧美激情资源网| 中文字幕亚洲精品在线观看 | 欧美性一区二区| 欧美日韩国产bt| 精品久久久久久久久久久久包黑料 | 欧美一a一片一级一片| 欧美综合一区二区| 日韩视频免费直播| 久久久五月婷婷| 国产精品色婷婷| 一区二区三区免费网站| 午夜精品123| 九九视频精品免费| 成人综合婷婷国产精品久久| 91久久免费观看| 在线播放国产精品二区一二区四区| 欧美一级国产精品| 国产精品美女久久久久久2018| 国产精品夫妻自拍| 午夜精品久久久久久久| 国产麻豆欧美日韩一区| 99精品欧美一区二区三区小说| 欧美怡红院视频| 26uuu久久天堂性欧美| 自拍偷自拍亚洲精品播放| 成人av手机在线观看| 在线观看国产91| 337p粉嫩大胆色噜噜噜噜亚洲| 亚洲欧洲精品天堂一级| 日本成人在线网站| 成人激情小说乱人伦| 69p69国产精品| 一区二区中文视频| 美腿丝袜亚洲色图| 色琪琪一区二区三区亚洲区| 精品奇米国产一区二区三区| 亚洲麻豆国产自偷在线| 精品在线亚洲视频| 欧美在线|欧美| 国产精品色在线观看| 免费成人美女在线观看.| 91色|porny| 久久久不卡网国产精品二区| 亚洲一二三四在线观看| 岛国精品在线播放| 日韩欧美卡一卡二| 一区二区三区91| 成a人片亚洲日本久久| 久久综合九色综合97婷婷| 亚洲一区二区三区三| 成人激情动漫在线观看| 日韩精品一区二区三区在线| 亚洲高清在线精品| 91丨九色porny丨蝌蚪| 久久久蜜桃精品| 蜜臀av性久久久久蜜臀av麻豆| 91搞黄在线观看| 国产精品嫩草影院com| 黄一区二区三区| 欧美人妖巨大在线| 一区二区激情视频| 91美女蜜桃在线| 中文字幕在线一区二区三区| 国产乱码精品1区2区3区| 免费人成网站在线观看欧美高清| 色综合天天综合网国产成人综合天| 欧美sm极限捆绑bd| 奇米一区二区三区| 欧美久久免费观看| 亚洲va国产天堂va久久en| 91高清视频免费看| 亚洲天堂中文字幕| aa级大片欧美| 亚洲欧美日韩在线不卡| 91论坛在线播放| 亚洲欧美区自拍先锋| 99久久免费精品| 亚洲免费电影在线| 色综合久久久久综合99| 亚洲精品视频在线观看网站| 97久久精品人人做人人爽50路| 国产精品乱码一区二区三区软件| 国产91清纯白嫩初高中在线观看| 国产拍欧美日韩视频二区| 成人高清视频在线| 中文字幕一区二| 91久久精品日日躁夜夜躁欧美| 亚洲日本乱码在线观看| 91福利视频在线| 午夜精品久久久| 欧美电视剧在线看免费| 国产精品资源在线看| 日本一区二区动态图| 99久久综合色| 亚洲影视资源网| 777欧美精品| 国产中文一区二区三区| 亚洲国产精品t66y| 色婷婷精品大视频在线蜜桃视频| 亚洲综合激情另类小说区| 欧美三级乱人伦电影| 免费高清在线一区| 国产欧美一区二区三区沐欲| www.66久久| 亚洲高清视频中文字幕| 日韩欧美在线123| 国产 欧美在线| 一区二区成人在线观看| 日韩三级电影网址| av一区二区久久| 精品1区2区3区| 久久精品国产亚洲5555|