⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mbmvdata.h

📁 JVT-S203 contains the JSVM 6 reference software. It corresponds to CVS tag “JSVM_5_12_1”. For obt
💻 H
📖 第 1 页 / 共 2 页
字号:
    m_acRefPic[ m_auiBlk2Part[ eParIdx ] ].setFrame( pcRefFrame );
  }

  const RefPic& getRefPic( ParIdx8x8 eParIdx )        const { return m_acRefPic[ m_auiBlk2Part[ eParIdx ] ];  }
  const RefPic& getRefPic( LumaIdx cIdx )             const { return m_acRefPic[ m_auiBlk2Part[ cIdx.b4x4() ] ];  }

  Void  getMvRef         ( Mv& rcMv, SChar& rscRef, LumaIdx cIdx )                            const;
  Void  getMv3D          ( Mv3D& rcMv3D,            LumaIdx cIdx )                            const;
  Void  getMvRefNeighbour( Mv& rcMv, SChar& rscRef, LumaIdx cIdx )    const;
  Void  getMv3DNeighbour ( Mv3D& rcMv3D,            LumaIdx cIdx )    const;

  ErrVal  save( FILE* pFile );
  ErrVal  load( FILE* pFile );

  
  ErrVal  upsampleMotion( const MbMotionData& rcMbMvData, Par8x8 ePar8x8 );

// TMM_ESS {
  ErrVal upsampleMotionNonDyad( SChar* pscBl4x4RefIdx  , Mv* acBl4x4Mv , ResizeParameters* pcParameters );
  ErrVal upsampleMotionNonDyad( SChar* scBl8x8RefIdx , Mv* acBl4x4Mv , ResizeParameters* pcParameters , Mv deltaMv[4] ); 
// TMM_ESS }
private:
  Bool  xGetMotPredFlag ( UInt  uiPos )  const
  {
    return ( ( m_usMotPredFlags & (1 << uiPos) ) >> uiPos ? true : false );
  }
  Void  xSetMotPredFlag ( Bool  bFlag, UInt  uiPos )
  {
    AOF(uiPos<16);
    m_usMotPredFlags &= ~(UShort)(1<<uiPos);
    ROFVS( bFlag );
    m_usMotPredFlags += (1<<uiPos);
  }

private:
  MbMotionData( const MbMotionData& )  {}

private:
  static const UInt   m_auiBlk2Part[16];

public:
  SChar   m_ascRefIdx[4];
  RefPic  m_acRefPic [4];
  UShort  m_usMotPredFlags;
};





#if defined( WIN32 )
# pragma warning( default: 4251 )
#endif



__inline 
Void MbMotionData::setRefIdx( SChar scRefIdx )
{
  m_ascRefIdx[ 0 ] = m_ascRefIdx[ 1 ] = m_ascRefIdx[ 2 ] = m_ascRefIdx[ 3 ] = scRefIdx;
}

__inline 
Void MbMotionData::setRefIdx( SChar scRefIdx, ParIdx16x8 eParIdx )
{
  m_ascRefIdx[ m_auiBlk2Part[eParIdx]   ] = scRefIdx;
  m_ascRefIdx[ m_auiBlk2Part[eParIdx]+1 ] = scRefIdx;
}

__inline 
Void MbMotionData::setRefIdx( SChar scRefIdx, ParIdx8x16 eParIdx )
{
  m_ascRefIdx[ m_auiBlk2Part[eParIdx]   ] = scRefIdx;
  m_ascRefIdx[ m_auiBlk2Part[eParIdx]+2 ] = scRefIdx;
}

__inline Void MbMotionData::setRefIdx( SChar scRefIdx, ParIdx8x8 eParIdx )
{
  m_ascRefIdx[ m_auiBlk2Part[eParIdx]   ] = scRefIdx;
}


