⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 encodercodingparameter.h

📁 JVT-Z203_jsvm.rar
💻 H
📖 第 1 页 / 共 4 页
字号:
  printf("  -lqp    (Layer) (ResidualAndMotionQP)\n");
  printf("  -meqplp (Layer) (MotionQPLowpass)\n");
  printf("  -ilpred (Layer) (InterLayerPredictionMode)\n");
  printf("  -blid   (Layer) (BaseLayerId)\n");
  printf("  -mfile  (Layer) (Mode) (MotionInfoFile)\n");
  printf("  -bcip   Constrained intra prediction for base layer (needed for single-loop) in scripts\n");
  //S051{
  printf("  -anasip (Layer) (SIP Analysis Mode)[0: persists all inter-predictions, 1: forbids all inter-prediction.] (File for storing bits information)\n");
  printf("  -encsip (Layer) (File with stored SIP information)\n");
  //S051}
  //JVT-W052 bug_fixed
  printf("  -icsei   (IntegrityCheckSEIEnableFlag)[0: IntegrityCheckSEI is not applied, 1: IntegrityCheckSEI is applied.]\n");
  //JVT-W052 bug_fixed
   //JVT-U085 LMI
  printf("  -tlnest (TlevelNestingFlag)[0: temporal level nesting constraint is not applied, 1: the nesting constraint is applied.]\n");
  //JVT-U116 JVT-V088 JVT-W062 LMI
  printf("  -tlidx (Tl0DepRepIdxSeiEnable)[0: tl0_dep_rep_idx is not present, 1: tl0_dep_rep_idx is present.]\n");
  //JVT-U106 Behaviour at slice boundaries{
  printf("  -ciu    (Constrained intra upsampling)[0: no, 1: yes]\n");
  //JVT-U106 Behaviour at slice boundaries}
  printf("  -kpm       (mode) [0:only for FGS(default), 1:FGS&MGS, 2:always]\n");
  printf("  -mgsctrl   (mode) [0:normal encoding(default), 1:EL ME, 2:EL ME+MC]\n");
  
  printf("  -eqpc   (layer) (value)         sets explicit QP cascading mode for given layer [0: no, 1: yes]\n");
  printf("  -dqp    (layer) (level) (value) sets delta QP for given layer and temporal level (in explicit mode)\n");
  printf("  -aeqpc  (value)                 sets explicit QP cascading mode for all layers  [0: no, 1: yes]\n");
  printf("  -adqp   (level) (value)         sets delta QP for all layers and given temporal level (in explicit mode)\n");
  printf("  -xdqp   (DQP0) (DDQP1) (DDQPN)  sets delta QP for all layers (in explicit mode)\n");

  printf("  -mbaff  (layer) (Mb Adaptive Frame Field Coding)  \n");
  printf("  -paff   (layer) (Picture Adadptive Frame Field Coding)   \n");

  printf("  -h       Print Option List \n");
  printf("\n");
}


ErrVal EncoderCodingParameter::xReadLine( FILE* hFile, std::string* pacTag )
  {
  ROF( pacTag );

    Int  n;
    UInt uiTagNum = 0;
  Bool          bComment  = false;
  std::string*  pcTag     = &pacTag[0];

    for( n = 0; n < 4; n++ )
    {
      pacTag[n] = "";
    }

  for( n = 0; ; n++ )
    {
      Char cChar = (Char) fgetc( hFile );
    ROTRS( cChar == '\n' || feof( hFile ), Err::m_nOK );  // end of line
    if   ( cChar == '#' )
      {
      bComment = true;
      }
    if( ! bComment )
      {
      if ( cChar == '\t' || cChar == ' ' ) // white space
        {
          ROTR( uiTagNum == 3, Err::m_nERR );
        if( ! pcTag->empty() )
          {
            uiTagNum++;
          pcTag = &pacTag[uiTagNum]; 
          }
  }
      else
  {
        *pcTag += cChar;
  }
}
  }

 }

