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

📄 encodercodingparameter.h

📁 JMVM MPEG MVC/3DAV 测试平台 国际通用标准
💻 H
📖 第 1 页 / 共 5 页
字号:
  printf("  -cabac  CABAC for all layers as entropy coding mode\n");
  printf("  -vlc    VLC for all layers as entropy coding mode\n");
  printf("  -org    (Layer) (original file)\n");
  printf("  -rec    (Layer) (reconstructed file)\n");
  printf("  -ec     (Layer) (entropy coding mode)\n");
  printf("  -rqp    (Layer) (ResidualQP)\n");
  printf("  -mqp    (Layer) (Stage) (MotionQP)\n");
  printf("  -lqp    (Layer) (ResidualAndMotionQP)\n");
  printf("  -ilpred (Layer) (InterLayerPredictionMode)\n");
  printf("  -mfile  (Layer) (Mode) (MotionInfoFile)\n");
  printf("  -anafgs (Layer) (NumFGSLayers) (File for storing FGS parameters)\n");
  printf("  -encfgs (Layer) (bit-rate in kbps) (File with stored FGS parameters)\n");
  printf("  -cl     (Layer) (ClosedLoopParameter)\n");
  printf("  -ds     (Layer) (Rate for inter-layer prediction)\n");
  printf("  -fgsmot (Layer) (FGSMotionRefinementMode) [0: no, 1: HP only, 2: all]\n");
  printf("  -lcupd  Update method [0 - original, 1 - low-complexity (default)]\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}
  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() )
			{
				ROTR( uiTagNum == 3, Err::m_nERR ); // SEI JVT-W060
				uiTagNum++;
				pcTag = &pacTag[uiTagNum]; 
			}
		}
      else
		{
        *pcTag += cChar;
		}
	}
  }

 }