__inline Void MbMvData::setAllMv( const Mv& rcMv )
{
  const register Mv cMv = rcMv;
  m_acMv[ 0 ] = cMv;
  m_acMv[ 1 ] = cMv;
  m_acMv[ 2 ] = cMv;
  m_acMv[ 3 ] = cMv;
  m_acMv[ 4 ] = cMv;
  m_acMv[ 5 ] = cMv;
  m_acMv[ 6 ] = cMv;
  m_acMv[ 7 ] = cMv;
  m_acMv[ 8 ] = cMv;
  m_acMv[ 9 ] = cMv;
  m_acMv[ 10 ] = cMv;
  m_acMv[ 11 ] = cMv;
  m_acMv[ 12 ] = cMv;
  m_acMv[ 13 ] = cMv;
  m_acMv[ 14 ] = cMv;
  m_acMv[ 15 ] = cMv;
}

__inline Void MbMvData::setAllMv( const Mv& rcMv, ParIdx16x8 eParIdx  )
{
  Mv* pcMv = m_acMv + eParIdx;
  const register Mv cMv = rcMv;
  pcMv[ 0 ] = cMv;
  pcMv[ 1 ] = cMv;
  pcMv[ 2 ] = cMv;
  pcMv[ 3 ] = cMv;
  pcMv[ 4 ] = cMv;
  pcMv[ 5 ] = cMv;
  pcMv[ 6 ] = cMv;
  pcMv[ 7 ] = cMv;
}


__inline Void MbMvData::setAllMv( const Mv& rcMv, ParIdx8x16 eParIdx  )
{
  Mv* pcMv = m_acMv + eParIdx;
  const register Mv cMv = rcMv;
  pcMv[ 0 ] = cMv;
  pcMv[ 1 ] = cMv;
  pcMv[ 4 ] = cMv;
  pcMv[ 5 ] = cMv;
  pcMv[ 8 ] = cMv;
  pcMv[ 9 ] = cMv;
  pcMv[ 12 ] = cMv;
  pcMv[ 13 ] = cMv;
}

__inline Void MbMvData::setAllMv( const Mv& rcMv, ParIdx8x8 eParIdx  )
{
  Mv* pcMv = m_acMv + eParIdx;
  const register Mv cMv = rcMv;
  pcMv[ 0 ] = cMv;
  pcMv[ 1 ] = cMv;
  pcMv[ 4 ] = cMv;
  pcMv[ 5 ] = cMv;
}

__inline Void MbMvData::setAllMv( const Mv& rcMv, ParIdx8x8 eParIdx, SParIdx8x4 eSParIdx )
{
  Mv* pcMv = m_acMv + eParIdx + eSParIdx;
  const register Mv cMv = rcMv;
  pcMv[ 0 ] = cMv;
  pcMv[ 1 ] = cMv;
}

__inline Void MbMvData::setAllMv( const Mv& rcMv, ParIdx8x8 eParIdx, SParIdx4x8 eSParIdx )
{
  Mv* pcMv = m_acMv + eParIdx + eSParIdx;
  const register Mv cMv = rcMv;
  pcMv[ 0 ] = cMv;
  pcMv[ 4 ] = cMv;
}

__inline Void MbMvData::setAllMv( const Mv& rcMv, ParIdx8x8 eParIdx, SParIdx4x4 eSParIdx )
{
  Mv* pcMv = m_acMv + eParIdx + eSParIdx;
  pcMv[ 0 ] = rcMv;
}




__inline  Void  MbMotionData::setMotPredFlag( Bool bFlag )
{
  xSetMotPredFlag( bFlag,  0 );
  xSetMotPredFlag( bFlag,  1 );
  xSetMotPredFlag( bFlag,  2 );
  xSetMotPredFlag( bFlag,  3 );
  xSetMotPredFlag( bFlag,  4 );
  xSetMotPredFlag( bFlag,  5 );
  xSetMotPredFlag( bFlag,  6 );
  xSetMotPredFlag( bFlag,  7 );
  xSetMotPredFlag( bFlag,  8 );
  xSetMotPredFlag( bFlag,  9 );
  xSetMotPredFlag( bFlag, 10 );
  xSetMotPredFlag( bFlag, 11 );
  xSetMotPredFlag( bFlag, 12 );
  xSetMotPredFlag( bFlag, 13 );
  xSetMotPredFlag( bFlag, 14 );
  xSetMotPredFlag( bFlag, 15 );
}

