📄 encodercodingparameter.h
字号:
if( uiBaseLayerId != MSYS_UINT_MAX )
{
ResizeParameters& rcCurrRP = getLayerParameters(ui).getResizeParameters();
ResizeParameters& rcPrevRP = getLayerParameters(uiBaseLayerId).getResizeParameters();
rcCurrRP.m_iRefLayerFrmWidth = rcPrevRP.m_iFrameWidth;
rcCurrRP.m_iRefLayerFrmHeight = rcPrevRP.m_iFrameHeight;
if( rcCurrRP.m_iExtendedSpatialScalability == ESS_NONE )
{
if( rcCurrRP.m_iLeftFrmOffset ||
rcCurrRP.m_iTopFrmOffset ||
rcCurrRP.m_iFrameWidth != rcCurrRP.m_iScaledRefFrmWidth ||
rcCurrRP.m_iFrameHeight != rcCurrRP.m_iScaledRefFrmHeight ||
rcCurrRP.m_iChromaPhaseX != rcCurrRP.m_iRefLayerChromaPhaseX ||
rcCurrRP.m_iChromaPhaseY != rcCurrRP.m_iRefLayerChromaPhaseY )
{
rcCurrRP.m_iExtendedSpatialScalability = ESS_SEQ;
}
}
}
else
{
ResizeParameters& rcCurrRP = getLayerParameters(ui).getResizeParameters();
rcCurrRP.m_iExtendedSpatialScalability = ESS_NONE;
rcCurrRP.m_iRefLayerFrmWidth = rcCurrRP.m_iFrameWidth;
rcCurrRP.m_iRefLayerFrmHeight = rcCurrRP.m_iFrameHeight;
}
}
//TMM_INTERLACE{
for( ui = 0; ui < m_uiNumberOfLayers; ui++ )
getLayerParameters(ui).setInterlaced( bInterlaced );
//TMM_INTERLACE}
return Err::m_nOK;
}
ErrVal EncoderCodingParameter::xReadLayerFromFile ( std::string& rcFilename,
h264::LayerParameters& rcLayer )
{
std::string acTags[4];
std::string cInputFilename, cOutputFilename, cMotionFilename;
//S051{
std::string cEncSIPFilename;
//S051}
UInt uiParLnCount = 0;
FILE *f = fopen( rcFilename.c_str(), "r");
if( NULL == f )
{
printf( "failed to open %s layer config file\n", rcFilename.c_str() );
return Err::m_nERR;
}
//--ICU/ETRI FMO Implementation
UInt bSliceGroupChangeDirection_flag=0;
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("SourceWidth", &(rcLayer.m_uiFrameWidth), 176 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("SourceHeight", &(rcLayer.m_uiFrameHeight), 352 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineDbl ("FrameRateIn", &(rcLayer.m_dInputFrameRate), 30 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineDbl ("FrameRateOut", &(rcLayer.m_dOutputFrameRate), 30 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineStr ("InputFile", &cInputFilename, "test.yuv");
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineStr ("ReconFile", &cOutputFilename, "rec.yuv" );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("MbAff", &(rcLayer.m_uiMbAff), 0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("PAff", &(rcLayer.m_uiPAff), 0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("SymbolMode", &(rcLayer.m_uiEntropyCodingModeFlag), 1 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("FRExt", &(rcLayer.m_uiAdaptiveTransform), 0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("MaxDeltaQP", &(rcLayer.m_uiMaxAbsDeltaQP), 1 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineDbl ("QP", &(rcLayer.m_dBaseQpResidual), 32.0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineDbl ("MeQPLP", &(rcLayer.m_dQpModeDecisionLP), -1.0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineDbl ("MeQP0", &(rcLayer.m_adQpModeDecision[0]), 32.0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineDbl ("MeQP1", &(rcLayer.m_adQpModeDecision[1]), 32.0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineDbl ("MeQP2", &(rcLayer.m_adQpModeDecision[2]), 32.0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineDbl ("MeQP3", &(rcLayer.m_adQpModeDecision[3]), 32.0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineDbl ("MeQP4", &(rcLayer.m_adQpModeDecision[4]), 32.0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineDbl ("MeQP5", &(rcLayer.m_adQpModeDecision[5]), 32.0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("InterLayerPred", &(rcLayer.m_uiInterLayerPredictionMode), 0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("BaseQuality", &(rcLayer.m_uiBaseQualityLevel), 15 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("MotionInfoMode", &(rcLayer.m_uiMotionInfoMode), 0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineStr ("MotionInfoFile", &cMotionFilename, "test.mot");
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineInt ("LowComplexityMbMode", &(rcLayer.m_uiLowComplexMbEnable), 0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineInt ("UseESS", &(rcLayer.m_cResizeParameters.m_iExtendedSpatialScalability), 0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineStr ("ESSPicParamFile", &(rcLayer.m_cESSFilename), "ess.dat" );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineInt ("ESSCropWidth", &(rcLayer.m_cResizeParameters.m_iScaledRefFrmWidth), 0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineInt ("ESSCropHeight", &(rcLayer.m_cResizeParameters.m_iScaledRefFrmHeight), 0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineInt ("ESSOriginX", &(rcLayer.m_cResizeParameters.m_iLeftFrmOffset), 0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineInt ("ESSOriginY", &(rcLayer.m_cResizeParameters.m_iTopFrmOffset), 0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineInt ("ESSChromaPhaseX", &(rcLayer.m_cResizeParameters.m_iChromaPhaseX), -1 ); // SSUN, Nov2005
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineInt ("ESSChromaPhaseY", &(rcLayer.m_cResizeParameters.m_iChromaPhaseY), 0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineInt ("ESSBaseChromaPhaseX", &(rcLayer.m_cResizeParameters.m_iRefLayerChromaPhaseX), -1 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineInt ("ESSBaseChromaPhaseY", &(rcLayer.m_cResizeParameters.m_iRefLayerChromaPhaseY), 0 ); // SSUN, Nov2005
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("ForceReOrdering", &(rcLayer.m_uiForceReorderingCommands), 0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("BaseLayerId", &(rcLayer.m_uiBaseLayerId), MSYS_UINT_MAX );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("SliceMode", &(rcLayer.m_uiSliceMode), 0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("SliceArgument", &(rcLayer.m_uiSliceArgument), 50 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("NumSlicGrpMns1", &(rcLayer.m_uiNumSliceGroupsMinus1), 0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("SlcGrpMapType", &(rcLayer.m_uiSliceGroupMapType), 2 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("SlcGrpChgDrFlag", &(bSliceGroupChangeDirection_flag), 0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("SlcGrpChgRtMus1", &(rcLayer.m_uiSliceGroupChangeRateMinus1), 85 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineStr ("SlcGrpCfgFileNm", &rcLayer.m_cSliceGroupConfigFileName, "sgcfg.cfg" );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("NumROI", &(rcLayer.m_uiNumROI), 0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineStr ("ROICfgFileNm", &rcLayer.m_cROIConfigFileName, "roicfg.cfg" );
// JVT-Q065 EIDR{
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineInt ("IDRPeriod", &(rcLayer.m_iIDRPeriod), 0 );
// JVT-Q065 EIDR}
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt ("PLR", &(rcLayer.m_uiPLR), 0 ); //JVT-R057 LA-RDO
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("UseRedundantSlc", &(rcLayer.m_uiUseRedundantSlice), 0 ); //JVT-Q054 Red. Picture
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("UseRedundantKeySlc", &(rcLayer.m_uiUseRedundantKeySlice), 0 ); //JVT-W049
//S051{
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineStr( "EncSIPFile", &cEncSIPFilename, "");
//S051}
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("MGSVectorMode", &(rcLayer.m_uiMGSVectorMode), 0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("MGSVector0", &(rcLayer.m_uiMGSVect[0]), 0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("MGSVector1", &(rcLayer.m_uiMGSVect[1]), 0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("MGSVector2", &(rcLayer.m_uiMGSVect[2]), 0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("MGSVector3", &(rcLayer.m_uiMGSVect[3]), 0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("MGSVector4", &(rcLayer.m_uiMGSVect[4]), 0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("MGSVector5", &(rcLayer.m_uiMGSVect[5]), 0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("MGSVector6", &(rcLayer.m_uiMGSVect[6]), 0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("MGSVector7", &(rcLayer.m_uiMGSVect[7]), 0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("MGSVector8", &(rcLayer.m_uiMGSVect[8]), 0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("MGSVector9", &(rcLayer.m_uiMGSVect[9]), 0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("MGSVector10", &(rcLayer.m_uiMGSVect[10]), 0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("MGSVector11", &(rcLayer.m_uiMGSVect[11]), 0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("MGSVector12", &(rcLayer.m_uiMGSVect[12]), 0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("MGSVector13", &(rcLayer.m_uiMGSVect[13]), 0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("MGSVector14", &(rcLayer.m_uiMGSVect[14]), 0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("MGSVector15", &(rcLayer.m_uiMGSVect[15]), 0 );
// JVT-V035
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt ("AvcRewriteFlag", &(rcLayer.m_bAVCRewriteFlag), 0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt ("AvcAdaptiveRewriteFlag", &(rcLayer.m_bAVCAdaptiveRewriteFlag), 0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt ("SliceSkip", &(rcLayer.m_uiSliceSkip), 0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt ("SliceSkipTIdStart", &(rcLayer.m_uiSliceSkipTLevelStart), 0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("ExplicitQPCascading", &(rcLayer.m_uiExplicitQPCascading), 0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineDbl ("DQP4TLevel0", &(rcLayer.m_adDeltaQPTLevel[0]), 0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineDbl ("DQP4TLevel1", &(rcLayer.m_adDeltaQPTLevel[1]), 0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineDbl ("DQP4TLevel2", &(rcLayer.m_adDeltaQPTLevel[2]), 0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineDbl ("DQP4TLevel3", &(rcLayer.m_adDeltaQPTLevel[3]), 0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineDbl ("DQP4TLevel4", &(rcLayer.m_adDeltaQPTLevel[4]), 0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineDbl ("DQP4TLevel5", &(rcLayer.m_adDeltaQPTLevel[5]), 0 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineDbl ("DQP4TLevel6", &(rcLayer.m_adDeltaQPTLevel[6]), 0 );
m_pLayerLines[uiParLnCount] = NULL;
while (!feof(f))
{
RNOK( xReadLine( f, acTags ) );
if ( acTags[0].empty() )
{
continue;
}
for (UInt ui=0; m_pLayerLines[ui] != NULL; ui++)
{
if( acTags[0] == m_pLayerLines[ui]->getTag() )
{
m_pLayerLines[ui]->setVar( acTags[1] );
break;
}
}
}
//S051{
if(cEncSIPFilename.length())
{
rcLayer.setEncSIP(true);
rcLayer.setInSIPFileName( (char*) cEncSIPFilename.c_str());
}
//S051}
rcLayer.setInputFilename ( (Char*)cInputFilename.c_str() );
rcLayer.setOutputFilename ( (Char*)cOutputFilename.c_str() );
rcLayer.setMotionInfoFilename( (Char*)cMotionFilename.c_str() );
uiParLnCount = 0;
while (m_pLayerLines[uiParLnCount] != NULL)
{
delete m_pLayerLines[uiParLnCount];
m_pLayerLines[uiParLnCount] = NULL;
uiParLnCount++;
}
rcLayer.m_cResizeParameters.m_iFrameWidth = (Int)( ( rcLayer.m_uiFrameWidth + 15 ) >> 4 ) << 4;
rcLayer.m_cResizeParameters.m_iFrameHeight = (Int)( ( rcLayer.m_uiFrameHeight + 15 ) >> 4 ) << 4;
rcLayer.m_cResizeParameters.m_iRefLayerFrmWidth = rcLayer.m_cResizeParameters.m_iFrameWidth;
rcLayer.m_cResizeParameters.m_iRefLayerFrmHeight = rcLayer.m_cResizeParameters.m_iFrameHeight;
if( ! rcLayer.m_cResizeParameters.m_iExtendedSpatialScalability )
{
rcLayer.m_cResizeParameters.m_iScaledRefFrmWidth = rcLayer.m_cResizeParameters.m_iFrameWidth;
rcLayer.m_cResizeParameters.m_iScaledRefFrmHeight = rcLayer.m_cResizeParameters.m_iFrameHeight;
rcLayer.m_cResizeParameters.m_iLeftFrmOffset = 0;
rcLayer.m_cResizeParameters.m_iTopFrmOffset = 0;
rcLayer.m_cResizeParameters.m_iRefLayerChromaPhaseX = rcLayer.m_cResizeParameters.m_iChromaPhaseX;
rcLayer.m_cResizeParameters.m_iRefLayerChromaPhaseY = rcLayer.m_cResizeParameters.m_iChromaPhaseY;
}
//--ICU/ETRI FMO Implementation : FMO stuff start
rcLayer.m_bSliceGroupChangeDirection_flag = ( bSliceGroupChangeDirection_flag != 0 );
RNOK( xReadSliceGroupCfg( rcLayer)); //Slice group configuration file
//--ICU/ETRI FMO Implementation : FMO stuff end
// ROI Config ICU/ETRI
RNOK( xReadROICfg( rcLayer));
::fclose(f);
return Err::m_nOK;
}
ErrVal EncoderCodingParameter::xReadSliceGroupCfg( h264::LayerParameters& rcLayer )
{
UInt mapunit_height;
UInt mb_height;
UInt i;
UInt mb_width;
FILE* sgfile=NULL;
if( (rcLayer.getNumSliceGroupsMinus1()!=0)&&
((rcLayer.getSliceGroupMapType() == 0) || (rcLayer.getSliceGroupMapType() == 2) || (rcLayer.getSliceGroupMapType() == 6)) )
{
if ( ! rcLayer.getSliceGroupConfigFileName().empty() &&
( sgfile = fopen( rcLayer.getSliceGroupConfigFileName().c_str(), "r" ) ) == NULL )
{
printf("Error open file %s", rcLayer.getSliceGroupConfigFileName().c_str() );
}
else
{
if (rcLayer.getSliceGroupMapType() == 0)
{
for(i=0;i<=rcLayer.getNumSliceGroupsMinus1();i++)
{
fscanf(sgfile,"%d",(rcLayer.getArrayRunLengthMinus1()+i));
fscanf(sgfile,"%*[^\n]");
}
}
else if (rcLayer.getSliceGroupMapType() == 2)
{
// every two lines contain 'top_left' and 'bottom_right' value
for(i=0;i<rcLayer.getNumSliceGroupsMinus1();i++)
{
fscanf(sgfile,"%d",(rcLayer.getArrayTopLeft()+i));
fscanf(sgfile,"%*[^\n]");
fscanf(sgfile,"%d",(rcLayer.getArrayBottomRight()+i));
fscanf(sgfile,"%*[^\n]");
}
}
else if (rcLayer.getSliceGroupMapType()== 6)
{
//--ICU/ETRI
//TODO : currently map type 6 is partially supported
// Assume that only frame mode(no interlaced mode) is available
// Assume that Frame cropping is not avaliable
Int tmp;
/*
frame_mb_only = !(input->getPicInterlace() || input->getMbInterlace());
mb_width= (input->get_img_width()+img->get_auto_crop_right())/16;
mb_height= (input->get_img_height()+img->get_auto_crop_bottom())/16;
mapunit_height=mb_height/(2-frame_mb_only);
*/
mb_width= (rcLayer.getFrameWidth())/16;
mb_height= (rcLayer.getFrameHeight())/16;
mapunit_height=mb_height;
// each line contains slice_group_id for one Macroblock
for (i=0;i<mapunit_height*mb_width;i++)
{
fscanf(sgfile,"%d", &tmp);
//input->set_slice_group_id_ith( i, (unsigned) tmp);
rcLayer.setSliceGroupId(i,(UInt)tmp);
assert(*(rcLayer.getArraySliceGroupId()+i) <= rcLayer.getNumSliceGroupsMinus1() );
fscanf(sgfile,"%*[^\n]");
}
}
fclose(sgfile);
}
}
return Err::m_nOK;
}
// ROI Config Read ICU/ETRI
ErrVal EncoderCodingParameter::xReadROICfg( h264::LayerParameters& rcLayer )
{
UInt i;
FILE* roifile=NULL;
if ( (0 < rcLayer.getNumROI()) )
{
if ( ! rcLayer.getROIConfigFileName().empty() &&
( roifile = fopen( rcLayer.getROIConfigFileName().c_str(), "r" ) ) == NULL )
{
printf("Error open file %s", rcLayer.getROIConfigFileName().c_str() );
}
else
{
// every two lines contain 'top_left' and 'bottom_right' value
for(i=0;i<rcLayer.getNumROI(); i++)
{
fscanf(roifile, "%d",(rcLayer.getROIID()+i));
fscanf(roifile, "%*[^\n]");
fscanf(roifile, "%d",(rcLayer.getSGID()+i));
fscanf(roifile, "%*[^\n]");
fscanf(roifile, "%d",(rcLayer.getSLID()+i));
fscanf(roifile, "%*[^\n]");
}
fclose(roifile);
}
}
return Err::m_nOK;
}
#endif // !defined(AFX_ENCODERCODINGPARAMETER_H__145580A5_E0D6_4E9C_820F_EA4EF1E1B793__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -