?? encodercodingparameter.h
字號:
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));
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -