ErrVal MbCoder::xWriteTextureInfo( MbDataAccess& rcMbDataAccess, MbDataAccess* pcMbDataAccessBase, // JVT-R091 const MbTransformCoeffs& rcMbTCoeff, Bool bTrafo8x8Flag ) { Bool bWriteDQp = true; UInt uiCbp = rcMbDataAccess.getMbData().getMbCbp(); if( ! rcMbDataAccess.getMbData().isIntra16x16() ) { RNOK( m_pcMbSymbolWriteIf->cbp( rcMbDataAccess ) ); bWriteDQp = ( 0 != uiCbp ); } if( bTrafo8x8Flag && ( rcMbDataAccess.getMbData().getMbCbp() & 0x0F ) ) { ROT( rcMbDataAccess.getMbData().isIntra16x16() ); ROT( rcMbDataAccess.getMbData().isIntra4x4 () ); RNOK( m_pcMbSymbolWriteIf->transformSize8x8Flag( rcMbDataAccess ) ); } if( bWriteDQp ) { RNOK( m_pcMbSymbolWriteIf->deltaQp( rcMbDataAccess ) ); } if( rcMbDataAccess.getMbData().getBLSkipFlag() || !rcMbDataAccess.getMbData().isIntra() ) { if( rcMbDataAccess.getSH().getAdaptivePredictionFlag() ) { if( ! rcMbDataAccess.getSH().isIntra() ) { RNOK( m_pcMbSymbolWriteIf->resPredFlag( rcMbDataAccess ) ); if ( rcMbDataAccess.getMbData().getResidualPredFlag( PART_16x16 ) && rcMbDataAccess.getMbData().getBLSkipFlag() ) { RNOK( m_pcMbSymbolWriteIf->smoothedRefFlag( rcMbDataAccess ) ); } } } } if( rcMbDataAccess.getMbData().isIntra16x16() ) { RNOK( xScanLumaIntra16x16( rcMbDataAccess, rcMbTCoeff, rcMbDataAccess.getMbData().isAcCoded() ) ); RNOK( xScanChromaBlocks ( rcMbDataAccess, rcMbTCoeff, rcMbDataAccess.getMbData().getCbpChroma16x16() ) ); return Err::m_nOK; } if( rcMbDataAccess.getMbData().isTransformSize8x8() ) { for( B8x8Idx c8x8Idx; c8x8Idx.isLegal(); c8x8Idx++ ) { if( (uiCbp >> c8x8Idx.b8x8Index()) & 1 ) { RNOK( m_pcMbSymbolWriteIf->residualBlock8x8( rcMbDataAccess, c8x8Idx, LUMA_SCAN ) ); } } } else { for( B8x8Idx c8x8Idx; c8x8Idx.isLegal(); c8x8Idx++ )
ErrVal MbParser::xReadTextureInfo( MbDataAccess& rcMbDataAccess, Bool bTrafo8x8Flag, Bool bBaseLayerAvailable, UInt uiStart, UInt uiStop ) { Bool bReadDQp = ( uiStart < uiStop ); if( !rcMbDataAccess.getSH().isIntraSlice() && rcMbDataAccess.getMbData().getInCropWindowFlag() && ( rcMbDataAccess.getMbData().getBLSkipFlag() || !rcMbDataAccess.getMbData().isIntra() ) ) { if( rcMbDataAccess.getSH().getAdaptiveResidualPredictionFlag() ) { DECRNOK( m_pcMbSymbolReadIf->resPredFlag( rcMbDataAccess ) ); } else { rcMbDataAccess.getMbData().setResidualPredFlag( rcMbDataAccess.getSH().getDefaultResidualPredictionFlag() ); } } else { rcMbDataAccess.getMbData().setResidualPredFlag( false ); } if( rcMbDataAccess.getMbData().getBLSkipFlag() || !rcMbDataAccess.getMbData().isIntra16x16() ) { if( uiStart >= uiStop ) { rcMbDataAccess.getMbData().setMbCbp( 0 ); } else { DECRNOK( m_pcMbSymbolReadIf->cbp( rcMbDataAccess, uiStart, uiStop ) ); } bReadDQp = rcMbDataAccess.getMbData().getMbCbp() != 0; } if( bTrafo8x8Flag && ( rcMbDataAccess.getMbData().getMbCbp() & 0x0F ) ) { DECRNOK( m_pcMbSymbolReadIf->transformSize8x8Flag( rcMbDataAccess ) ); } if( bReadDQp ) { DECRNOK( m_pcMbSymbolReadIf->deltaQp( rcMbDataAccess ) ); } else { rcMbDataAccess.resetQp(); } Bool bIntra16x16 = ( !rcMbDataAccess.getMbData().getBLSkipFlag() && rcMbDataAccess.getMbData().isIntra16x16 () ); if( bIntra16x16 ) { UInt uiDummy = 0; if( uiStart == 0 && uiStop != 0 ) { DECRNOK( m_pcMbSymbolReadIf->residualBlock( rcMbDataAccess, B4x4Idx(0), LUMA_I16_DC, uiDummy, uiStart, uiStop ) ); } if( rcMbDataAccess.getMbData().isAcCoded() && uiStop > 1 ) { for( S4x4Idx cIdx; cIdx.isLegal(); cIdx++ ) { DECRNOK( m_pcMbSymbolReadIf->residualBlock( rcMbDataAccess, cIdx, LUMA_I16_AC, uiDummy, uiStart, uiStop ) ); } rcMbDataAccess.getMbData().setMbCbp( 0xf + ( rcMbDataAccess.getMbData().getCbpChroma16x16() << 4) ); } else { rcMbDataAccess.getMbData().setMbCbp( 0x0 + ( rcMbDataAccess.getMbData().getCbpChroma16x16() << 4) ); } DECRNOK( xScanChromaBlocks( rcMbDataAccess, rcMbDataAccess.getMbData().getCbpChroma16x16(), uiStart, uiStop ) ); return Err::m_nOK; } UInt uiMbExtCbp = rcMbDataAccess.getMbData().getMbExtCbp(); if( rcMbDataAccess.getMbData().isTransformSize8x8() ) { for( B8x8Idx c8x8Idx; c8x8Idx.isLegal(); c8x8Idx++ ) { if( uiMbExtCbp & ( 1 << c8x8Idx.b4x4() ) ) { DECRNOK( m_pcMbSymbolReadIf->residualBlock8x8( rcMbDataAccess, c8x8Idx, uiStart, uiStop ) ); } } } else { for( B8x8Idx c8x8Idx; c8x8Idx.isLegal(); c8x8Idx++ ) { if( uiMbExtCbp & ( 1 << c8x8Idx.b4x4() ) ) { for( S4x4Idx cIdx( c8x8Idx ); cIdx.isLegal( c8x8Idx ); cIdx++ ) { DECRNOK( m_pcMbSymbolReadIf->residualBlock( rcMbDataAccess, cIdx , LUMA_SCAN, uiMbExtCbp, uiStart, uiStop ) ); } } } } rcMbDataAccess.getMbData().setMbExtCbp( uiMbExtCbp ); DECRNOK( xScanChromaBlocks ( rcMbDataAccess, rcMbDataAccess.getMbData().getCbpChroma4x4(), uiStart, uiStop ) ); return Err::m_nOK; }