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