📄 controlmngh264avcencoder.cpp
字号:
MbCoder* pcMbCoder,
LoopFilter* pcLoopFilter,
MbEncoder* pcMbEncoder,
Transform* pcTransform,
IntraPredictionSearch* pcIntraPrediction,
YuvBufferCtrl* apcYuvFullPelBufferCtrl [MAX_LAYERS],
YuvBufferCtrl* apcYuvHalfPelBufferCtrl [MAX_LAYERS],
QuarterPelFilter* pcQuarterPelFilter,
CodingParameter* pcCodingParameter,
ParameterSetMng* pcParameterSetMng,
PocCalculator* apcPocCalculator [MAX_LAYERS],
SampleWeighting* pcSampleWeighting,
CabacWriter* pcCabacWriter,
XDistortion* pcXDistortion,
MotionEstimation* pcMotionEstimation,
RateDistortion* pcRateDistortion )
{
ROT( NULL == pcFrameMng);
ROT( NULL == pcSliceEncoder);
ROT( NULL == pcControlMng);
ROT( NULL == pcBitWriteBuffer);
ROT( NULL == pcBitCounter);
ROT( NULL == pcNalUnitEncoder);
ROT( NULL == pcUvlcWriter);
ROT( NULL == pcUvlcTester);
ROT( NULL == pcMbCoder);
ROT( NULL == pcLoopFilter);
ROT( NULL == pcMbEncoder);
ROT( NULL == pcTransform);
ROT( NULL == pcIntraPrediction);
ROT( NULL == pcQuarterPelFilter);
ROT( NULL == pcCodingParameter);
ROT( NULL == pcParameterSetMng);
ROT( NULL == pcSampleWeighting);
ROT( NULL == pcCabacWriter);
ROT( NULL == pcXDistortion);
ROT( NULL == pcMotionEstimation);
ROT( NULL == pcRateDistortion);
m_pcFrameMng = pcFrameMng;
m_pcSliceEncoder = pcSliceEncoder;
m_pcControlMng = pcControlMng;
m_pcBitWriteBuffer = pcBitWriteBuffer;
m_pcBitCounter = pcBitCounter;
m_pcNalUnitEncoder = pcNalUnitEncoder;
m_pcUvlcWriter = pcUvlcWriter;
m_pcUvlcTester = pcUvlcTester;
m_pcMbCoder = pcMbCoder;
m_pcLoopFilter = pcLoopFilter;
m_pcMbEncoder = pcMbEncoder;
m_pcTransform = pcTransform;
m_pcIntraPrediction = pcIntraPrediction;
m_pcQuarterPelFilter = pcQuarterPelFilter;
m_pcCodingParameter = pcCodingParameter;
m_pcParameterSetMng = pcParameterSetMng;
m_pcSampleWeighting = pcSampleWeighting;
m_pcCabacWriter = pcCabacWriter;
m_pcXDistortion = pcXDistortion;
m_pcMotionEstimation = pcMotionEstimation;
m_pcRateDistortion = pcRateDistortion;
ROT( NULL == apcMCTFEncoder );
ROT( NULL == apcPocCalculator );
ROT( NULL == apcYuvFullPelBufferCtrl );
ROT( NULL == apcYuvHalfPelBufferCtrl );
for( UInt uiLayer = 0; uiLayer < MAX_LAYERS; uiLayer++ )
{
ROT( NULL == apcMCTFEncoder [uiLayer] );
ROT( NULL == apcPocCalculator [uiLayer] );
ROT( NULL == apcYuvFullPelBufferCtrl[uiLayer] );
ROT( NULL == apcYuvHalfPelBufferCtrl[uiLayer] );
m_apcMCTFEncoder [uiLayer] = apcMCTFEncoder [uiLayer];
m_apcPocCalculator [uiLayer] = apcPocCalculator [uiLayer];
m_apcYuvFullPelBufferCtrl [uiLayer] = apcYuvFullPelBufferCtrl [uiLayer];
m_apcYuvHalfPelBufferCtrl [uiLayer] = apcYuvHalfPelBufferCtrl [uiLayer];
}
m_bMVCMode = ( pcCodingParameter->getMVCmode() != 0 );
return Err::m_nOK;
}
ErrVal ControlMngH264AVCEncoder::finishSlice( const SliceHeader& rcSH, Bool& rbPicDone, Bool& rbFrameDone )
{
ROT( NULL == m_pcMbSymbolWriteIf ) ;
RNOK( m_pcMbSymbolWriteIf->finishSlice() );
m_pcMbSymbolWriteIf = NULL;
rbPicDone = m_pcMbDataCtrl->isPicDone( rcSH );
rbFrameDone = m_pcMbDataCtrl->isFrameDone( rcSH );
return Err::m_nOK;
}
ErrVal ControlMngH264AVCEncoder::initSliceForCoding( const SliceHeader& rcSH )
{
m_uiCurrLayer = rcSH.getSPS().getLayerId();
Bool bCabac = rcSH.getPPS().getEntropyCodingModeFlag();
if( bCabac )
{
m_pcMbSymbolWriteIf = m_pcCabacWriter;
}
else
{
m_pcMbSymbolWriteIf = m_pcUvlcWriter;
}
RNOK( m_pcMbSymbolWriteIf ->startSlice( rcSH ) );
RNOK( m_pcMbEncoder ->initSlice ( rcSH ) )
RNOK( m_pcMbCoder ->initSlice ( rcSH, m_pcMbSymbolWriteIf, m_pcRateDistortion ) );
RNOK( m_pcMotionEstimation ->initSlice ( rcSH ) );
RNOK( m_pcSampleWeighting ->initSlice ( rcSH ) );
setFMO( rcSH.getFMO());
return Err::m_nOK;
}
ErrVal ControlMngH264AVCEncoder::initSliceForFiltering( const SliceHeader& rcSH )
{
m_uiCurrLayer = rcSH.getSPS().getLayerId();
return Err::m_nOK;
}
ErrVal ControlMngH264AVCEncoder::initSlice( SliceHeader& rcSH, ProcessingState eProcessingState )
{
m_uiCurrLayer = rcSH.getSPS().getLayerId();
m_pcMbDataCtrl = rcSH.getFrameUnit()->getMbDataCtrl();
RNOK( m_pcMbDataCtrl ->initSlice( rcSH, eProcessingState, false, NULL ) );
RNOK( m_pcMotionEstimation ->initSlice( rcSH ) );
RNOK( m_pcSampleWeighting ->initSlice( rcSH ) );
RNOK( m_pcMbEncoder ->initSlice( rcSH ) );
if( ENCODE_PROCESS == eProcessingState )
{
Bool bCabac = rcSH.getPPS().getEntropyCodingModeFlag();
if( bCabac )
{
m_pcMbSymbolWriteIf = m_pcCabacWriter;
}
else
{
m_pcMbSymbolWriteIf = m_pcUvlcWriter;
}
RNOK( m_pcMbSymbolWriteIf->startSlice( rcSH ) );
RNOK( m_pcMbCoder->initSlice( rcSH, m_pcMbSymbolWriteIf, m_pcRateDistortion ) );
}
return Err::m_nOK;
}
ErrVal ControlMngH264AVCEncoder::initMbForCoding( MbDataAccess& rcMbDataAccess, UInt uiMbIndex )
{
ROF( m_uiCurrLayer < MAX_LAYERS );
UInt uiMbY = uiMbIndex / m_auiMbXinFrame[ m_uiCurrLayer ];
UInt uiMbX = uiMbIndex - uiMbY * m_auiMbXinFrame[ m_uiCurrLayer ];
RNOK( m_apcYuvFullPelBufferCtrl[m_uiCurrLayer]->initMb( uiMbY, uiMbX ) );
RNOK( m_apcYuvHalfPelBufferCtrl[m_uiCurrLayer]->initMb( uiMbY, uiMbX ) );
RNOK( m_pcMotionEstimation->initMb( uiMbY, uiMbX, rcMbDataAccess ) );
return Err::m_nOK;
}
ErrVal ControlMngH264AVCEncoder::initMbForFiltering( MbDataAccess*& rpcMbDataAccess, UInt uiMbIndex )
{
ROF( m_uiCurrLayer < MAX_LAYERS );
UInt uiMbY, uiMbX;
uiMbY = uiMbIndex / m_auiMbXinFrame[ m_uiCurrLayer ];
uiMbX = uiMbIndex - uiMbY * m_auiMbXinFrame[ m_uiCurrLayer ];
m_pcMbDataCtrl->initMb( rpcMbDataAccess, uiMbY, uiMbX );
RNOK( m_apcYuvFullPelBufferCtrl[m_uiCurrLayer]->initMb( uiMbY, uiMbX ) );
return Err::m_nOK;
}
ErrVal ControlMngH264AVCEncoder::initMbForFiltering( UInt uiMbIndex )
{
ROF( m_uiCurrLayer < MAX_LAYERS );
UInt uiMbY, uiMbX;
uiMbY = uiMbIndex / m_auiMbXinFrame[ m_uiCurrLayer ];
uiMbX = uiMbIndex - uiMbY * m_auiMbXinFrame[ m_uiCurrLayer ];
RNOK( m_apcYuvFullPelBufferCtrl[m_uiCurrLayer]->initMb( uiMbY, uiMbX ) );
return Err::m_nOK;
}
//TMM_WP
ErrVal ControlMngH264AVCEncoder::initSliceForWeighting ( const SliceHeader& rcSH)
{
return m_pcSampleWeighting->initSlice( rcSH );
}
//TMM_WP
H264AVC_NAMESPACE_END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -