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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? mbuffer.c

?? 比較老的264解碼器baseline實(shí)現(xiàn)
?? C
?? 第 1 頁(yè) / 共 5 頁(yè)
字號(hào):
 ************************************************************************
 */
static int compare_pic_by_poc_asc( const void *arg1, const void *arg2 )
{
  if ( (*(StorablePicture**)arg1)->poc < (*(StorablePicture**)arg2)->poc)
    return -1;
  if ( (*(StorablePicture**)arg1)->poc > (*(StorablePicture**)arg2)->poc)
    return 1;
  else
    return 0;
}


/*!
 ************************************************************************
 * \brief
 *    compares two stored pictures by poc for qsort in descending order
 *
 ************************************************************************
 */
static int compare_pic_by_poc_desc( const void *arg1, const void *arg2 )
{
  if ( (*(StorablePicture**)arg1)->poc < (*(StorablePicture**)arg2)->poc)
    return 1;
  if ( (*(StorablePicture**)arg1)->poc > (*(StorablePicture**)arg2)->poc)
    return -1;
  else
    return 0;
}


/*!
 ************************************************************************
 * \brief
 *    compares two frame stores by poc for qsort in ascending order
 *
 ************************************************************************
 */
static int compare_fs_by_poc_asc( const void *arg1, const void *arg2 )
{
  if ( (*(FrameStore**)arg1)->poc < (*(FrameStore**)arg2)->poc)
    return -1;
  if ( (*(FrameStore**)arg1)->poc > (*(FrameStore**)arg2)->poc)
    return 1;
  else
    return 0;
}


/*!
 ************************************************************************
 * \brief
 *    compares two frame stores by poc for qsort in descending order
 *
 ************************************************************************
 */
static int compare_fs_by_poc_desc( const void *arg1, const void *arg2 )
{
  if ( (*(FrameStore**)arg1)->poc < (*(FrameStore**)arg2)->poc)
    return 1;
  if ( (*(FrameStore**)arg1)->poc > (*(FrameStore**)arg2)->poc)
    return -1;
  else
    return 0;
}


/*!
 ************************************************************************
 * \brief
 *    returns true, if picture is short term reference picture
 *
 ************************************************************************
 */
int is_short_ref(StorablePicture *s)
{
  return ((s->used_for_reference) && (!(s->is_long_term)));
}


/*!
 ************************************************************************
 * \brief
 *    returns true, if picture is long term reference picture
 *
 ************************************************************************
 */
int is_long_ref(StorablePicture *s)
{
  return ((s->used_for_reference) && (s->is_long_term));
}


/*!
 ************************************************************************
 * \brief
 *    Generates a alternating field list from a given FrameStore list
 *
 ************************************************************************
 */
static void gen_pic_list_from_frame_list(PictureStructure currStrcture, FrameStore **fs_list, int list_idx, StorablePicture **list, int *list_size, int long_term)
{
  int top_idx = 0;
  int bot_idx = 0;

  int (*is_ref)(StorablePicture *s);

  if (long_term)
    is_ref=is_long_ref;
  else
    is_ref=is_short_ref;

  if (currStrcture == TOP_FIELD)
  {
    while ((top_idx<list_idx)||(bot_idx<list_idx))
    {
      for ( ; top_idx<list_idx; top_idx++)
      {
        if(fs_list[top_idx]->is_used & 1)
        {
          if(is_ref(fs_list[top_idx]->top_field))
          {
            // short term ref pic
            list[*list_size] = fs_list[top_idx]->top_field;
            (*list_size)++;
            top_idx++;
            break;
          }
        }
      }
      for ( ; bot_idx<list_idx; bot_idx++)
      {
        if(fs_list[bot_idx]->is_used & 2)
        {
          if(is_ref(fs_list[bot_idx]->bottom_field))
          {
            // short term ref pic
            list[*list_size] = fs_list[bot_idx]->bottom_field;
            (*list_size)++;
            bot_idx++;
            break;
          }
        }
      }
    }
  }
  if (currStrcture == BOTTOM_FIELD)
  {
    while ((top_idx<list_idx)||(bot_idx<list_idx))
    {
      for ( ; bot_idx<list_idx; bot_idx++)
      {
        if(fs_list[bot_idx]->is_used & 2)
        {
          if(is_ref(fs_list[bot_idx]->bottom_field))
          {
            // short term ref pic
            list[*list_size] = fs_list[bot_idx]->bottom_field;
            (*list_size)++;
            bot_idx++;
            break;
          }
        }
      }
      for ( ; top_idx<list_idx; top_idx++)
      {
        if(fs_list[top_idx]->is_used & 1)
        {
          if(is_ref(fs_list[top_idx]->top_field))
          {
            // short term ref pic
            list[*list_size] = fs_list[top_idx]->top_field;
            (*list_size)++;
            top_idx++;
            break;
          }
        }
      }
    }
  }
}


