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 12 #ifndef __VPX_MEM_INTRNL_H__ 13 #define __VPX_MEM_INTRNL_H__ 14 #include "vpx_config.h" 15 16 #ifndef CONFIG_MEM_MANAGER 17 # if defined(VXWORKS) 18 # define CONFIG_MEM_MANAGER 1 /*include heap manager functionality,*/ 19 /*default: enabled on vxworks*/ 20 # else 21 # define CONFIG_MEM_MANAGER 0 /*include heap manager functionality*/ 22 # endif 23 #endif /*CONFIG_MEM_MANAGER*/ 24 25 #ifndef CONFIG_MEM_TRACKER 26 # define CONFIG_MEM_TRACKER 1 /*include xvpx_* calls in the lib*/ 27 #endif 28 29 #ifndef CONFIG_MEM_CHECKS 30 # define CONFIG_MEM_CHECKS 0 /*include some basic safety checks in 31 vpx_memcpy, _memset, and _memmove*/ 32 #endif 33 34 #ifndef USE_GLOBAL_FUNCTION_POINTERS 35 # define USE_GLOBAL_FUNCTION_POINTERS 0 /*use function pointers instead of compiled functions.*/ 36 #endif 37 38 #if CONFIG_MEM_TRACKER 39 # include "vpx_mem_tracker.h" 40 # if VPX_MEM_TRACKER_VERSION_CHIEF != 2 || VPX_MEM_TRACKER_VERSION_MAJOR != 5 41 # error "vpx_mem requires memory tracker version 2.5 to track memory usage" 42 # endif 43 #endif 44 45 #define ADDRESS_STORAGE_SIZE sizeof(size_t) 46 47 #ifndef DEFAULT_ALIGNMENT 48 # if defined(VXWORKS) 49 # define DEFAULT_ALIGNMENT 32 /*default addr alignment to use in 50 calls to vpx_* functions other 51 than vpx_memalign*/ 52 # else 53 # define DEFAULT_ALIGNMENT 1 54 # endif 55 #endif 56 57 #if DEFAULT_ALIGNMENT < 1 58 # error "DEFAULT_ALIGNMENT must be >= 1!" 59 #endif 60 61 #if CONFIG_MEM_TRACKER 62 # define TRY_BOUNDS_CHECK 1 /*when set to 1 pads each allocation, 63 integrity can be checked using 64 vpx_memory_tracker_check_integrity 65 or on free by defining*/ 66 /*TRY_BOUNDS_CHECK_ON_FREE*/ 67 #else 68 # define TRY_BOUNDS_CHECK 0 69 #endif /*CONFIG_MEM_TRACKER*/ 70 71 #if TRY_BOUNDS_CHECK 72 # define TRY_BOUNDS_CHECK_ON_FREE 0 /*checks mem integrity on every 73 free, very expensive*/ 74 # define BOUNDS_CHECK_VALUE 0xdeadbeef /*value stored before/after ea. 75 mem addr for bounds checking*/ 76 # define BOUNDS_CHECK_PAD_SIZE 32 /*size of the padding before and 77 after ea allocation to be filled 78 with BOUNDS_CHECK_VALUE. 79 this should be a multiple of 4*/ 80 #else 81 # define BOUNDS_CHECK_VALUE 0 82 # define BOUNDS_CHECK_PAD_SIZE 0 83 #endif /*TRY_BOUNDS_CHECK*/ 84 85 #ifndef REMOVE_PRINTFS 86 # define REMOVE_PRINTFS 0 87 #endif 88 89 /* Should probably use a vpx_mem logger function. */ 90 #if REMOVE_PRINTFS 91 # define _P(x) 92 #else 93 # define _P(x) x 94 #endif 95 96 /*returns an addr aligned to the byte boundary specified by align*/ 97 #define align_addr(addr,align) (void*)(((size_t)(addr) + ((align) - 1)) & (size_t)-(align)) 98 99 #endif /*__VPX_MEM_INTRNL_H__*/ 100