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

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

?? q_matrix.c

?? h264標準的VC實現
?? C
字號:

/*!
 *************************************************************************************
 * \file q_matrix.c
 *
 * \brief
 *    read q_matrix parameters from input file: q_matrix.cfg
 *
 *************************************************************************************
 */
#include <stdlib.h>
#include <string.h>

#include "global.h"

extern char *GetConfigFileContent (char *Filename, int error_type);

#define MAX_ITEMS_TO_PARSE  1000

int matrix4x4_check[6] = {0, 0, 0, 0, 0, 0};
int matrix8x8_check[2] = {0, 0};

/*!
 ***********************************************************************
 * \brief
 *    Check the parameter name.
 * \param s
 *    parameter name string
 * \param type
 *    4x4 or 8x8 matrix type
 * \return
 *    the index number if the string is a valid parameter name,         \n
 *    -1 for error
 ***********************************************************************
 */
int CheckParameterName (char *s, int *type)
{
  int i = 0;

  *type = 0;
  while ((MatrixType4x4[i] != NULL) && (i<6))
  {
    if (0==strcmp (MatrixType4x4[i], s))
      return i;
    else
      i++;
  }

  i = 0;
  *type = 1;
  while ((MatrixType8x8[i] != NULL) && (i<2))
  {
    if (0==strcmp (MatrixType8x8[i], s))
      return i;
    else
      i++;
  }

  return -1;
};

/*!
 ***********************************************************************
 * \brief
 *    Parse the Q matrix values read from cfg file.
 * \param buf
 *    buffer to be parsed
 * \param bufsize
 *    buffer size of buffer
 ***********************************************************************
 */
void ParseMatrix (char *buf, int bufsize)
{
  char *items[MAX_ITEMS_TO_PARSE];
  int MapIdx;
  int item = 0;
  int InString = 0, InItem = 0;
  char *p = buf;
  char *bufend = &buf[bufsize];
  int IntContent;
  int i, j, range, type, cnt;
  short *ScalingList;

  while (p < bufend)
  {
    switch (*p)
    {
      case 13:
        p++;
        break;
      case '#':                 // Found comment
        *p = '\0';              // Replace '#' with '\0' in case of comment immediately following integer or string
        while (*p != '\n' && p < bufend)  // Skip till EOL or EOF, whichever comes first
          p++;
        InString = 0;
        InItem = 0;
        break;
      case '\n':
        InItem = 0;
        InString = 0;
        *p++='\0';
        break;
      case ' ':
      case '\t':              // Skip whitespace, leave state unchanged
        if (InString)
          p++;
        else
        {                     // Terminate non-strings once whitespace is found
          *p++ = '\0';
          InItem = 0;
        }
        break;

      case '"':               // Begin/End of String
        *p++ = '\0';
        if (!InString)
        {
          items[item++] = p;
          InItem = ~InItem;
        }
        else
          InItem = 0;
        InString = ~InString; // Toggle
        break;

      case ',':
        p++;
        InItem = 0;
        break;

      default:
        if (!InItem)
        {
          items[item++] = p;
          InItem = ~InItem;
        }
        p++;
    }
  }

  item--;

  for (i=0; i<item; i+=cnt)
  {
    cnt=0;
    if (0 > (MapIdx = CheckParameterName (items[i+cnt], &type)))
    {
      snprintf (errortext, ET_SIZE, " Parsing error in config file: Parameter Name '%s' not recognized.", items[i+cnt]);
      error (errortext, 300);
    }
    cnt++;
    if (strcmp ("=", items[i+cnt]))
    {
      snprintf (errortext, ET_SIZE, " Parsing error in config file: '=' expected as the second token in each item.");
      error (errortext, 300);
    }
    cnt++;

    if (!type) //4x4 Matrix
    {
      range = 16;
      ScalingList = ScalingList4x4input[MapIdx];
      matrix4x4_check[MapIdx] = 1; //to indicate matrix found in cfg file
    }
    else //8x8 matrix
    {
      range = 64;
      ScalingList = ScalingList8x8input[MapIdx];
      matrix8x8_check[MapIdx] = 1; //to indicate matrix found in cfg file
    }

    for(j=0; j<range; j++)
    {
      if (1 != sscanf (items[i+cnt+j], "%d", &IntContent))
      {
        snprintf (errortext, ET_SIZE, " Parsing error: Expected numerical value for Parameter of %s, found '%s'.", items[i], items[i+cnt+j]);
        error (errortext, 300);
      }

      ScalingList[j] = (short)IntContent; //save value in matrix
    }
    cnt+=j;
    printf (".");
  }
}

/*!
 ***********************************************************************
 * \brief
 *    Check Q Matrix values. If invalid values found in matrix,
 *    whole matrix will be patch with default value 16.
 ***********************************************************************
 */