__inline  Void  MbMotionData::setMotPredFlag( Bool bFlag, ParIdx16x8 eParIdx )
{
  UInt ui = eParIdx;

  xSetMotPredFlag( bFlag, ui+ 0 );
  xSetMotPredFlag( bFlag, ui+ 1 );
  xSetMotPredFlag( bFlag, ui+ 2 );
  xSetMotPredFlag( bFlag, ui+ 3 );
  xSetMotPredFlag( bFlag, ui+ 4 );
  xSetMotPredFlag( bFlag, ui+ 5 );
  xSetMotPredFlag( bFlag, ui+ 6 );
  xSetMotPredFlag( bFlag, ui+ 7 );
}

__inline  Void  MbMotionData::setMotPredFlag( Bool bFlag, ParIdx8x16 eParIdx )
{
  UInt ui = eParIdx;

  xSetMotPredFlag( bFlag, ui+ 0 );
  xSetMotPredFlag( bFlag, ui+ 1 );
  xSetMotPredFlag( bFlag, ui+ 4 );
  xSetMotPredFlag( bFlag, ui+ 5 );
  xSetMotPredFlag( bFlag, ui+ 8 );
  xSetMotPredFlag( bFlag, ui+ 9 );
  xSetMotPredFlag( bFlag, ui+12 );
  xSetMotPredFlag( bFlag, ui+13 );
}

__inline  Void  MbMotionData::setMotPredFlag( Bool bFlag, ParIdx8x8  eParIdx )
{
  UInt ui = eParIdx;

  xSetMotPredFlag( bFlag, ui+ 0 );
  xSetMotPredFlag( bFlag, ui+ 1 );
  xSetMotPredFlag( bFlag, ui+ 4 );
  xSetMotPredFlag( bFlag, ui+ 5 );
}

__inline  Void  MbMotionData::setMotPredFlag( Bool bFlag, LumaIdx    cIdx    )
{
  xSetMotPredFlag( bFlag, cIdx.b4x4() );
}





__inline Void MbMvData::setMv( const Mv& rcMv, LumaIdx cIdx )
{
  m_acMv[ cIdx.b4x4() ] = rcMv;
}

__inline Void MbMotionData::getMvRef( Mv& rcMv, SChar& rscRef, LumaIdx cIdx ) const
{
  rcMv   = m_acMv[ cIdx.b4x4() ];
  rscRef = m_ascRefIdx[ m_auiBlk2Part[ cIdx.b4x4() ] ];
}

__inline Void MbMotionData::getMv3D( Mv3D& rcMv3D, LumaIdx cIdx ) const
{
  rcMv3D.set( m_acMv[ cIdx.b4x4() ], m_ascRefIdx[ m_auiBlk2Part[ cIdx.b4x4()] ] );
}

__inline Void MbMotionData::getMvRefNeighbour( Mv& rcMv, SChar& rscRef, LumaIdx cIdx ) const
{
  rcMv   = m_acMv[ cIdx.b4x4() ];
  rscRef = m_ascRefIdx[ m_auiBlk2Part[ cIdx.b4x4()] ];
}

__inline Void MbMotionData::getMv3DNeighbour( Mv3D& rcMv3D, LumaIdx cIdx ) const
{
  rcMv3D.set( m_acMv[ cIdx.b4x4() ], m_ascRefIdx[ m_auiBlk2Part[ cIdx.b4x4()] ] );
}

H264AVC_NAMESPACE_END


#endif // !defined(AFX_MBMVDATA_H__06960F25_0FB8_4A65_935D_B06282FFDF6E__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -