ErrVal MbParser::xGet8x8BlockMv( MbDataAccess& rcMbDataAccess, B8x8Idx c8x8Idx, ListIdx eLstIdx ) { ParIdx8x8 eParIdx = c8x8Idx.b8x8(); switch( rcMbDataAccess.getMbData().getBlkMode( c8x8Idx.b8x8Index() ) ) { case BLK_8x8: { DECRNOK( m_pcMbSymbolReadIf->mvd( rcMbDataAccess, eLstIdx, eParIdx ) ); break; } case BLK_8x4: { DECRNOK( m_pcMbSymbolReadIf->mvd( rcMbDataAccess, eLstIdx, eParIdx, SPART_8x4_0 ) ); DECRNOK( m_pcMbSymbolReadIf->mvd( rcMbDataAccess, eLstIdx, eParIdx, SPART_8x4_1 ) ); break; } case BLK_4x8: { DECRNOK( m_pcMbSymbolReadIf->mvd( rcMbDataAccess, eLstIdx, eParIdx, SPART_4x8_0 ) ); DECRNOK( m_pcMbSymbolReadIf->mvd( rcMbDataAccess, eLstIdx, eParIdx, SPART_4x8_1 ) ); break; } case BLK_4x4: { DECRNOK( m_pcMbSymbolReadIf->mvd( rcMbDataAccess, eLstIdx, eParIdx, SPART_4x4_0 ) ); DECRNOK( m_pcMbSymbolReadIf->mvd( rcMbDataAccess, eLstIdx, eParIdx, SPART_4x4_1 ) ); DECRNOK( m_pcMbSymbolReadIf->mvd( rcMbDataAccess, eLstIdx, eParIdx, SPART_4x4_2 ) ); DECRNOK( m_pcMbSymbolReadIf->mvd( rcMbDataAccess, eLstIdx, eParIdx, SPART_4x4_3 ) ); break; } case BLK_SKIP: { break; } default: { return Err::m_nERR; } } return Err::m_nOK; }
ErrVal MbCoder::xWriteBlockMv( MbDataAccess& rcMbDataAccess, B8x8Idx c8x8Idx, ListIdx eLstIdx ) { BlkMode eBlkMode = rcMbDataAccess.getMbData().getBlkMode( c8x8Idx.b8x8Index() ); ParIdx8x8 eParIdx = c8x8Idx.b8x8(); switch( eBlkMode ) { case BLK_8x8: { RNOK( m_pcMbSymbolWriteIf->mvd( rcMbDataAccess, eLstIdx, eParIdx ) ); break; } case BLK_8x4: { RNOK( m_pcMbSymbolWriteIf->mvd( rcMbDataAccess, eLstIdx, eParIdx, SPART_8x4_0 ) ); RNOK( m_pcMbSymbolWriteIf->mvd( rcMbDataAccess, eLstIdx, eParIdx, SPART_8x4_1 ) ); break; } case BLK_4x8: { RNOK( m_pcMbSymbolWriteIf->mvd( rcMbDataAccess, eLstIdx, eParIdx, SPART_4x8_0 ) ); RNOK( m_pcMbSymbolWriteIf->mvd( rcMbDataAccess, eLstIdx, eParIdx, SPART_4x8_1 ) ); break; } case BLK_4x4: { RNOK( m_pcMbSymbolWriteIf->mvd( rcMbDataAccess, eLstIdx, eParIdx, SPART_4x4_0 ) ); RNOK( m_pcMbSymbolWriteIf->mvd( rcMbDataAccess, eLstIdx, eParIdx, SPART_4x4_1 ) ); RNOK( m_pcMbSymbolWriteIf->mvd( rcMbDataAccess, eLstIdx, eParIdx, SPART_4x4_2 ) ); RNOK( m_pcMbSymbolWriteIf->mvd( rcMbDataAccess, eLstIdx, eParIdx, SPART_4x4_3 ) ); break; } case BLK_SKIP: { break; } default: { AF(); return Err::m_nERR; } } return Err::m_nOK; }
ErrVal ReconstructionBypass::xPadRecMb( YuvMbBufferExtension* pcBuffer, UInt uiMask ) { Bool bAboveIntra = 0 != (uiMask & 0x01); Bool bBelowIntra = 0 != (uiMask & 0x10); Bool bLeftIntra = 0 != (uiMask & 0x40); Bool bRightIntra = 0 != (uiMask & 0x04); Bool bLeftAboveIntra = 0 != (uiMask & 0x80); Bool bRightAboveIntra = 0 != (uiMask & 0x02); Bool bLeftBelowIntra = 0 != (uiMask & 0x20); Bool bRightBelowIntra = 0 != (uiMask & 0x08); for( B8x8Idx cIdx; cIdx.isLegal(); cIdx++ ) { switch( cIdx.b8x8Index() ) { case 0: { if( bAboveIntra ) { if( bLeftIntra ) { pcBuffer->mergeFromLeftAbove( cIdx, bLeftAboveIntra ); } else { pcBuffer->copyFromAbove( cIdx ); } } else { if( bLeftIntra ) { pcBuffer->copyFromLeft( cIdx ); } else if( bLeftAboveIntra ) { pcBuffer->copyFromLeftAbove( cIdx ); } } } break; case 1: { if( bAboveIntra ) { if( bRightIntra ) { pcBuffer->mergeFromRightAbove( cIdx, bRightAboveIntra ); } else { pcBuffer->copyFromAbove( cIdx ); } } else { if( bRightIntra ) { pcBuffer->copyFromRight( cIdx ); } else if( bRightAboveIntra ) { pcBuffer->copyFromRightAbove( cIdx ); } } } break; case 2: { if( bBelowIntra ) { if( bLeftIntra ) { pcBuffer->mergeFromLeftBelow( cIdx, bLeftBelowIntra ); } else { pcBuffer->copyFromBelow( cIdx ); } } else { if( bLeftIntra ) { pcBuffer->copyFromLeft( cIdx ); } else if( bLeftBelowIntra ) { pcBuffer->copyFromLeftBelow( cIdx ); } } } break; case 3: { if( bBelowIntra ) { if( bRightIntra ) { pcBuffer->mergeFromRightBelow( cIdx, bRightBelowIntra ); } else { pcBuffer->copyFromBelow( cIdx ); } } else { if( bRightIntra ) { pcBuffer->copyFromRight( cIdx ); } else if( bRightBelowIntra ) { pcBuffer->copyFromRightBelow( cIdx ); } } } break; default: break; } } return Err::m_nOK; }