void PatchMatrix(void)
{
  short *ScalingList;
  int i, cnt, fail;

  for(i=0; i<6; i++)
  {
    if(input->ScalingListPresentFlag[i])
    {
      ScalingList=ScalingList4x4input[i];
      if(matrix4x4_check[i])
      {
        fail=0;
        for(cnt=0; cnt<16; cnt++)
        {
          if(ScalingList[cnt]<0 || ScalingList[cnt]>255) // ScalingList[0]=0 to indicate use default matrix
          {
            fail=1;
            break;
          }
        }

        if(fail) //value of matrix exceed range
        {
          printf("\n%s value exceed range. (Value must be 1 to 255)\n", MatrixType4x4[i]);
          printf("Padding with default values for this matrix.\n\n");
          if(i>2)
            memcpy(ScalingList, Quant_inter_default, sizeof(short)*16);
          else
            memcpy(ScalingList, Quant_intra_default, sizeof(short)*16);
        }
      }
      else //matrix not found, pad with default value
      {
        printf("\n%s matrix not found... padding with default values.\n\n", MatrixType4x4[i]);
        if(i>2)
          memcpy(ScalingList, Quant_inter_default, sizeof(short)*16);
        else
          memcpy(ScalingList, Quant_intra_default, sizeof(short)*16);
      }
    }

    if((i<2) && input->ScalingListPresentFlag[i+6])
    {
      ScalingList=ScalingList8x8input[i];
      if(matrix8x8_check[i])
      {
        fail=0;
        for(cnt=0; cnt<64; cnt++)
        {
          if(ScalingList[cnt]<0 || ScalingList[cnt]>255) // ScalingList[0]=0 to indicate use default matrix
          {
            fail=1;
            break;
          }
        }

        if(fail) //value of matrix exceed range
        {
          printf("\n%s value exceed range. (Value must be 1 to 255)\n", MatrixType8x8[i]);
          printf("Padding with default values for this matrix.\n\n");
          if(i==7)
            memcpy(ScalingList, Quant8_inter_default, sizeof(short)*64);
          else
            memcpy(ScalingList, Quant8_intra_default, sizeof(short)*64);
        }
      }
      else //matrix not found, pad with default value
      {
        printf("\n%s matrix not found... padding with default values.\n\n", MatrixType8x8[i]);
        if(i==7)
          memcpy(ScalingList, Quant8_inter_default, sizeof(short)*64);
        else
          memcpy(ScalingList, Quant8_intra_default, sizeof(short)*64);
      }
    }
  }
}

/*!
 ***********************************************************************
 * \brief
 *    Initialise Q matrix values.
 ***********************************************************************
 */