//  
ErrVal  
EncoderCodingParameter::xReadFromFile  ( std::string&    rcFilename,
                                         UInt            uiViewId,
                                         std::string&    rcBitstreamFile)
{
  std::string acLayerConfigName[MAX_LAYERS];
  std::string acTags[4];
  UInt        uiLayerCnt   = 0;
  UInt        uiParLnCount = 0;
  std::string cFileNameStringTemp, cInputFilename,  cInputFile, cReconFile;
  std::string cAcquisitionFile; // SEI JVT-W060
#if JMVM_ONLY  // JVT-W081
  std::string cMotionFile;
#endif  // JVT-W081
  
  Int i, j;

  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("InterPredPicsFirst",      &m_uiInterPredPicsFirst ,                              1 ); // JVT-V043
  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", (Int*)&(m_cLoopFilterParams.m_iAlphaOffset),           0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineInt ("LoopFilterBetaOffset",    (Int*)&(m_cLoopFilterParams.m_iBetaOffset),            0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineInt ("SearchMode",              (Int*)&(m_cMotionVectorSearchParams.m_eSearchMode),    0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineInt ("SearchFuncFullPel",       (Int*)&(m_cMotionVectorSearchParams.m_eFullPelDFunc),  0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineInt ("SearchFuncSubPel",        (Int*)&(m_cMotionVectorSearchParams.m_eSubPelDFunc),   0 );
// not need to be inputed
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("Log2MaxFrameNum",         &m_uiLog2MaxFrameNum,                                  9 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("Log2MaxPocLsb",           &m_uiLog2MaxPocLsb,                                    9 );
//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 EncoderConfigLineUInt("MVCMode",                 &m_uiMVCmode,                                          1 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineDbl ("DeltaLayer0Quant",        &m_adDeltaQpLayer[0],                                  0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineDbl ("DeltaLayer1Quant",        &m_adDeltaQpLayer[1],                                  3 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineDbl ("DeltaLayer2Quant",        &m_adDeltaQpLayer[2],                                  4 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineDbl ("DeltaLayer3Quant",        &m_adDeltaQpLayer[3],                                  5 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineDbl ("DeltaLayer4Quant",        &m_adDeltaQpLayer[4],                                  6 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineDbl ("DeltaLayer5Quant",        &m_adDeltaQpLayer[5],                                  7 );
#if JMVM_ONLY  // JVT-U052
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("ICMode",                  &m_uiICmode,                                           0 );
#endif
#if JMVM_ONLY  // // JVT-W081 
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineStr ("MotionFile",              &cMotionFile,                                          "motion.dat"); 
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("MotionSkipMode",          &m_uiMotionSkipMode,                                   0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("SingleLoopDecoding",      &m_uiSLDMode,                                          0 ); // JVT-Y042
#endif  // JVT-W081

  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 );
  //SEI LSJ{
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("NestingSEI",              &m_uiNestingSEIEnable,                                 0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("SnapShot",                &m_uiSnapShotEnable,                                  0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("ActiveViewSEI",           &m_uiActiveViewSEIEnable,                             0 ); 
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("ViewScalInfoSEI",		 &m_uiViewScalInfoSEIEnable,						   0 ); 
  //SEI LSJ

  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("MultiviewSceneInfoSEI",           &m_uiMultiviewSceneInfoSEIEnable,                             0 );  // SEI JVT-W060
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("MaxDisparity",           &m_uiMaxDisparity,                             0 );  // SEI JVT-W060
 
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("MultiviewAcquisitionInfoSEI",           &m_uiMultiviewAcquisitionInfoSEIEnable,                             0 );  // SEI JVT-W060
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineStr("AcquisitionInfoFile",           &cAcquisitionFile,                             "cam.cfg" );  // SEI JVT-W060
 
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineStr ("ViewOrder",               &m_cViewOrder,                                      "");
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("AVCBaseView",             &m_uiBaseViewId,                                       0);
//JVT-W080
	m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("PDISEIMessage",           &m_uiPdsEnable,                                        0 );
	m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("PDIInitialDelayAnc",      &m_uiPdsInitialDelayAnc,                               0 );
	m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("PDIInitialDelayNonAnc",   &m_uiPdsInitialDelayNonAnc,                            0 );
//~JVT-W080
  m_CurrentViewId = uiViewId; 
  m_bAVCFlag      = false;
  if ( uiViewId == m_uiBaseViewId ) m_bAVCFlag = true;

  m_pEncoderLines[uiParLnCount] = NULL;


  int cur_view_id, view_id, view_cnt=-1;
  int ref_idx,num_of_refs,temp;
  int vcOrder;
  CodingParameter::SpsMVC.setNumViewsMinus1(0);

  //JVT-V054  
  CodingParameter::SpsMVC.setInitDone(false);

  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;
      }
    }
    // view prediciton informaiton

    if (acTags[0] == "NumViewsMinusOne") 
    {
      AOF(( temp=atoi(acTags[1].c_str()))>=0);
      AOF(temp<=MAX_NUM_VIEWS_MINUS_1);
      CodingParameter::SpsMVC.setNumViewsMinus1(temp);
      CodingParameter::SpsMVC.initViewSPSMemory_num_refs_for_lists(CodingParameter::SpsMVC.getNumViewMinus1());
    }

#if JMVM_ONLY
  if (acTags[0] == "SingleLoopDecoding") 
    {
      AOF(( temp=atoi(acTags[1].c_str()))>=0);
      //AOF(temp<=MAX_NUM_VIEWS_MINUS_1);
	  CodingParameter::SpsMVC.setSingleLoopDecoding(temp);
    }
#endif

    if (acTags[0] == "View_ID") 
    {
      AOF((cur_view_id=atoi(acTags[1].c_str()))>=0);      
      AOF(cur_view_id <= MAX_NUM_VIEWS_MINUS_1);
      AOF(++view_cnt<=CodingParameter::SpsMVC.getNumViewMinus1());		
    }

    // JVT-W035 
    if (acTags[0] == "Fwd_NumAnchorRefs")
    {
      AOF((num_of_refs=atoi(acTags[1].c_str()))>=0); // the number should be nonnegative
      AOF(num_of_refs<=CodingParameter::SpsMVC.getNumViewMinus1());
      CodingParameter::SpsMVC.setNumAnchorRefsForListX(cur_view_id,0,num_of_refs);  // list0
      CodingParameter::SpsMVC.initViewSPSMemory_ref_for_lists(CodingParameter::SpsMVC.getNumViewMinus1(),cur_view_id,0,0);// list0,anchor	
    }

    if (acTags[0] == "Bwd_NumAnchorRefs")
    {
      AOF((num_of_refs=atoi(acTags[1].c_str()))>=0); // the number should be nonnegative
      AOF(num_of_refs<=CodingParameter::SpsMVC.getNumViewMinus1()); 
      CodingParameter::SpsMVC.setNumAnchorRefsForListX(cur_view_id,1,num_of_refs);  //  list1
      CodingParameter::SpsMVC.initViewSPSMemory_ref_for_lists(CodingParameter::SpsMVC.getNumViewMinus1(),cur_view_id,1,0);// list1,anchor	
    }


    if (acTags[0] == "Fwd_NumNonAnchorRefs")
    {
		AOF((num_of_refs=atoi(acTags[1].c_str()))>=0); // the number should be nonnegative
		AOF(num_of_refs<=CodingParameter::SpsMVC.getNumViewMinus1()); 
#if JMVM_ONLY // JVT-Y042
		if (! CodingParameter::SpsMVC.getSingleLoopDecoding() )
		{
#endif
      CodingParameter::SpsMVC.setNumNonAnchorRefsForListX(cur_view_id,0,num_of_refs);  // list0
      CodingParameter::SpsMVC.initViewSPSMemory_ref_for_lists(CodingParameter::SpsMVC.getNumViewMinus1(),cur_view_id,0,1);// list0,non-anchor	
#if JMVM_ONLY // JVT-Y042
		}
		else
		{
			CodingParameter::SpsMVC.setNumNonAnchorRefsForListX(cur_view_id,0,0);  // list0
			CodingParameter::SpsMVC.setNumNonAnchorRefsSldForListX(cur_view_id,0,num_of_refs);  
			CodingParameter::SpsMVC.initViewSPSMemory_ref_for_lists(CodingParameter::SpsMVC.getNumViewMinus1(),cur_view_id,0,1);// list0,non-anchor	
		}
#endif
    }

    if (acTags[0] == "Bwd_NumNonAnchorRefs")
    {
		AOF((num_of_refs=atoi(acTags[1].c_str()))>=0); // the number should be nonnegative
		AOF(num_of_refs<=CodingParameter::SpsMVC.getNumViewMinus1()); 
#if JMVM_ONLY // JVT-Y042
		if (! CodingParameter::SpsMVC.getSingleLoopDecoding() )
		{
#endif
      CodingParameter::SpsMVC.setNumNonAnchorRefsForListX(cur_view_id,1,num_of_refs);  // list1
      CodingParameter::SpsMVC.initViewSPSMemory_ref_for_lists(CodingParameter::SpsMVC.getNumViewMinus1(),cur_view_id,1,1);// list1,non-anchor	
#if JMVM_ONLY // JVT-Y042
		}
		else
		{
			CodingParameter::SpsMVC.setNumNonAnchorRefsForListX(cur_view_id,1,0);  // list1
			CodingParameter::SpsMVC.setNumNonAnchorRefsSldForListX(cur_view_id,1,num_of_refs);  
			CodingParameter::SpsMVC.initViewSPSMemory_ref_for_lists(CodingParameter::SpsMVC.getNumViewMinus1(),cur_view_id,1,1);// list1,non-anchor	
		}
#endif   
	}
	   
    if (acTags[0] == "Fwd_AnchorRefs")
    {
      AOF((ref_idx=atoi(acTags[1].c_str()))< (int)CodingParameter::SpsMVC.getNumAnchorRefsForListX(cur_view_id,0));
      AOF((view_id=atoi(acTags[2].c_str())) <= MAX_NUM_VIEWS_MINUS_1);
      CodingParameter::SpsMVC.setAnchorRefForListX(cur_view_id,ref_idx,0,view_id);
     
      if(m_CurrentViewId==cur_view_id) 
      {
      
        xAppendStringWithNO ( cReconFile, cFileNameStringTemp, view_id, ".yuv");

		for (i=0; i<(int)m_MultiviewReferenceFileParams.size() ; i++) {
			if ( m_MultiviewReferenceFileParams[i]._view_id  == view_id) // file already present, so skip
				break;
		}
		if (i==	m_MultiviewReferenceFileParams.size())	
		m_MultiviewReferenceFileParams.push_back
				(YUVFileParams(cFileNameStringTemp,view_id,m_uiFrameHeight,m_uiFrameWidth));
       
      }
    }

    if (acTags[0] == "Bwd_AnchorRefs")
    {
      AOF((ref_idx=atoi(acTags[1].c_str()))< (int)CodingParameter::SpsMVC.getNumAnchorRefsForListX(cur_view_id,1));

⌨️ 快捷键说明

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