190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber/*
2f71323e297a928af368937089d3ed71239786f86Andreas Huber *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber *
4f71323e297a928af368937089d3ed71239786f86Andreas Huber *  Use of this source code is governed by a BSD-style license
5f71323e297a928af368937089d3ed71239786f86Andreas Huber *  that can be found in the LICENSE file in the root of the source
6f71323e297a928af368937089d3ed71239786f86Andreas Huber *  tree. An additional intellectual property rights grant can be found
7f71323e297a928af368937089d3ed71239786f86Andreas Huber *  in the file PATENTS.  All contributing project authors may
8f71323e297a928af368937089d3ed71239786f86Andreas Huber *  be found in the AUTHORS file in the root of the source tree.
990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber */
1090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#ifndef __VPX_MEM_INTRNL_H__
1390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define __VPX_MEM_INTRNL_H__
14ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#include "./vpx_config.h"
1590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#ifndef CONFIG_MEM_MANAGER
1790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# if defined(VXWORKS)
18538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#  define CONFIG_MEM_MANAGER  1 /*include heap manager functionality,*/
19538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/*default: enabled on vxworks*/
2090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# else
21538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#  define CONFIG_MEM_MANAGER  0 /*include heap manager functionality*/
2290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# endif
2390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif /*CONFIG_MEM_MANAGER*/
2490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
2590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#ifndef CONFIG_MEM_TRACKER
26538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber# define CONFIG_MEM_TRACKER     1 /*include xvpx_* calls in the lib*/
2790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif
2890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
2990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#ifndef CONFIG_MEM_CHECKS
30538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber# define CONFIG_MEM_CHECKS      0 /*include some basic safety checks in
31538f6170b788de7408b06efc6613dc98579aa6a6Andreas Hubervpx_memcpy, _memset, and _memmove*/
3290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif
3390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
3490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#ifndef USE_GLOBAL_FUNCTION_POINTERS
35538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber# define USE_GLOBAL_FUNCTION_POINTERS   0  /*use function pointers instead of compiled functions.*/
3690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif
3790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
3890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#if CONFIG_MEM_TRACKER
3990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# include "vpx_mem_tracker.h"
4090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# if VPX_MEM_TRACKER_VERSION_CHIEF != 2 || VPX_MEM_TRACKER_VERSION_MAJOR != 5
4190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#  error "vpx_mem requires memory tracker version 2.5 to track memory usage"
4290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# endif
4390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif
4490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
4590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define ADDRESS_STORAGE_SIZE      sizeof(size_t)
4690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
4790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#ifndef DEFAULT_ALIGNMENT
4890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# if defined(VXWORKS)
49538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#  define DEFAULT_ALIGNMENT        32        /*default addr alignment to use in
50ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangcalls to vpx_* functions other
51ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangthan vpx_memalign*/
5290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# else
531184aebb761cbeac9124c37189a80a1a58f04b6bhkuang#  define DEFAULT_ALIGNMENT        (2 * sizeof(void*))  /* NOLINT */
5490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# endif
5590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif
5690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
5790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#if CONFIG_MEM_TRACKER
58538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber# define TRY_BOUNDS_CHECK         1        /*when set to 1 pads each allocation,
59ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangintegrity can be checked using
60ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangvpx_memory_tracker_check_integrity
61ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangor on free by defining*/
62538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/*TRY_BOUNDS_CHECK_ON_FREE*/
6390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#else
6490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# define TRY_BOUNDS_CHECK         0
6590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif /*CONFIG_MEM_TRACKER*/
6690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
6790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#if TRY_BOUNDS_CHECK
68538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber# define TRY_BOUNDS_CHECK_ON_FREE 0          /*checks mem integrity on every
69ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangfree, very expensive*/
70538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber# define BOUNDS_CHECK_VALUE       0xdeadbeef /*value stored before/after ea.
71ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangmem addr for bounds checking*/
72538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber# define BOUNDS_CHECK_PAD_SIZE    32         /*size of the padding before and
73ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangafter ea allocation to be filled
74ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangwith BOUNDS_CHECK_VALUE.
75ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangthis should be a multiple of 4*/
7690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#else
7790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# define BOUNDS_CHECK_VALUE       0
7890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# define BOUNDS_CHECK_PAD_SIZE    0
7990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif /*TRY_BOUNDS_CHECK*/
8090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
8190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#ifndef REMOVE_PRINTFS
8290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# define REMOVE_PRINTFS 0
8390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif
8490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
8590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber/* Should probably use a vpx_mem logger function. */
8690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#if REMOVE_PRINTFS
8790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# define _P(x)
8890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#else
8990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# define _P(x) x
9090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif
9190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
9290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber/*returns an addr aligned to the byte boundary specified by align*/
9390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define align_addr(addr,align) (void*)(((size_t)(addr) + ((align) - 1)) & (size_t)-(align))
9490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
9590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif /*__VPX_MEM_INTRNL_H__*/
96