/*!
 ************************************************************************
 * \brief
 *    Initilaize listX[0] and list 1 depending on current picture type
 *
 ************************************************************************
 */
void init_lists(int currSliceType, PictureStructure currPicStructure)
{
  int add_top, add_bottom;
  unsigned i;
  int j;
  int MaxFrameNum = 1 << (LOG2_MAX_FRAME_NUM_MINUS4 + 4);
  int diff;

  int list0idx = 0;
  int list1idx = 0;
  int list0idx_1 = 0;
  int listltidx = 0;

  FrameStore **fs_list0;
  FrameStore **fs_list1;
  FrameStore **fs_listlt;

  StorablePicture *tmp_s;

  if ((currSliceType == I_SLICE)||(currSliceType == SI_SLICE))
  {
    listXsize[0] = 0;
    listXsize[1] = 0;
    return;
  }

  if ((currSliceType == P_SLICE)||(currSliceType == SP_SLICE))
  {
    // Calculate FrameNumWrap and PicNum
    if (currPicStructure == FRAME)  
    {
      for (i=0; i<dpb.ref_frames_in_buffer; i++)
      {
        if (dpb.fs_ref[i]->is_used==3)
        {
          if ((dpb.fs_ref[i]->frame->used_for_reference)&&(!dpb.fs_ref[i]->frame->is_long_term))
          {
            if( dpb.fs_ref[i]->frame_num > img->frame_num )
            {
              dpb.fs_ref[i]->frame_num_wrap = dpb.fs_ref[i]->frame_num - MaxFrameNum;
            }
            else
            {
              dpb.fs_ref[i]->frame_num_wrap = dpb.fs_ref[i]->frame_num;
            }
            dpb.fs_ref[i]->frame->pic_num = dpb.fs_ref[i]->frame_num_wrap;
            listX[0][list0idx++] = dpb.fs_ref[i]->frame;
          }
        }
      }
      // order list 0 by PicNum
      qsort((void *)listX[0], list0idx, sizeof(StorablePicture*), compare_pic_by_pic_num_desc);
      listXsize[0] = list0idx;
//      printf("listX[0] (PicNum): "); for (i=0; i<list0idx; i++){printf ("%d  ", listX[0][i]->pic_num);} printf("\n");

      // long term handling
      for (i=0; i<dpb.ltref_frames_in_buffer; i++)
      {
        if (dpb.fs_ltref[i]->is_used==3)
        {
          dpb.fs_ltref[i]->frame->long_term_pic_num = dpb.fs_ltref[i]->frame->long_term_frame_idx;
          // if we have two fields, both must be long-term
          listX[0][list0idx++]=dpb.fs_ltref[i]->frame;
        }
      }
      qsort((void *)&listX[0][listXsize[0]], list0idx-listXsize[0], sizeof(StorablePicture*), compare_pic_by_lt_pic_num_asc);
      listXsize[0] = list0idx;
    }
    else
    {
      fs_list0 = calloc(dpb.size, sizeof (FrameStore*));
      if (NULL==fs_list0) 
         no_mem_exit("init_lists: fs_list0");
      fs_listlt = calloc(dpb.size, sizeof (FrameStore*));
      if (NULL==fs_listlt) 
         no_mem_exit("init_lists: fs_listlt");

      if (currPicStructure == TOP_FIELD)
      {
        add_top    = 1;
        add_bottom = 0;
      }
      else
      {
        add_top    = 0;
        add_bottom = 1;
      }
      
      for (i=0; i<dpb.ref_frames_in_buffer; i++)
      {
        if (dpb.fs_ref[i]->is_reference)
        {
          if( dpb.fs_ref[i]->frame_num > img->frame_num )
          {
            dpb.fs_ref[i]->frame_num_wrap = dpb.fs_ref[i]->frame_num - MaxFrameNum;
          }
          else
          {
            dpb.fs_ref[i]->frame_num_wrap = dpb.fs_ref[i]->frame_num;
          }
          if (dpb.fs_ref[i]->is_reference & 1)
          {
            dpb.fs_ref[i]->top_field->pic_num = (2 * dpb.fs_ref[i]->frame_num_wrap) + add_top;
          }
          if (dpb.fs_ref[i]->is_reference & 2)
          {
            dpb.fs_ref[i]->bottom_field->pic_num = (2 * dpb.fs_ref[i]->frame_num_wrap) + add_bottom;
          }
          fs_list0[list0idx++] = dpb.fs_ref[i];
        }
      }

      qsort((void *)fs_list0, list0idx, sizeof(FrameStore*), compare_fs_by_frame_num_desc);

//      printf("fs_list0 (FrameNum): "); for (i=0; i<list0idx; i++){printf ("%d  ", fs_list0[i]->frame_num);} printf("\n");

      listXsize[0] = 0;
      gen_pic_list_from_frame_list(currPicStructure, fs_list0, list0idx, listX[0], &listXsize[0], 0);

//      printf("listX[0] (PicNum): "); for (i=0; i<listXsize[0]; i++){printf ("%d  ", listX[0][i]->pic_num);} printf("\n");

      // long term handling
      for (i=0; i<dpb.ltref_frames_in_buffer; i++)
      {
        fs_listlt[listltidx++]=dpb.fs_ltref[i];
        if (dpb.fs_ltref[i]->is_long_term & 1)
        {
          dpb.fs_ltref[i]->top_field->long_term_pic_num = 2 * dpb.fs_ltref[i]->top_field->long_term_frame_idx + add_top;
        }
        if (dpb.fs_ltref[i]->is_long_term & 2)
        {
          dpb.fs_ltref[i]->bottom_field->long_term_pic_num = 2 * dpb.fs_ltref[i]->bottom_field->long_term_frame_idx + add_bottom;
        }
      }

      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);

      free(fs_list0);
      free(fs_listlt);
    }
    listXsize[1] = 0;
  }
  else
  {
    // B-Slice
    if (currPicStructure == FRAME)  
    {
      for (i=0; i<dpb.ref_frames_in_buffer; i++)
      {
        if (dpb.fs_ref[i]->is_used==3)
        {
          if ((dpb.fs_ref[i]->frame->used_for_reference)&&(!dpb.fs_ref[i]->frame->is_long_term))
          {
            if (img->framepoc > dpb.fs_ref[i]->frame->poc)
            {
              listX[0][list0idx++] = dpb.fs_ref[i]->frame;
            }
          }
        }
      }
      qsort((void *)listX[0], list0idx, sizeof(StorablePicture*), compare_pic_by_poc_desc);
      list0idx_1 = list0idx;
      for (i=0; i<dpb.ref_frames_in_buffer; i++)
      {
        if (dpb.fs_ref[i]->is_used==3)
        {
          if ((dpb.fs_ref[i]->frame->used_for_reference)&&(!dpb.fs_ref[i]->frame->is_long_term))
          {
            if (img->framepoc < dpb.fs_ref[i]->frame->poc)
            {
              listX[0][list0idx++] = dpb.fs_ref[i]->frame;
            }
          }
        }
      }
      qsort((void *)&listX[0][list0idx_1], list0idx-list0idx_1, sizeof(StorablePicture*), compare_pic_by_poc_asc);

      for (j=0; j<list0idx_1; j++)
      {
        listX[1][list0idx-list0idx_1+j]=listX[0][j];
      }
      for (j=list0idx_1; j<list0idx; j++)
      {
        listX[1][list0idx_1-j]=listX[0][j];
      }

      listXsize[0] = listXsize[1] = list0idx;

//      printf("listX[0] currPoc=%d (Poc): ", img->framepoc); for (i=0; i<listXsize[0]; i++){printf ("%d  ", listX[0][i]->poc);} printf("\n");
//      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++)
      {
        if (dpb.fs_ltref[i]->is_used==3)
        {
          // if we have two fields, both must be long-term
          listX[0][list0idx]  =dpb.fs_ltref[i]->frame;
          listX[1][list0idx++]=dpb.fs_ltref[i]->frame;
        }
      }
      qsort((void *)&listX[0][listXsize[0]], list0idx-listXsize[0], sizeof(StorablePicture*), compare_pic_by_lt_pic_num_asc);
      qsort((void *)&listX[1][listXsize[0]], list0idx-listXsize[0], sizeof(StorablePicture*), compare_pic_by_lt_pic_num_asc);
      listXsize[0] = listXsize[1] = list0idx;
    }
    else
    {
      fs_list0 = calloc(dpb.size, sizeof (FrameStore*));
      if (NULL==fs_list0) 
         no_mem_exit("init_lists: fs_list0");
      fs_list1 = calloc(dpb.size, sizeof (FrameStore*));
      if (NULL==fs_list1) 
         no_mem_exit("init_lists: fs_list1");
      fs_listlt = calloc(dpb.size, sizeof (FrameStore*));
      if (NULL==fs_listlt) 
         no_mem_exit("init_lists: fs_listlt");

      listXsize[0] = 0;
      listXsize[1] = 1;

      for (i=0; i<dpb.ref_frames_in_buffer; i++)
      {
        if (dpb.fs_ref[i]->is_used)
        {
          if (img->ThisPOC > dpb.fs_ref[i]->poc)
          {
            fs_list0[list0idx++] = dpb.fs_ref[i];
          }
        }
      }
      qsort((void *)fs_list0, list0idx, sizeof(FrameStore*), compare_fs_by_poc_desc);
      list0idx_1 = list0idx;
      for (i=0; i<dpb.ref_frames_in_buffer; i++)
      {
        if (dpb.fs_ref[i]->is_used)
        {
          if (img->ThisPOC < dpb.fs_ref[i]->poc)
          {
            fs_list0[list0idx++] = dpb.fs_ref[i];
          }
        }
      }
      qsort((void *)&fs_list0[list0idx_1], list0idx-list0idx_1, sizeof(FrameStore*), compare_pic_by_poc_asc);

      for (j=0; j<list0idx_1; j++)
      {
        fs_list1[list0idx-list0idx_1+j]=fs_list0[j];
      }
      for (j=list0idx_1; j<list0idx; j++)
      {
        fs_list1[list0idx_1-j]=fs_list0[j];
      }
      
//      printf("fs_list0 currPoc=%d (Poc): ", img->ThisPOC); for (i=0; i<list0idx; i++){printf ("%d  ", fs_list0[i]->poc);} printf("\n");
//      printf("fs_list1 currPoc=%d (Poc): ", img->ThisPOC); for (i=0; i<list0idx; i++){printf ("%d  ", fs_list1[i]->poc);} printf("\n");

      listXsize[0] = 0;
      listXsize[1] = 0;
      gen_pic_list_from_frame_list(currPicStructure, fs_list0, list0idx, listX[0], &listXsize[0], 0);
      gen_pic_list_from_frame_list(currPicStructure, fs_list1, list0idx, listX[1], &listXsize[1], 0);

//      printf("listX[0] currPoc=%d (Poc): ", img->framepoc); for (i=0; i<listXsize[0]; i++){printf ("%d  ", listX[0][i]->poc);} printf("\n");
//      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 to be done
      // 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);

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久影视一区二区| 久久精品亚洲麻豆av一区二区 | 一本久道久久综合中文字幕| 六月丁香综合在线视频| 亚洲午夜电影在线观看| 亚洲一区二区在线观看视频| 亚洲精品第一国产综合野| 综合激情成人伊人| 亚洲精品视频一区| 一区二区三区在线观看国产| 亚洲精品视频免费观看| 午夜精品一区二区三区免费视频| 天堂久久一区二区三区| 免费久久99精品国产| 国产真实乱偷精品视频免| 国内精品伊人久久久久影院对白| 国产精品一区二区黑丝| 风间由美一区二区三区在线观看 | 最新国产成人在线观看| 亚洲蜜臀av乱码久久精品| 亚洲一级二级在线| 奇米影视一区二区三区| 国产美女娇喘av呻吟久久| 播五月开心婷婷综合| 欧洲一区在线电影| 日韩精品中文字幕一区 | 国产精品主播直播| av影院午夜一区| 欧美色涩在线第一页| 日韩欧美久久久| 国产精品久久久久影院亚瑟 | 麻豆国产91在线播放| 国产成人一级电影| 91在线看国产| 3d动漫精品啪啪一区二区竹菊| 欧美变态口味重另类| 国产精品久久久久影院亚瑟| 午夜精品免费在线| 欧美性猛交xxxx乱大交退制版| 91精品国产综合久久婷婷香蕉| 国产午夜精品久久| 亚洲国产日韩精品| 国产成人日日夜夜| 欧美日韩成人综合| 国产欧美日韩在线视频| 亚洲电影一级黄| 国产麻豆成人精品| 欧美视频一区二区在线观看| 国产午夜亚洲精品羞羞网站| 亚洲国产成人porn| 丰满白嫩尤物一区二区| 欧美一区二区视频在线观看 | 美女脱光内衣内裤视频久久网站 | 国产亚洲短视频| 亚洲一二三四在线| 国产激情精品久久久第一区二区 | 一区二区三区.www| 国产乱人伦精品一区二区在线观看| 91麻豆文化传媒在线观看| 精品久久五月天| 亚洲国产精品久久一线不卡| 成人免费高清在线| 精品捆绑美女sm三区| 亚洲成人激情av| 99这里只有久久精品视频| 日韩精品自拍偷拍| 婷婷丁香久久五月婷婷| 91在线丨porny丨国产| 久久精品无码一区二区三区| 性久久久久久久久久久久| 91浏览器打开| 国产精品区一区二区三区| 黄一区二区三区| 91精品中文字幕一区二区三区| 亚洲欧美自拍偷拍| 欧美日韩成人综合天天影院| 一区在线中文字幕| 国产成人精品在线看| 欧美xxxxx牲另类人与| 石原莉奈在线亚洲二区| 欧洲精品视频在线观看| 成人免费在线播放视频| 国产91综合网| 国产无一区二区| 国产乱码一区二区三区| 精品国精品自拍自在线| 麻豆成人在线观看| 日韩一卡二卡三卡四卡| 日本不卡1234视频| 91精品国产手机| 午夜视频一区二区| 欧美挠脚心视频网站| 亚洲综合另类小说| 欧美午夜不卡视频| 亚洲国产aⅴ天堂久久| 色悠久久久久综合欧美99| 亚洲欧美一区二区久久| 99riav久久精品riav| 亚洲人成在线观看一区二区| 高清久久久久久| 国产精品国产三级国产aⅴ入口 | 在线免费观看一区| 一区二区三区四区不卡视频 | 一二三四社区欧美黄| 在线中文字幕一区| 亚洲午夜一二三区视频| 欧美在线看片a免费观看| 亚洲国产日韩综合久久精品| 欧美日韩国产一二三| 日本视频一区二区| 日韩免费在线观看| 国产一区二区伦理片| 国产亚洲制服色| 成人免费视频视频| 一区二区三区鲁丝不卡| 51精品国自产在线| 精品一区二区三区的国产在线播放| 一区二区高清视频在线观看| 欧美视频在线观看一区| 日本女人一区二区三区| 久久众筹精品私拍模特| 丁香婷婷综合五月| 一区二区视频免费在线观看| 69久久99精品久久久久婷婷| 精品一区二区三区av| 国产精品久久午夜| 欧美日韩在线播放三区四区| 毛片av中文字幕一区二区| 久久久99精品免费观看| av不卡免费电影| 亚洲成a人片在线不卡一二三区| 日韩欧美专区在线| 国产成人aaaa| 亚洲影院免费观看| 精品蜜桃在线看| 91在线你懂得| 轻轻草成人在线| 中文字幕免费观看一区| 欧美性生活一区| 国产乱码精品一区二区三区av | 亚洲第一综合色| 久久一区二区三区国产精品| 97超碰欧美中文字幕| 日本特黄久久久高潮| 国产欧美精品一区aⅴ影院| 在线视频国内自拍亚洲视频| 精品一区免费av| 亚洲精品乱码久久久久| 欧美精品一区二区三区久久久| 成人国产电影网| 另类小说一区二区三区| 综合久久国产九一剧情麻豆| 91精品国产免费久久综合| 成人深夜福利app| 日韩在线一区二区| 亚洲图片激情小说| 精品国产91亚洲一区二区三区婷婷| 91麻豆免费看片| 国产美女视频91| 午夜av一区二区| 中文字幕一区二区三区四区| 日韩免费高清视频| 欧美亚洲综合另类| 粉嫩蜜臀av国产精品网站| 日本在线不卡视频一二三区| 综合网在线视频| 欧美大白屁股肥臀xxxxxx| 欧美色图12p| 91亚洲精品久久久蜜桃| 国产精品一区二区三区99| 五月婷婷激情综合网| 最新欧美精品一区二区三区| 久久久综合视频| 欧美一区二区高清| 欧美天堂亚洲电影院在线播放| 成人污视频在线观看| 狠狠色伊人亚洲综合成人| 视频一区二区中文字幕| 亚洲欧美日韩国产综合| 国产女人18水真多18精品一级做| 国产精品超碰97尤物18| 久久噜噜亚洲综合| 精品久久免费看| 欧美一区二区免费观在线| 欧美年轻男男videosbes| 日本韩国视频一区二区| 99精品视频在线免费观看| 国产福利一区在线观看| 国产在线精品一区二区| 视频一区在线播放| 亚洲成av人影院| 亚洲欧美日韩综合aⅴ视频| 中文字幕第一区综合| 国产欧美一区二区精品性| 9191国产精品| 欧美日韩在线三区| 欧美综合在线视频| 一本大道久久a久久综合| 91在线看国产| 99久久精品国产精品久久|