encodercodingparameter.h
来自「SVC最新更新代码」· C头文件 代码 · 共 1,406 行 · 第 1/5 页
H
1,406 行
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 }
m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("ConstrainedIntraUps", &m_uiCIUFlag, 0 );
m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("BiPredLT8x8Disable", &m_uiBiPred8x8Disable, 0 );
m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("MCBlocksLT8x8Disable", &m_uiMCBlks8x8Disable, 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).setFrameWidthInSamples ( m_uiFrameWidth );
getLayerParameters(0).setFrameHeightInSamples ( 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).getFrameWidthInSamples ();
uiPrevHeight = getLayerParameters(ui).getFrameHeightInSamples();
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).getFrameWidthInSamples () &&
uiPrevHeight == getLayerParameters(ui).getFrameHeightInSamples() )
{
// 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).getFrameWidthInSamples ();
uiPrevHeight = getLayerParameters(ui).getFrameHeightInSamples();
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 );
}
else
{
getLayerParameters(ui).setBaseLayerCGSSNR( MSYS_UINT_MAX );
getLayerParameters(ui).setBaseQualityLevelCGSSNR( 0 );
}
}
//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
if( uiBaseLayerId != MSYS_UINT_MAX )
{
LayerParameters& rcCurrLayer = getLayerParameters( ui );
LayerParameters& rcBaseLayer = getLayerParameters( uiBaseLayerId );
ResizeParameters& rcCurrRP = rcCurrLayer.getResizeParameters();
ResizeParameters& rcBaseRP = rcBaseLayer.getResizeParameters();
rcCurrRP.m_iRefLayerFrmWidth = rcBaseRP.m_iFrameWidth;
rcCurrRP.m_iRefLayerFrmHeight = rcBaseRP.m_iFrameHeight;
rcCurrRP.m_iRefLayerWidthInSamples = rcBaseRP.m_iWidthInSamples;
rcCurrRP.m_iRefLayerHeightInSamples = rcBaseRP.m_iHeightInSamples;
if( rcCurrRP.m_iRefLayerFrmWidth != rcCurrRP.m_iRefLayerWidthInSamples )
{
Int iShift = 1;
Int iDiv = rcCurrRP.m_iRefLayerWidthInSamples << iShift;
Int iScalW = ( ( rcCurrRP.m_iScaledRefFrmWidth * rcCurrRP.m_iRefLayerFrmWidth + ( iDiv >> 1 ) ) / iDiv ) << iShift;
rcCurrRP.m_iScaledRefFrmWidth = iScalW;
}
if( rcCurrRP.m_iRefLayerFrmHeight != rcCurrRP.m_iRefLayerHeightInSamples )
{
Int iShift = ( rcCurrLayer.isInterlaced() ? 2 : 1 );
Int iDiv = rcCurrRP.m_iRefLayerHeightInSamples << iShift;
Int iScalH = ( ( rcCurrRP.m_iScaledRefFrmHeight * rcCurrRP.m_iRefLayerFrmHeight + ( iDiv >> 1 ) ) / iDiv ) << iShift;
rcCurrRP.m_iScaledRefFrmHeight = iScalH;
}
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;
rcCurrRP.m_iRefLayerWidthInSamples = rcCurrRP.m_iWidthInSamples;
rcCurrRP.m_iRefLayerHeightInSamples = rcCurrRP.m_iHeightInSamples;
}
}
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_uiFrameWidthInSamples), 352 );
m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("SourceHeight", &(rcLayer.m_uiFrameHeightInSamples), 288 );
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");
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?