今天学习MV的数据结构,进一步理解MV的存储、处理等各种操作。
TComMv
先来看基本的MV类TComMv。可以看到MV是以水平分量m_iHor和垂直分量m_iVer的形式存储的,类中包含了设置、获取、加减、比较等函数。
class TComMv
{
private:
//MV水平和垂直分量
Short m_iHor; ///< horizontal component of motion vector
Short m_iVer; ///< vertical component of motion vector
public:
// ------------------------------------------------------------------------------------------------------------------
// constructors
// ------------------------------------------------------------------------------------------------------------------
TComMv() :
m_iHor(0),
m_iVer(0)
{
}
TComMv( Short iHor, Short iVer ) :
m_iHor(iHor),
m_iVer(iVer)
{
}
// ------------------------------------------------------------------------------------------------------------------
// set
// ------------------------------------------------------------------------------------------------------------------
Void set ( Short iHor, Short iVer) { m_iHor = iHor; m_iVer = iVer; }
Void setHor ( Short i ) { m_iHor = i; }
Void setVer ( Short i ) { m_iVer = i; }
Void setZero () { m_iHor = m_iVer = 0; }
// ------------------------------------------------------------------------------------------------------------------
// get
// ------------------------------------------------------------------------------------------------------------------
Int getHor () const { return m_iHor; }
Int getVer () const { return m_iVer; }
Int getAbsHor () const { return abs( m_iHor ); }
Int getAbsVer () const { return abs( m_iVer ); }
// ------------------------------------------------------------------------------------------------------------------
// operations
// ------------------------------------------------------------------------------------------------------------------
const TComMv& operator += (const TComMv& rcMv)
{
m_iHor += rcMv.m_iHor;
m_iVer += rcMv.m_iVer;
return *this