| /* |
| * Copyright (c) 2010 The WebM project authors. All Rights Reserved. |
| * |
| * Use of this source code is governed by a BSD-style license |
| * that can be found in the LICENSE file in the root of the source |
| * tree. An additional intellectual property rights grant can be found |
| * in the file PATENTS. All contributing project authors may |
| * be found in the AUTHORS file in the root of the source tree. |
| */ |
| |
| |
| #ifndef __VPX_MEM_INTRNL_H__ |
| #define __VPX_MEM_INTRNL_H__ |
| #include "vpx_ports/config.h" |
| |
| #ifndef CONFIG_MEM_MANAGER |
| # if defined(VXWORKS) |
| # define CONFIG_MEM_MANAGER 1 //include heap manager functionality, |
| //default: enabled on vxworks |
| # else |
| # define CONFIG_MEM_MANAGER 0 //include heap manager functionality |
| # endif |
| #endif /*CONFIG_MEM_MANAGER*/ |
| |
| #ifndef CONFIG_MEM_TRACKER |
| # define CONFIG_MEM_TRACKER 1 //include xvpx_* calls in the lib |
| #endif |
| |
| #ifndef CONFIG_MEM_CHECKS |
| # define CONFIG_MEM_CHECKS 0 //include some basic safety checks in |
| //vpx_memcpy, _memset, and _memmove |
| #endif |
| |
| #ifndef USE_GLOBAL_FUNCTION_POINTERS |
| # define USE_GLOBAL_FUNCTION_POINTERS 0 //use function pointers instead of compiled functions. |
| #endif |
| |
| #if CONFIG_MEM_TRACKER |
| # include "vpx_mem_tracker.h" |
| # if VPX_MEM_TRACKER_VERSION_CHIEF != 2 || VPX_MEM_TRACKER_VERSION_MAJOR != 5 |
| # error "vpx_mem requires memory tracker version 2.5 to track memory usage" |
| # endif |
| #endif |
| |
| #define ADDRESS_STORAGE_SIZE sizeof(size_t) |
| |
| #ifndef DEFAULT_ALIGNMENT |
| # if defined(VXWORKS) |
| # define DEFAULT_ALIGNMENT 32 //default addr alignment to use in |
| //calls to vpx_* functions other |
| //than vpx_memalign |
| # else |
| # define DEFAULT_ALIGNMENT 1 |
| # endif |
| #endif |
| |
| #if DEFAULT_ALIGNMENT < 1 |
| # error "DEFAULT_ALIGNMENT must be >= 1!" |
| #endif |
| |
| #if CONFIG_MEM_TRACKER |
| # define TRY_BOUNDS_CHECK 1 //when set to 1 pads each allocation, |
| //integrity can be checked using |
| //vpx_memory_tracker_check_integrity |
| //or on free by defining |
| //TRY_BOUNDS_CHECK_ON_FREE |
| #else |
| # define TRY_BOUNDS_CHECK 0 |
| #endif /*CONFIG_MEM_TRACKER*/ |
| |
| #if TRY_BOUNDS_CHECK |
| # define TRY_BOUNDS_CHECK_ON_FREE 0 //checks mem integrity on every |
| //free, very expensive |
| # define BOUNDS_CHECK_VALUE 0xdeadbeef //value stored before/after ea. |
| //mem addr for bounds checking |
| # define BOUNDS_CHECK_PAD_SIZE 32 //size of the padding before and |
| //after ea allocation to be filled |
| //with BOUNDS_CHECK_VALUE. |
| //this should be a multiple of 4 |
| #else |
| # define BOUNDS_CHECK_VALUE 0 |
| # define BOUNDS_CHECK_PAD_SIZE 0 |
| #endif /*TRY_BOUNDS_CHECK*/ |
| |
| #ifndef REMOVE_PRINTFS |
| # define REMOVE_PRINTFS 0 |
| #endif |
| |
| /* Should probably use a vpx_mem logger function. */ |
| #if REMOVE_PRINTFS |
| # define _P(x) |
| #else |
| # define _P(x) x |
| #endif |
| |
| /*returns an addr aligned to the byte boundary specified by align*/ |
| #define align_addr(addr,align) (void*)(((size_t)(addr) + ((align) - 1)) & (size_t)-(align)) |
| |
| #endif /*__VPX_MEM_INTRNL_H__*/ |