void Init_QMatrix (void)
{
  char *content;

  if(input->ScalingMatrixPresentFlag)
  {
    printf ("Parsing Configfile %s ", input->QmatrixFile);
    content = GetConfigFileContent(input->QmatrixFile, 0);
    if(content!='\0')
      ParseMatrix(content, strlen (content));
    else
      printf("\nError...file not found, proceeding with default values for all the matrix.");
    PatchMatrix();
    printf("\n");

    memset(UseDefaultScalingMatrix4x4Flag, 0, sizeof(short)*6);
    UseDefaultScalingMatrix8x8Flag[0]=UseDefaultScalingMatrix8x8Flag[1]=0;
  
    free(content);
  }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
青青草伊人久久| 在线精品视频一区二区三四| 91丨九色丨蝌蚪富婆spa| 欧美日韩久久一区| 欧美激情一区在线观看| 五月激情综合婷婷| 成人av第一页| 精品国产免费一区二区三区四区| 17c精品麻豆一区二区免费| 美女网站色91| 欧美日韩在线播放一区| 中文字幕一区免费在线观看 | 五月天欧美精品| 成人一区二区三区视频| 日韩写真欧美这视频| 亚洲综合在线视频| 成人精品国产免费网站| wwwwww.欧美系列| 日韩影院免费视频| 欧美日韩在线播放三区四区| 亚洲人成人一区二区在线观看| 激情另类小说区图片区视频区| 欧美日韩国产三级| 亚洲第一狼人社区| 色狠狠色噜噜噜综合网| 亚洲欧美在线观看| eeuss鲁片一区二区三区 | 久久国内精品自在自线400部| 欧美综合色免费| 亚洲欧美日韩系列| 99精品欧美一区二区三区综合在线| 久久九九99视频| 国产老肥熟一区二区三区| 久久综合狠狠综合久久综合88 | 欧美高清精品3d| 亚洲午夜精品17c| 欧美日韩国产综合一区二区三区 | 欧美一区二区三区四区在线观看 | 色婷婷精品久久二区二区蜜臂av | 欧美老年两性高潮| 亚洲高清免费在线| 在线播放中文字幕一区| 日韩中文字幕av电影| 欧美一区二区三区在线看| 秋霞电影一区二区| 欧美精品一区二区三区一线天视频| 美国精品在线观看| 久久一日本道色综合| 国产精品一卡二卡| 亚洲色图一区二区| 欧美日本一道本在线视频| 天天av天天翘天天综合网| 欧美一区二区三区爱爱| 激情综合色综合久久综合| 欧美国产一区在线| 91麻豆swag| 天堂久久久久va久久久久| 日韩欧美一级二级三级| 国产精品456露脸| 亚洲精品水蜜桃| 日韩一区二区三区三四区视频在线观看| 日韩va亚洲va欧美va久久| 精品国产精品网麻豆系列| 丁香婷婷综合激情五月色| 亚洲香肠在线观看| 日韩欧美一级特黄在线播放| 国产成人av电影| 亚洲午夜免费福利视频| 精品国内片67194| 99这里只有久久精品视频| 午夜不卡在线视频| 日本一区二区三区dvd视频在线 | 亚洲一区二区视频在线观看| 欧美一卡2卡三卡4卡5免费| 国产一区二区三区日韩| 亚洲精品写真福利| 精品久久久久久久人人人人传媒| 国产福利不卡视频| 五月激情丁香一区二区三区| 日本一区二区视频在线观看| 欧美日本不卡视频| 99久久精品国产观看| 秋霞电影网一区二区| 亚洲精品菠萝久久久久久久| 精品对白一区国产伦| 欧美在线free| 成人少妇影院yyyy| 久久99久久99| 午夜伊人狠狠久久| 1024国产精品| 欧美激情在线一区二区| 日韩欧美一区在线观看| 欧美在线视频日韩| gogogo免费视频观看亚洲一| 免费成人av资源网| 偷窥少妇高潮呻吟av久久免费| 亚洲特黄一级片| 国产欧美日韩综合精品一区二区| 欧美一区二区三区四区在线观看| 在线免费观看一区| 99久久婷婷国产综合精品电影| 国产一区亚洲一区| 激情偷乱视频一区二区三区| 日韩国产欧美视频| 成人免费av网站| 蜜桃视频在线观看一区| 偷窥国产亚洲免费视频| 亚洲午夜日本在线观看| 亚洲区小说区图片区qvod| 国产日韩欧美综合在线| 久久色在线观看| 精品国产第一区二区三区观看体验| 欧美精品粉嫩高潮一区二区| 欧美网站一区二区| 欧美视频精品在线观看| 欧美性大战xxxxx久久久| 色综合一个色综合| 一本色道a无线码一区v| 91久久线看在观草草青青| 91一区二区在线| 91麻豆swag| 日本高清免费不卡视频| 在线精品观看国产| 欧美老年两性高潮| 日韩精品一区二区在线观看| 精品久久国产字幕高潮| 久久日韩粉嫩一区二区三区| 久久精品欧美一区二区三区麻豆| 久久久电影一区二区三区| 久久久99久久精品欧美| 日本一区二区三区高清不卡 | 日韩精品一区二区三区swag | 911精品产国品一二三产区| 欧美伊人久久久久久久久影院| 欧美性受xxxx| 欧美一区二区黄色| 久久理论电影网| 亚洲私人影院在线观看| 亚洲一区二区不卡免费| 青青草视频一区| 国产精品一区在线观看你懂的| 波多野结衣在线一区| 在线观看免费一区| 日韩一级完整毛片| 亚洲国产精品ⅴa在线观看| 亚洲色大成网站www久久九九| 亚洲一区二区视频在线观看| 麻豆国产91在线播放| 成人免费观看av| 欧美丝袜自拍制服另类| 欧美本精品男人aⅴ天堂| 国产精品伦理一区二区| 亚洲自拍都市欧美小说| 国产精品一区三区| 欧美主播一区二区三区美女| 日韩欧美在线一区二区三区| 国产精品久久久久婷婷| 日本亚洲最大的色成网站www| 国产成人av一区二区| 欧美日韩精品一区二区三区| 久久久精品综合| 天天综合天天做天天综合| 国产91高潮流白浆在线麻豆| 欧美日韩精品一区二区三区蜜桃| 国产亚洲欧洲一区高清在线观看| 亚洲精品国产无天堂网2021 | 日韩精品一区二区三区四区| 国产日韩欧美制服另类| 日韩av在线发布| 99精品视频一区二区三区| 亚洲精品在线免费观看视频| 洋洋av久久久久久久一区| 国产精品18久久久| 欧美日韩大陆在线| 综合久久久久久| 国内精品久久久久影院色| 欧美日本韩国一区二区三区视频| 美腿丝袜亚洲一区| 欧美一a一片一级一片| 亚洲欧美综合色| 国内成人精品2018免费看| 欧美亚洲免费在线一区| 国产精品美女久久福利网站| 久久精品久久99精品久久| 欧美精品一卡二卡| 一区二区三区中文字幕电影| 成人午夜在线视频| 欧美va亚洲va香蕉在线| 日韩国产精品91| 6080亚洲精品一区二区| 亚洲国产精品久久艾草纯爱| 99久久精品久久久久久清纯| 国产亚洲欧美日韩日本| 精品在线播放午夜| 日韩一区二区在线看片| 免费成人你懂的| 日韩精品一区二区三区在线观看| 日韩激情av在线| 日韩视频免费直播| 捆绑调教美女网站视频一区|