1 /* The copyright in this software is being made available under the BSD 2 * License, included below. This software may be subject to other third party 3 * and contributor rights, including patent rights, and no such rights are 4 * granted under this license. 5 * 6 * Copyright (c) 2010-2014, ITU/ISO/IEC 7 * All rights reserved. 8 * 9 * Redistribution and use in source and binary forms, with or without 10 * modification, are permitted provided that the following conditions are met: 11 * 12 * * Redistributions of source code must retain the above copyright notice, 13 * this list of conditions and the following disclaimer. 14 * * Redistributions in binary form must reproduce the above copyright notice, 15 * this list of conditions and the following disclaimer in the documentation 16 * and/or other materials provided with the distribution. 17 * * Neither the name of the ITU/ISO/IEC nor the names of its contributors may 18 * be used to endorse or promote products derived from this software without 19 * specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 22 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 24 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 25 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 26 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 28 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 29 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 30 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 31 * THE POSSIBILITY OF SUCH DAMAGE. 32 */ 33 34 /** \file TComMv.h 35 \brief motion vector class (header) 36 */ 37 38 #ifndef __TCOMMV__ 39 #define __TCOMMV__ 40 41 #include "CommonDef.h" 42 #include <cstdlib> 43 44 //! \ingroup TLibCommon 45 //! \{ 46 47 // ==================================================================================================================== 48 // Class definition 49 // ==================================================================================================================== 50 51 /// basic motion vector class 52 class TComMv 53 { 54 private: 55 Short m_iHor; ///< horizontal component of motion vector 56 Short m_iVer; ///< vertical component of motion vector 57 58 public: 59 60 // ------------------------------------------------------------------------------------------------------------------ 61 // constructors 62 // ------------------------------------------------------------------------------------------------------------------ 63 TComMv()64 TComMv() : 65 m_iHor(0), 66 m_iVer(0) 67 { 68 } 69 TComMv(Short iHor,Short iVer)70 TComMv( Short iHor, Short iVer ) : 71 m_iHor(iHor), 72 m_iVer(iVer) 73 { 74 } 75 76 // ------------------------------------------------------------------------------------------------------------------ 77 // set 78 // ------------------------------------------------------------------------------------------------------------------ 79 set(Short iHor,Short iVer)80 Void set ( Short iHor, Short iVer) { m_iHor = iHor; m_iVer = iVer; } setHor(Short i)81 Void setHor ( Short i ) { m_iHor = i; } setVer(Short i)82 Void setVer ( Short i ) { m_iVer = i; } setZero()83 Void setZero () { m_iHor = m_iVer = 0; } 84 85 // ------------------------------------------------------------------------------------------------------------------ 86 // get 87 // ------------------------------------------------------------------------------------------------------------------ 88 getHor()89 Int getHor () const { return m_iHor; } getVer()90 Int getVer () const { return m_iVer; } getAbsHor()91 Int getAbsHor () const { return abs( m_iHor ); } getAbsVer()92 Int getAbsVer () const { return abs( m_iVer ); } 93 94 // ------------------------------------------------------------------------------------------------------------------ 95 // operations 96 // ------------------------------------------------------------------------------------------------------------------ 97 98 const TComMv& operator += (const TComMv& rcMv) 99 { 100 m_iHor += rcMv.m_iHor; 101 m_iVer += rcMv.m_iVer; 102 return *this; 103 } 104 105 const TComMv& operator-= (const TComMv& rcMv) 106 { 107 m_iHor -= rcMv.m_iHor; 108 m_iVer -= rcMv.m_iVer; 109 return *this; 110 } 111 112 const TComMv& operator>>= (const Int i) 113 { 114 m_iHor >>= i; 115 m_iVer >>= i; 116 return *this; 117 } 118 119 const TComMv& operator<<= (const Int i) 120 { 121 m_iHor <<= i; 122 m_iVer <<= i; 123 return *this; 124 } 125 126 const TComMv operator - ( const TComMv& rcMv ) const 127 { 128 return TComMv( m_iHor - rcMv.m_iHor, m_iVer - rcMv.m_iVer ); 129 } 130 131 const TComMv operator + ( const TComMv& rcMv ) const 132 { 133 return TComMv( m_iHor + rcMv.m_iHor, m_iVer + rcMv.m_iVer ); 134 } 135 136 Bool operator== ( const TComMv& rcMv ) const 137 { 138 return (m_iHor==rcMv.m_iHor && m_iVer==rcMv.m_iVer); 139 } 140 141 Bool operator!= ( const TComMv& rcMv ) const 142 { 143 return (m_iHor!=rcMv.m_iHor || m_iVer!=rcMv.m_iVer); 144 } 145 scaleMv(Int iScale)146 const TComMv scaleMv( Int iScale ) const 147 { 148 Int mvx = Clip3( -32768, 32767, (iScale * getHor() + 127 + (iScale * getHor() < 0)) >> 8 ); 149 Int mvy = Clip3( -32768, 32767, (iScale * getVer() + 127 + (iScale * getVer() < 0)) >> 8 ); 150 return TComMv( mvx, mvy ); 151 } 152 };// END CLASS DEFINITION TComMV 153 154 //! \} 155 156 #endif // __TCOMMV__ 157