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_COMMON_H_
12 #define VPX_VP9_COMMON_VP9_COMMON_H_
13 
14 /* Interface header for common constant data structures and lookup tables */
15 
16 #define INLINE __inline
17 #include <assert.h>
18 #include <stdint.h>
19 #include "bitops.h"
20 
21 #ifdef __cplusplus
22 extern "C" {
23 #endif
24 
25 // Only need this for fixed-size arrays, for structs just assign.
26 #define vp9_copy(dest, src)              \
27   {                                      \
28     assert(sizeof(dest) == sizeof(src)); \
29     memcpy(dest, src, sizeof(src));      \
30   }
31 
32 // Use this for variably-sized arrays.
33 #define vp9_copy_array(dest, src, n)       \
34   {                                        \
35     assert(sizeof(*dest) == sizeof(*src)); \
36     memcpy(dest, src, n * sizeof(*src));   \
37   }
38 
39 #define vp9_zero(dest) memset(&(dest), 0, sizeof(dest))
40 #define vp9_zero_array(dest, n) memset(dest, 0, n * sizeof(*dest))
41 
get_unsigned_bits(unsigned int num_values)42 static INLINE int get_unsigned_bits(unsigned int num_values) {
43   return num_values > 0 ? get_msb(num_values) + 1 : 0;
44 }
45 
46 #if CONFIG_DEBUG
47 #define CHECK_MEM_ERROR(cm, lval, expr)                                     \
48   do {                                                                      \
49     lval = (expr);                                                          \
50     if (!lval)                                                              \
51       vpx_internal_error(&(cm)->error, VPX_CODEC_MEM_ERROR,                 \
52                          "Failed to allocate " #lval " at %s:%d", __FILE__, \
53                          __LINE__);                                         \
54   } while (0)
55 #else
56 #define CHECK_MEM_ERROR(cm, lval, expr)                     \
57   do {                                                      \
58     lval = (expr);                                          \
59     if (!lval)                                              \
60       vpx_internal_error(&(cm)->error, VPX_CODEC_MEM_ERROR, \
61                          "Failed to allocate " #lval);      \
62   } while (0)
63 #endif
64 
65 #define VP9_SYNC_CODE_0 0x49
66 #define VP9_SYNC_CODE_1 0x83
67 #define VP9_SYNC_CODE_2 0x42
68 
69 #define VP9_FRAME_MARKER 0x2
70 
71 #ifdef __cplusplus
72 }  // extern "C"
73 #endif
74 
75 #endif  // VPX_VP9_COMMON_VP9_COMMON_H_
76