ErrVal SliceEncoder::updateBaseLayerResidual( ControlData& rcControlData, UInt uiMbInRow ) { ROF( m_bInitDone ); SliceHeader& rcSliceHeader = *rcControlData.getSliceHeader (); MbDataCtrl* pcMbDataCtrl = rcControlData.getMbDataCtrl (); MbDataCtrl* pcBaseLayerCtrl = rcControlData.getBaseLayerCtrl (); Frame* pcBaseLayerSbb = rcControlData.getBaseLayerSbb (); UInt uiMbAddress = 0; UInt uiLastMbAddress = rcSliceHeader.getMbInPic() - 1; //====== initialization ====== RNOK( pcMbDataCtrl->initSlice( rcSliceHeader, DECODE_PROCESS, false, NULL ) ); for( ; uiMbAddress <= uiLastMbAddress; ) { UInt uiMbY = uiMbAddress / uiMbInRow; UInt uiMbX = uiMbAddress % uiMbInRow; MbDataAccess* pcMbDataAccess = 0; MbDataAccess* pcMbDataAccessBase = 0; RNOK( pcMbDataCtrl ->initMb ( pcMbDataAccess, uiMbY, uiMbX ) ); if( pcBaseLayerCtrl ) { RNOK( pcBaseLayerCtrl ->initMb ( pcMbDataAccessBase, uiMbY, uiMbX ) ); //pcMbDataAccess->setMbDataAccessBase( pcMbDataAccessBase ); } // Update the state of the baselayer residual data -- it may be reused in subsequent layers - [email protected] if( !pcMbDataAccess->getMbData().getResidualPredFlag() ) { if( pcBaseLayerSbb && ( pcMbDataAccess->getMbData().isIntra() || ! pcMbDataAccess->getMbData().getResidualPredFlag() ) ) { YuvPicBuffer* pcBaseResidual = pcBaseLayerSbb->getFullPelYuvBuffer(); pcBaseResidual->getBufferCtrl().initMb( uiMbY, uiMbX, false); pcBaseResidual->clearCurrMb(); } } uiMbAddress++; } return Err::m_nOK; }