HEVC Test Model (HM)  HM-16.18
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
TComMv.h
Go to the documentation of this file.
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-2017, 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 
38 #ifndef __TCOMMV__
39 #define __TCOMMV__
40 
41 #include "CommonDef.h"
42 
45 
46 // ====================================================================================================================
47 // Class definition
48 // ====================================================================================================================
49 
51 class TComMv
52 {
53 private:
56 
57 public:
58 
59  // ------------------------------------------------------------------------------------------------------------------
60  // constructors
61  // ------------------------------------------------------------------------------------------------------------------
62 
63  TComMv() :
64  m_iHor(0),
65  m_iVer(0)
66  {
67  }
68 
69  TComMv( Short iHor, Short iVer ) :
70  m_iHor(iHor),
71  m_iVer(iVer)
72  {
73  }
74 
75  // ------------------------------------------------------------------------------------------------------------------
76  // set
77  // ------------------------------------------------------------------------------------------------------------------
78 
79  Void set ( Short iHor, Short iVer) { m_iHor = iHor; m_iVer = iVer; }
80  Void setHor ( Short i ) { m_iHor = i; }
81  Void setVer ( Short i ) { m_iVer = i; }
82  Void setZero () { m_iHor = m_iVer = 0; }
83 
84  // ------------------------------------------------------------------------------------------------------------------
85  // get
86  // ------------------------------------------------------------------------------------------------------------------
87 
88  Int getHor () const { return m_iHor; }
89  Int getVer () const { return m_iVer; }
90  Int getAbsHor () const { return abs( m_iHor ); }
91  Int getAbsVer () const { return abs( m_iVer ); }
92 
93  // ------------------------------------------------------------------------------------------------------------------
94  // operations
95  // ------------------------------------------------------------------------------------------------------------------
96 
97  const TComMv& operator += (const TComMv& rcMv)
98  {
99  m_iHor += rcMv.m_iHor;
100  m_iVer += rcMv.m_iVer;
101  return *this;
102  }
103 
104  const TComMv& operator-= (const TComMv& rcMv)
105  {
106  m_iHor -= rcMv.m_iHor;
107  m_iVer -= rcMv.m_iVer;
108  return *this;
109  }
110 
111 #if !ME_ENABLE_ROUNDING_OF_MVS
112  const TComMv& operator>>= (const Int i)
113  {
114  m_iHor >>= i;
115  m_iVer >>= i;
116  return *this;
117  }
118 #endif
119 
120 #if ME_ENABLE_ROUNDING_OF_MVS
121  Void divideByPowerOf2 (const Int i)
123  {
124  Int offset = (i == 0) ? 0 : 1 << (i - 1);
125  m_iHor += offset;
126  m_iVer += offset;
127 
128  m_iHor >>= i;
129  m_iVer >>= i;
130  }
131 #endif
132 
133  const TComMv& operator<<= (const Int i)
134  {
135  m_iHor <<= i;
136  m_iVer <<= i;
137  return *this;
138  }
139 
140  const TComMv operator - ( const TComMv& rcMv ) const
141  {
142  return TComMv( m_iHor - rcMv.m_iHor, m_iVer - rcMv.m_iVer );
143  }
144 
145  const TComMv operator + ( const TComMv& rcMv ) const
146  {
147  return TComMv( m_iHor + rcMv.m_iHor, m_iVer + rcMv.m_iVer );
148  }
149 
150  Bool operator== ( const TComMv& rcMv ) const
151  {
152  return (m_iHor==rcMv.m_iHor && m_iVer==rcMv.m_iVer);
153  }
154 
155  Bool operator!= ( const TComMv& rcMv ) const
156  {
157  return (m_iHor!=rcMv.m_iHor || m_iVer!=rcMv.m_iVer);
158  }
159 
160  const TComMv scaleMv( Int iScale ) const
161  {
162  Int mvx = Clip3( -32768, 32767, (iScale * getHor() + 127 + (iScale * getHor() < 0)) >> 8 );
163  Int mvy = Clip3( -32768, 32767, (iScale * getVer() + 127 + (iScale * getVer() < 0)) >> 8 );
164  return TComMv( mvx, mvy );
165  }
166 };// END CLASS DEFINITION TComMV
167 
169 
170 #endif // __TCOMMV__
Bool operator!=(const TComMv &rcMv) const
Definition: TComMv.h:155
Bool operator==(const TComMv &rcMv) const
Definition: TComMv.h:150
const TComMv & operator+=(const TComMv &rcMv)
Definition: TComMv.h:97
Int getHor() const
Definition: TComMv.h:88
Defines version information, constants and small in-line functions.
void Void
Definition: TypeDef.h:203
const TComMv operator-(const TComMv &rcMv) const
Definition: TComMv.h:140
Int getAbsHor() const
Definition: TComMv.h:90
const TComMv & operator<<=(const Int i)
Definition: TComMv.h:133
const TComMv operator+(const TComMv &rcMv) const
Definition: TComMv.h:145
short Short
Definition: TypeDef.h:209
Int getAbsVer() const
Definition: TComMv.h:91
Void setHor(Short i)
Definition: TComMv.h:80
Void setZero()
Definition: TComMv.h:82
bool Bool
Definition: TypeDef.h:204
Void setVer(Short i)
Definition: TComMv.h:81
TComMv(Short iHor, Short iVer)
Definition: TComMv.h:69
T Clip3(const T minVal, const T maxVal, const T a)
general min/max clip
Definition: CommonDef.h:252
TComMv()
Definition: TComMv.h:63
const TComMv & operator-=(const TComMv &rcMv)
Definition: TComMv.h:104
Int getVer() const
Definition: TComMv.h:89
Short m_iVer
vertical component of motion vector
Definition: TComMv.h:55
Short m_iHor
horizontal component of motion vector
Definition: TComMv.h:54
int Int
Definition: TypeDef.h:211
basic motion vector class
Definition: TComMv.h:51
Void divideByPowerOf2(const Int i)
shift right with rounding
Definition: TComMv.h:122
const TComMv scaleMv(Int iScale) const
Definition: TComMv.h:160
Void set(Short iHor, Short iVer)
Definition: TComMv.h:79