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