📄 motionvectorcalculation.cpp
字号:
}
case BLK_8x4:
{
for( uiBw = 0; uiBw < m_uiMaxBw; uiBw++ )
{
ListIdx eListIdx = ListIdx( uiBw );
MbMotionData& rcMbMotionData = rcMbDataAccess.getMbMotionData( eListIdx );
MbMvData& rcMbMvdData = rcMbDataAccess.getMbMvdData ( eListIdx );
if( 0 < (scRefPic = rcMbMotionData.getRefIdx( eParIdx ) ) )
{
if( rcMbMotionData.getMotPredFlag( eParIdx ) )
{
AOF( pcMbDataAccessBase );
cMv = pcMbDataAccessBase->getMbMotionData( eListIdx ).getMv( eParIdx, SPART_8x4_0 );
}
else
{
rcMbDataAccess.getMvPredictor( cMv, scRefPic, eListIdx, eParIdx, SPART_8x4_0 );
}
cMv += rcMbMvdData.getMv( eParIdx, SPART_8x4_0 );
rcMbMotionData.setAllMv( cMv, eParIdx, SPART_8x4_0 );
if( rcMbMotionData.getMotPredFlag( eParIdx ) )
{
AOF( pcMbDataAccessBase );
cMv = pcMbDataAccessBase->getMbMotionData( eListIdx ).getMv( eParIdx, SPART_8x4_1 );
}
else
{
rcMbDataAccess.getMvPredictor( cMv, scRefPic, eListIdx, eParIdx, SPART_8x4_1 );
}
cMv += rcMbMvdData.getMv( eParIdx, SPART_8x4_1 );
rcMbMotionData.setAllMv( cMv, eParIdx, SPART_8x4_1 );
}
}
break;
}
case BLK_4x8:
{
for( uiBw = 0; uiBw < m_uiMaxBw; uiBw++ )
{
ListIdx eListIdx = ListIdx( uiBw );
MbMotionData& rcMbMotionData = rcMbDataAccess.getMbMotionData( eListIdx );
MbMvData& rcMbMvdData = rcMbDataAccess.getMbMvdData ( eListIdx );
if( 0 < (scRefPic = rcMbMotionData.getRefIdx( eParIdx ) ) )
{
if( rcMbMotionData.getMotPredFlag( eParIdx ) )
{
AOF( pcMbDataAccessBase );
cMv = pcMbDataAccessBase->getMbMotionData( eListIdx ).getMv( eParIdx, SPART_4x8_0 );
}
else
{
rcMbDataAccess.getMvPredictor( cMv, scRefPic, eListIdx, eParIdx, SPART_4x8_0 );
}
cMv += rcMbMvdData.getMv( eParIdx, SPART_4x8_0 );
rcMbMotionData.setAllMv( cMv, eParIdx, SPART_4x8_0 );
if( rcMbMotionData.getMotPredFlag( eParIdx ) )
{
AOF( pcMbDataAccessBase );
cMv = pcMbDataAccessBase->getMbMotionData( eListIdx ).getMv( eParIdx, SPART_4x8_1 );
}
else
{
rcMbDataAccess.getMvPredictor( cMv, scRefPic, eListIdx, eParIdx, SPART_4x8_1 );
}
cMv += rcMbMvdData.getMv( eParIdx, SPART_4x8_1 );
rcMbMotionData.setAllMv( cMv, eParIdx, SPART_4x8_1 );
}
}
break;
}
case BLK_4x4:
{
for( uiBw = 0; uiBw < m_uiMaxBw; uiBw++ )
{
ListIdx eListIdx = ListIdx( uiBw );
MbMotionData& rcMbMotionData = rcMbDataAccess.getMbMotionData( eListIdx );
MbMvData& rcMbMvdData = rcMbDataAccess.getMbMvdData ( eListIdx );
if( 0 < (scRefPic = rcMbMotionData.getRefIdx( eParIdx ) ) )
{
if( rcMbMotionData.getMotPredFlag( eParIdx ) )
{
AOF( pcMbDataAccessBase );
cMv = pcMbDataAccessBase->getMbMotionData( eListIdx ).getMv( eParIdx, SPART_4x4_0 );
}
else
{
rcMbDataAccess.getMvPredictor( cMv, scRefPic, eListIdx, eParIdx, SPART_4x4_0 );
}
cMv += rcMbMvdData.getMv( eParIdx, SPART_4x4_0 );
rcMbMotionData.setAllMv( cMv, eParIdx, SPART_4x4_0 );
if( rcMbMotionData.getMotPredFlag( eParIdx ) )
{
AOF( pcMbDataAccessBase );
cMv = pcMbDataAccessBase->getMbMotionData( eListIdx ).getMv( eParIdx, SPART_4x4_1 );
}
else
{
rcMbDataAccess.getMvPredictor( cMv, scRefPic, eListIdx, eParIdx, SPART_4x4_1 );
}
cMv += rcMbMvdData.getMv( eParIdx, SPART_4x4_1 );
rcMbMotionData.setAllMv( cMv, eParIdx, SPART_4x4_1 );
if( rcMbMotionData.getMotPredFlag( eParIdx ) )
{
AOF( pcMbDataAccessBase );
cMv = pcMbDataAccessBase->getMbMotionData( eListIdx ).getMv( eParIdx, SPART_4x4_2 );
}
else
{
rcMbDataAccess.getMvPredictor( cMv, scRefPic, eListIdx, eParIdx, SPART_4x4_2 );
}
cMv += rcMbMvdData.getMv( eParIdx, SPART_4x4_2 );
rcMbMotionData.setAllMv( cMv, eParIdx, SPART_4x4_2 );
if( rcMbMotionData.getMotPredFlag( eParIdx ) )
{
AOF( pcMbDataAccessBase );
cMv = pcMbDataAccessBase->getMbMotionData( eListIdx ).getMv( eParIdx, SPART_4x4_3 );
}
else
{
rcMbDataAccess.getMvPredictor( cMv, scRefPic, eListIdx, eParIdx, SPART_4x4_3 );
}
cMv += rcMbMvdData.getMv( eParIdx, SPART_4x4_3 );
rcMbMotionData.setAllMv( cMv, eParIdx, SPART_4x4_3 );
}
}
break;
}
default:
{
AF();
break;
}
}
}
Void MotionVectorCalculation::xCalc8x8( MbDataAccess& rcMbDataAccess,
MbDataAccess* pcMbDataAccessBase,
Bool bFaultTolerant )
{
Mv cMv;
SChar scRefPic;
UInt uiBw;
for( B8x8Idx c8x8Idx; c8x8Idx.isLegal(); c8x8Idx++ )
{
ParIdx8x8 eParIdx = c8x8Idx.b8x8();
switch( rcMbDataAccess.getMbData().getBlkMode( c8x8Idx.b8x8Index() ) )
{
case BLK_SKIP:
{
Bool bOneMv;
AOF( rcMbDataAccess.getMvPredictorDirect( c8x8Idx.b8x8(), bOneMv, bFaultTolerant ) );
break;
}
case BLK_8x8:
{
for( uiBw = 0; uiBw < m_uiMaxBw; uiBw++ )
{
ListIdx eListIdx = ListIdx( uiBw );
MbMotionData& rcMbMotionData = rcMbDataAccess.getMbMotionData( eListIdx );
MbMvData& rcMbMvdData = rcMbDataAccess.getMbMvdData ( eListIdx );
if( 0 < (scRefPic = rcMbMotionData.getRefIdx( eParIdx ) ) )
{
if( rcMbMotionData.getMotPredFlag( eParIdx ) )
{
AOF( pcMbDataAccessBase );
cMv = pcMbDataAccessBase->getMbMotionData( eListIdx ).getMv( eParIdx );
}
else
{
rcMbDataAccess.getMvPredictor( cMv, scRefPic, eListIdx, eParIdx );
}
cMv += rcMbMvdData.getMv( eParIdx );
rcMbMotionData.setAllMv( cMv, eParIdx );
}
}
break;
}
case BLK_8x4:
{
for( uiBw = 0; uiBw < m_uiMaxBw; uiBw++ )
{
ListIdx eListIdx = ListIdx( uiBw );
MbMotionData& rcMbMotionData = rcMbDataAccess.getMbMotionData( eListIdx );
MbMvData& rcMbMvdData = rcMbDataAccess.getMbMvdData ( eListIdx );
if( 0 < (scRefPic = rcMbMotionData.getRefIdx( eParIdx ) ) )
{
if( rcMbMotionData.getMotPredFlag( eParIdx ) )
{
AOF( pcMbDataAccessBase );
cMv = pcMbDataAccessBase->getMbMotionData( eListIdx ).getMv( eParIdx, SPART_8x4_0 );
}
else
{
rcMbDataAccess.getMvPredictor( cMv, scRefPic, eListIdx, eParIdx, SPART_8x4_0 );
}
cMv += rcMbMvdData.getMv( eParIdx, SPART_8x4_0 );
rcMbMotionData.setAllMv( cMv, eParIdx, SPART_8x4_0 );
if( rcMbMotionData.getMotPredFlag( eParIdx ) )
{
AOF( pcMbDataAccessBase );
cMv = pcMbDataAccessBase->getMbMotionData( eListIdx ).getMv( eParIdx, SPART_8x4_1 );
}
else
{
rcMbDataAccess.getMvPredictor( cMv, scRefPic, eListIdx, eParIdx, SPART_8x4_1 );
}
cMv += rcMbMvdData.getMv( eParIdx, SPART_8x4_1 );
rcMbMotionData.setAllMv( cMv, eParIdx, SPART_8x4_1 );
}
}
break;
}
case BLK_4x8:
{
for( uiBw = 0; uiBw < m_uiMaxBw; uiBw++ )
{
ListIdx eListIdx = ListIdx( uiBw );
MbMotionData& rcMbMotionData = rcMbDataAccess.getMbMotionData( eListIdx );
MbMvData& rcMbMvdData = rcMbDataAccess.getMbMvdData ( eListIdx );
if( 0 < (scRefPic = rcMbMotionData.getRefIdx( eParIdx ) ) )
{
if( rcMbMotionData.getMotPredFlag( eParIdx ) )
{
AOF( pcMbDataAccessBase );
cMv = pcMbDataAccessBase->getMbMotionData( eListIdx ).getMv( eParIdx, SPART_4x8_0 );
}
else
{
rcMbDataAccess.getMvPredictor( cMv, scRefPic, eListIdx, eParIdx, SPART_4x8_0 );
}
cMv += rcMbMvdData.getMv( eParIdx, SPART_4x8_0 );
rcMbMotionData.setAllMv( cMv, eParIdx, SPART_4x8_0 );
if( rcMbMotionData.getMotPredFlag( eParIdx ) )
{
AOF( pcMbDataAccessBase );
cMv = pcMbDataAccessBase->getMbMotionData( eListIdx ).getMv( eParIdx, SPART_4x8_1 );
}
else
{
rcMbDataAccess.getMvPredictor( cMv, scRefPic, eListIdx, eParIdx, SPART_4x8_1 );
}
cMv += rcMbMvdData.getMv( eParIdx, SPART_4x8_1 );
rcMbMotionData.setAllMv( cMv, eParIdx, SPART_4x8_1 );
}
}
break;
}
case BLK_4x4:
{
for( uiBw = 0; uiBw < m_uiMaxBw; uiBw++ )
{
ListIdx eListIdx = ListIdx( uiBw );
MbMotionData& rcMbMotionData = rcMbDataAccess.getMbMotionData( eListIdx );
MbMvData& rcMbMvdData = rcMbDataAccess.getMbMvdData ( eListIdx );
if( 0 < (scRefPic = rcMbMotionData.getRefIdx( eParIdx ) ) )
{
if( rcMbMotionData.getMotPredFlag( eParIdx ) )
{
AOF( pcMbDataAccessBase );
cMv = pcMbDataAccessBase->getMbMotionData( eListIdx ).getMv( eParIdx, SPART_4x4_0 );
}
else
{
rcMbDataAccess.getMvPredictor( cMv, scRefPic, eListIdx, eParIdx, SPART_4x4_0 );
}
cMv += rcMbMvdData.getMv( eParIdx, SPART_4x4_0 );
rcMbMotionData.setAllMv( cMv, eParIdx, SPART_4x4_0 );
if( rcMbMotionData.getMotPredFlag( eParIdx ) )
{
AOF( pcMbDataAccessBase );
cMv = pcMbDataAccessBase->getMbMotionData( eListIdx ).getMv( eParIdx, SPART_4x4_1 );
}
else
{
rcMbDataAccess.getMvPredictor( cMv, scRefPic, eListIdx, eParIdx, SPART_4x4_1 );
}
cMv += rcMbMvdData.getMv( eParIdx, SPART_4x4_1 );
rcMbMotionData.setAllMv( cMv, eParIdx, SPART_4x4_1 );
if( rcMbMotionData.getMotPredFlag( eParIdx ) )
{
AOF( pcMbDataAccessBase );
cMv = pcMbDataAccessBase->getMbMotionData( eListIdx ).getMv( eParIdx, SPART_4x4_2 );
}
else
{
rcMbDataAccess.getMvPredictor( cMv, scRefPic, eListIdx, eParIdx, SPART_4x4_2 );
}
cMv += rcMbMvdData.getMv( eParIdx, SPART_4x4_2 );
rcMbMotionData.setAllMv( cMv, eParIdx, SPART_4x4_2 );
if( rcMbMotionData.getMotPredFlag( eParIdx ) )
{
AOF( pcMbDataAccessBase );
cMv = pcMbDataAccessBase->getMbMotionData( eListIdx ).getMv( eParIdx, SPART_4x4_3 );
}
else
{
rcMbDataAccess.getMvPredictor( cMv, scRefPic, eListIdx, eParIdx, SPART_4x4_3 );
}
cMv += rcMbMvdData.getMv( eParIdx, SPART_4x4_3 );
rcMbMotionData.setAllMv( cMv, eParIdx, SPART_4x4_3 );
}
}
break;
}
default:
{
AF();
break;
}
}
}
}
H264AVC_NAMESPACE_END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -