1 /*
2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11 #ifndef VPX_VP9_COMMON_VP9_MV_H_
12 #define VPX_VP9_COMMON_VP9_MV_H_
13
14 #include "vpx/vpx_integer.h"
15
16 #include "vp9/common/vp9_common.h"
17
18 #ifdef __cplusplus
19 extern "C" {
20 #endif
21
22 #define INVALID_MV 0x80008000
23
24 typedef struct mv {
25 int16_t row;
26 int16_t col;
27 } MV;
28
29 typedef union int_mv {
30 uint32_t as_int;
31 MV as_mv;
32 } int_mv; /* facilitates faster equality tests and copies */
33
34 typedef struct mv32 {
35 int32_t row;
36 int32_t col;
37 } MV32;
38
is_zero_mv(const MV * mv)39 static INLINE int is_zero_mv(const MV *mv) {
40 return *((const uint32_t *)mv) == 0;
41 }
42
is_equal_mv(const MV * a,const MV * b)43 static INLINE int is_equal_mv(const MV *a, const MV *b) {
44 return *((const uint32_t *)a) == *((const uint32_t *)b);
45 }
46
clamp_mv(MV * mv,int min_col,int max_col,int min_row,int max_row)47 static INLINE void clamp_mv(MV *mv, int min_col, int max_col, int min_row,
48 int max_row) {
49 mv->col = clamp(mv->col, min_col, max_col);
50 mv->row = clamp(mv->row, min_row, max_row);
51 }
52
53 #ifdef __cplusplus
54 } // extern "C"
55 #endif
56
57 #endif // VPX_VP9_COMMON_VP9_MV_H_
58