ErrVal EncoderCodingParameter::xReadFromFile( std::string& rcFilename, std::string& rcBitstreamFile )
{
  std::string acLayerConfigName[MAX_LAYERS];
  std::string acTags[4];
  UInt        uiLayerCnt   = 0;
  UInt        uiParLnCount = 0;

  FILE *f = fopen( rcFilename.c_str(), "r");
  if( NULL == f )
  { 
    printf( "failed to open %s parameter file\n", rcFilename.c_str() );
    return Err::m_nERR;
  } 

  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineStr ("OutputFile",              &rcBitstreamFile,                                      "test.264");
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineDbl ("FrameRate",               &m_dMaximumFrameRate,                                  60.0      );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineDbl ("MaxDelay",                &m_dMaximumDelay,                                      1200.0    );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("FramesToBeEncoded",       &m_uiTotalFrames,                                      1 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("GOPSize",                 &m_uiGOPSize,                                          1 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("IntraPeriod",             &m_uiIntraPeriod,                                      MSYS_UINT_MAX );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("NumberReferenceFrames",   &m_uiNumRefFrames,                                     1 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("BaseLayerMode",           &m_uiBaseLayerMode,                                    3 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("NumLayers",               &m_uiNumberOfLayers,                                   1 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("SearchRange",             &(m_cMotionVectorSearchParams.m_uiSearchRange),        96);
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("BiPredIter",              &(m_cMotionVectorSearchParams.m_uiNumMaxIter),         4 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("IterSearchRange",         &(m_cMotionVectorSearchParams.m_uiIterSearchRange),    8 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("LoopFilterDisable",       &(m_cLoopFilterParams.m_uiFilterIdc),                  0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineInt ("LoopFilterAlphaC0Offset", &(m_cLoopFilterParams.m_iAlphaOffset),                 0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineInt ("LoopFilterBetaOffset",    &(m_cLoopFilterParams.m_iBetaOffset),                  0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("InterLayerLoopFilterDisable",       &(m_cInterLayerLoopFilterParams.m_uiFilterIdc),                  0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineInt ("InterLayerLoopFilterAlphaC0Offset", &(m_cInterLayerLoopFilterParams.m_iAlphaOffset),                 0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineInt ("InterLayerLoopFilterBetaOffset",    &(m_cInterLayerLoopFilterParams.m_iBetaOffset),                  0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("SearchMode",              &(m_cMotionVectorSearchParams.m_uiSearchMode),         0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("SearchFuncFullPel",       &(m_cMotionVectorSearchParams.m_uiFullPelDFunc),       0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("SearchFuncSubPel",        &(m_cMotionVectorSearchParams.m_uiSubPelDFunc),        0 );

//TMM_WP
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("WeightedPrediction",         &m_uiIPMode,                                     0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("WeightedBiprediction",       &m_uiBMode,                                      0 );  
//TMM_WP
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineInt("NonRequiredEnable",			&m_bNonRequiredEnable,							 0 );  //NonRequired JVT-Q066
  std::string cInputFile, cReconFile;
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("AVCMode",                 &m_uiAVCmode,                                          0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineStr ("InputFile",               &cInputFile,                                           "in.yuv");
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineStr ("ReconFile",               &cReconFile,                                           "rec.yuv");
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("SourceWidth",             &m_uiFrameWidth,                                       0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("SourceHeight",            &m_uiFrameHeight,                                      0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("SymbolMode",              &m_uiSymbolMode,                                       1 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("FRExt",                   &m_ui8x8Mode,                                          1 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineDbl ("BasisQP",                 &m_dBasisQp,                                          26 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("DPBSize",                 &m_uiDPBSize,                                           1 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("NumRefFrames",            &m_uiNumDPBRefFrames,                                  1 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("Log2MaxFrameNum",         &m_uiLog2MaxFrameNum,                                  4 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("Log2MaxPocLsb",           &m_uiLog2MaxPocLsb,                                    4 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineStr ("SequenceFormatString",    &m_cSequenceFormatString,                              "A0*n{P0}" );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineDbl ("DeltaLayer0Quant",        &m_adDeltaQpLayer[0],                                  0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineDbl ("DeltaLayer1Quant",        &m_adDeltaQpLayer[1],                                  0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineDbl ("DeltaLayer2Quant",        &m_adDeltaQpLayer[2],                                  0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineDbl ("DeltaLayer3Quant",        &m_adDeltaQpLayer[3],                                  0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineDbl ("DeltaLayer4Quant",        &m_adDeltaQpLayer[4],                                  0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineDbl ("DeltaLayer5Quant",        &m_adDeltaQpLayer[5],                                  0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("MaxRefIdxActiveBL0",      &m_uiMaxRefIdxActiveBL0,                               1 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("MaxRefIdxActiveBL1",      &m_uiMaxRefIdxActiveBL1,                               1 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("MaxRefIdxActiveP",        &m_uiMaxRefIdxActiveP,                                 1 );

  //JVT-R057 LA-RDO{
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("LARDO",                   &m_uiLARDOEnable,                                      0 ); 
  //JVT-R057 LA-RDO}

  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("RPEncCheck",							 &m_uiEssRPChkEnable,																					0  );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("MVDiffThreshold",				 &m_uiMVThres,																					20 );

	//JVT-T073 {
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("NestingSEI",              &m_uiNestingSEIEnable,                                 0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("SceneInfo",               &m_uiSceneInfoEnable,                                  0 );
  //JVT-T073 }

	//JVT-W052
	m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("IntegrityCheckSEI",          &m_uiIntegrityCheckSEIEnable,                          false ); // Disabled due to buggy behaviour. mwi 070803, bug_fixed
	//JVT-W052

//JVT-S036 lsj start  //bug-fix suffix{{
//PreAndSuffixUnitEnable shall always be on in SVC contexts (i.e. when there are FGS/CGS/spatial enhancement layers)
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("PreAndSuffixUnitEnable",  &m_uiPreAndSuffixUnitEnable,                           1 ); //prefix unit
	m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("MMCOBaseEnable",					 &m_uiMMCOBaseEnable,                                   1 ); 
//JVT-S036 lsj end //bug-fix suffix}}
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("CgsSnrRefinement",        &m_uiCGSSNRRefinementFlag,                             0 );  //JVT-T054
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("TLNestingFlag",           &m_uiTlevelNestingFlag,                                0 );  //JVT-U085
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("TL0DepRepIdxSeiEnable",    &m_uiTl0DepRepIdxSeiEnable,                           0 );  //JVT-U116,JVT-W062

  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("EncodeKeyPictures",       &m_uiEncodeKeyPictures,                                0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("MGSControl",              &m_uiMGSKeyPictureControl,                             0 );

// JVT-V068 HRD {
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("EnableNalHRD",            &m_uiNalHRD,                                           0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("EnableVclHRD",            &m_uiVclHRD,                                           0 );
// JVT-V068 HRD }
//JVT-W049 {
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("EnableRedundantKeyPic",   &m_uiRedundantKeyPic,                                  0 );
//JVT-W049 }
	//JVT-X046 {
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("SliceMode",               &m_uiSliceMode,                                        0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("SliceArgument",           &m_uiSliceArgument,                                    0 );
  //JVT-X046 }

  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("ConstrainedIntraUps",     &m_uiCIUFlag,                                          0 );

  //JVT-W043 {
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("RCMinQP",                 &m_uiRCMinQP,                                         12 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("RCMaxQP",                 &m_uiRCMaxQP,                                         40 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("MaxQpChange",             &m_uiMaxQpChange,                                      2 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("InitialQp",               &m_uiInitialQp,                                       30 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("BasicUnit",               &m_uiBasicUnit,                                       99 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("BitRate",                 &m_uiBitRate,                                      64000 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("RateControlEnable",       &m_uiRateControlEnable,                                0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("AdaptInitialQP",          &m_uiAdaptInitialQP,                                   0 );
  // JVT-W043 }
  m_pEncoderLines[uiParLnCount] = NULL;

  while (!feof(f))
  {
    RNOK( xReadLine( f, acTags ) );
    if ( acTags[0].empty() )
    {
      continue;
    }
    for (UInt ui=0; m_pEncoderLines[ui] != NULL; ui++)
    {
      if( acTags[0] == m_pEncoderLines[ui]->getTag() )
      {
        m_pEncoderLines[ui]->setVar( acTags[1] );
        break;
      }
    }
    if( acTags[0] == "LayerCfg" )
    {
      acLayerConfigName[uiLayerCnt++] = acTags[1];
      continue;
    }
  }

  uiParLnCount = 0;
  while (m_pEncoderLines[uiParLnCount] != NULL)
  {
    delete m_pEncoderLines[uiParLnCount];
    m_pEncoderLines[uiParLnCount] = NULL;
    uiParLnCount++;
  }

  if( m_uiAVCmode )
  {
    m_uiNumberOfLayers = 0;
    getLayerParameters(0).setInputFilename  ( (Char*)cInputFile.c_str() );
    getLayerParameters(0).setOutputFilename ( (Char*)cReconFile.c_str() );
    getLayerParameters(0).setFrameWidth     ( m_uiFrameWidth );
    getLayerParameters(0).setFrameHeight    ( m_uiFrameHeight );
    fclose( f );
    return Err::m_nOK;
  }

  if ( uiLayerCnt != m_uiNumberOfLayers )
  {
    fprintf(stderr, "Could not locate all layer config files: check config file syntax\n");
    AF();
  }

  fclose( f );
//JVT-T054{
  UInt uiPrevLayer        = 0;
  Double  dPrevTemp       = 0.0;
  UInt uiPrevWidth        = 0;
  UInt uiPrevHeight       = 0;
  UInt uiLastLayer        = 0;
//JVT-T054}
  Bool bInterlaced        = false; 
  UInt ui                 = 0;

  for( ui = 0; ui < m_uiNumberOfLayers; ui++ )
  {
    Bool  bFrameMbsOnly = true;
    getLayerParameters(ui).setDependencyId(ui);
    RNOK( xReadLayerFromFile( acLayerConfigName[ui], getLayerParameters(ui) ) );
		if ( getLayerParameters(ui).m_uiMbAff || getLayerParameters(ui).m_uiPAff )
    {
      bFrameMbsOnly = false;
      bInterlaced   = true;			
    }

    // HS: set base layer id
    UInt uiBaseLayerId = getLayerParameters(ui).getBaseLayerId();
    if( ui && uiBaseLayerId == MSYS_UINT_MAX )
    {
      uiBaseLayerId = ui - 1; // default value
    }
    getLayerParameters(ui).setBaseLayerId(uiBaseLayerId);
    // HS: set base layer id

    if( m_uiCGSSNRRefinementFlag )
    {
      if(ui == 0)
      {
        uiPrevLayer  = ui;
        dPrevTemp    = getLayerParameters(ui).getOutputFrameRate();
        uiPrevWidth  = getLayerParameters(ui).getFrameWidth();
        uiPrevHeight = getLayerParameters(ui).getFrameHeight();
        getLayerParameters(ui).setLayerCGSSNR(ui);
        getLayerParameters(ui).setQualityLevelCGSSNR(0);
        uiLastLayer = uiPrevLayer;
        getLayerParameters(ui).setBaseLayerCGSSNR( MSYS_UINT_MAX );
        getLayerParameters(ui).setBaseQualityLevelCGSSNR( 0 );
      }
      else
      {
        if( dPrevTemp == getLayerParameters(ui).getOutputFrameRate() &&
            uiPrevWidth == getLayerParameters(ui).getFrameWidth()    &&
            uiPrevHeight == getLayerParameters(ui).getFrameHeight() )
        {
          // layer can be considered as a CGS refinement
          UInt uiLayerTemp = getLayerParameters(ui-1).getLayerCGSSNR();
          getLayerParameters(ui).setLayerCGSSNR(uiLayerTemp);
          UInt uiQualityLevelTemp = getLayerParameters(ui-1).getQualityLevelCGSSNR();
          getLayerParameters(ui).setQualityLevelCGSSNR( uiQualityLevelTemp + getLayerParameters(ui-1).getNumberOfQualityLevelsCGSSNR() );
        }
        else
        {
          //layer is not a refinement from previous CGS layer
          uiLastLayer++;
          uiPrevLayer = uiLastLayer;
          dPrevTemp    = getLayerParameters(ui).getOutputFrameRate();
          uiPrevWidth = getLayerParameters(ui).getFrameWidth();
          uiPrevHeight = getLayerParameters(ui).getFrameHeight();
          getLayerParameters(ui).setLayerCGSSNR(uiLastLayer);
          getLayerParameters(ui).setQualityLevelCGSSNR(0);
        }
        getLayerParameters(ui).setBaseLayerCGSSNR( getLayerParameters(uiBaseLayerId).getLayerCGSSNR() );
        getLayerParameters(ui).setBaseQualityLevelCGSSNR( getLayerParameters(uiBaseLayerId).getQualityLevelCGSSNR() + getLayerParameters(uiBaseLayerId).getNumberOfQualityLevelsCGSSNR() - 1 );
      }
    }
    else
    {
      getLayerParameters(ui).setLayerCGSSNR(ui);
      getLayerParameters(ui).setQualityLevelCGSSNR(0);
      if( ui )
      {
        getLayerParameters(ui).setBaseLayerCGSSNR( getLayerParameters(uiBaseLayerId).getLayerCGSSNR() );
        getLayerParameters(ui).setBaseQualityLevelCGSSNR( getLayerParameters(uiBaseLayerId).getQualityLevelCGSSNR() + getLayerParameters(uiBaseLayerId).getNumberOfQualityLevelsCGSSNR() - 1 );
      }
    }

    if( uiBaseLayerId != MSYS_UINT_MAX && getLayerParameters(uiBaseLayerId).getIDRPeriod() == getLayerParameters(ui).getIDRPeriod() )
    {
	    getLayerParameters(ui).setBLSkipEnable( true );
    }

//DS_FIX_FT_09_2007
  //uiBaseLayerId is no more discardable
    if(uiBaseLayerId != MSYS_UINT_MAX)
    {
      getLayerParameters(uiBaseLayerId).setNonDiscardable();
      getLayerParameters(uiBaseLayerId).setQLDiscardable(getLayerParameters(ui).getBaseQualityLevel()+1);
    }
//~DS_FIX_FT_09_2007

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -