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

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

?? mbuffer.c

?? 此源碼是關于h264圖像編解碼的工程
?? C
?? 第 1 頁 / 共 5 頁
字號:
 * \brief
 *    compares two stored pictures by poc for qsort in ascending order
 *
 ************************************************************************
 */
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_fs_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
      for (i=0; i<dpb.ltref_frames_in_buffer; i++)
      {
        fs_listlt[listltidx++]=dpb.fs_ltref[i];
      }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产在线精品免费| 亚洲黄色在线视频| 91黄色免费看| 国产乱人伦偷精品视频免下载| 亚洲美女视频一区| 国产日韩欧美在线一区| 欧美精品日韩一本| 91麻豆国产香蕉久久精品| 国产一区二区三区精品欧美日韩一区二区三区 | 精品无人码麻豆乱码1区2区 | 欧美日韩精品一区二区三区四区| 丁香一区二区三区| 狠狠色狠狠色综合| 日韩av一二三| 亚洲午夜私人影院| 亚洲欧美日韩国产综合| 国产精品欧美综合在线| 精品福利av导航| 日韩欧美成人激情| 91精品国产91久久综合桃花| 欧洲另类一二三四区| 91网上在线视频| 成年人网站91| 丰满白嫩尤物一区二区| 激情综合五月天| 奇米影视一区二区三区| 日韩在线观看一区二区| 亚洲第一在线综合网站| 亚洲动漫第一页| 亚洲午夜在线观看视频在线| 一区二区三区国产精华| 一区二区三区在线观看国产| 亚洲精品美国一| 亚洲免费观看高清| 亚洲成人免费av| 亚洲综合丁香婷婷六月香| 亚洲丝袜自拍清纯另类| 中文字幕中文在线不卡住| 国产精品久久久久久久岛一牛影视 | 成人美女在线观看| 成人午夜电影小说| 成人av资源下载| 99re热视频精品| 色欧美日韩亚洲| 欧美日韩精品一区二区三区| 欧美日韩视频在线一区二区| 欧美巨大另类极品videosbest| 欧美日韩激情在线| 337p亚洲精品色噜噜狠狠| 4438x成人网最大色成网站| 91精品婷婷国产综合久久竹菊| 欧美一级生活片| 欧美大片一区二区三区| 国产情人综合久久777777| 国产精品国产成人国产三级 | 国产精品一二三区在线| 国产高清久久久| 成人福利视频网站| 色噜噜狠狠成人网p站| 欧美剧在线免费观看网站| 7878成人国产在线观看| 精品国产乱码久久| 中国色在线观看另类| 亚洲制服丝袜av| 精品综合久久久久久8888| 丁香婷婷综合网| 欧美日韩专区在线| 久久综合九色欧美综合狠狠| 色综合久久久久久久久久久| 豆国产96在线|亚洲| 91欧美激情一区二区三区成人| 91福利国产精品| 精品久久久久久无| 亚洲高清三级视频| 日本欧洲一区二区| 成人18精品视频| 欧美一级视频精品观看| 中文字幕不卡在线| 天堂影院一区二区| 成人福利视频网站| 欧美一区二区在线观看| 国产精品乱人伦中文| 无码av中文一区二区三区桃花岛| 国产盗摄一区二区| 91.com视频| 亚洲男女毛片无遮挡| 老汉av免费一区二区三区| 99这里只有精品| 精品国产乱码久久久久久老虎| 综合激情成人伊人| 国产伦精品一区二区三区视频青涩| 在线视频国内一区二区| 久久综合九色综合欧美亚洲| 午夜影院久久久| 成人高清av在线| 精品国产91乱码一区二区三区 | 久久久久久亚洲综合| 亚洲永久精品国产| 国产精品一区二区久激情瑜伽| 欧美丝袜丝交足nylons图片| 国产精品美女久久久久久久久久久| 五月婷婷综合在线| 一本色道综合亚洲| 国产精品欧美综合在线| 国产一区二区毛片| 在线综合视频播放| 亚洲精品成人精品456| 国产91精品精华液一区二区三区 | 亚洲va韩国va欧美va| 91在线码无精品| 国产女主播在线一区二区| 免费成人在线网站| 精品视频一区 二区 三区| 亚洲欧洲性图库| 色悠悠久久综合| 久久久久亚洲蜜桃| 久草这里只有精品视频| 欧美一级艳片视频免费观看| 午夜精品久久久久久久久久| 91国模大尺度私拍在线视频| 国产精品传媒在线| 成人午夜短视频| 中文字幕高清不卡| 成人激情动漫在线观看| 国产色产综合产在线视频| 国产综合色在线| 久久久久国产精品麻豆ai换脸| 老司机精品视频在线| 欧美岛国在线观看| 另类欧美日韩国产在线| 欧美videos大乳护士334| 久久99国产精品麻豆| 欧美电视剧在线看免费| 美女国产一区二区| 精品国产伦一区二区三区观看体验| 免费人成网站在线观看欧美高清| 欧美一区二区三区免费| 久久不见久久见免费视频7 | 国产精品灌醉下药二区| 国产91精品精华液一区二区三区| 中文字幕欧美区| 色综合久久天天| 亚洲成人av一区二区三区| 欧美日韩亚洲综合| 蜜臀精品一区二区三区在线观看| 欧美成人精品二区三区99精品| 国产制服丝袜一区| 国产精品视频免费看| 色婷婷激情综合| 无码av免费一区二区三区试看| 日韩三级精品电影久久久| 韩国精品久久久| 日韩码欧中文字| 欧美电影影音先锋| 精品一区二区三区日韩| 国产精品久久精品日日| 色婷婷综合在线| 欧美aa在线视频| 国产亲近乱来精品视频| 在线视频一区二区三| 看电视剧不卡顿的网站| 国产视频一区二区在线| 欧美三级电影在线观看| 久久99精品国产.久久久久久 | 国产欧美一区二区精品性色 | 成人综合婷婷国产精品久久蜜臀 | 欧美激情在线一区二区三区| 久久久国际精品| 精品国产一区二区三区不卡| 国产一区二区三区四区五区美女 | 亚洲男人电影天堂| 欧美一区二区在线不卡| 国产ts人妖一区二区| 亚洲国产日韩a在线播放| 337p粉嫩大胆色噜噜噜噜亚洲| 91在线观看污| 日韩av电影免费观看高清完整版 | 精品国产免费人成电影在线观看四季| 国产成人精品免费看| 亚洲第一久久影院| 国产免费成人在线视频| 欧美在线视频你懂得| 国产一区二区免费视频| 亚洲午夜免费福利视频| 国产亚洲综合色| 91麻豆精品久久久久蜜臀| av在线一区二区| 精品一区二区久久| 亚洲超碰97人人做人人爱| 久久人人超碰精品| 欧美亚洲综合在线| 久久福利视频一区二区| 一级女性全黄久久生活片免费| 欧美成人伊人久久综合网| 日本韩国精品一区二区在线观看| 国产真实精品久久二三区| 亚洲第一福利一区| 自拍视频在线观看一区二区| 精品福利一区二区三区免费视频| 欧美日韩视频在线第一区|