1/* 2 * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at> 3 * 4 * This file is part of Libav. 5 * 6 * Libav is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Lesser General Public 8 * License as published by the Free Software Foundation; either 9 * version 2.1 of the License, or (at your option) any later version. 10 * 11 * Libav is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with Libav; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 */ 20 21/** 22 * @file 23 * memory handling functions 24 */ 25 26#ifndef AVUTIL_MEM_H 27#define AVUTIL_MEM_H 28 29#include "attributes.h" 30#include "avutil.h" 31 32/** 33 * @addtogroup lavu_mem 34 * @{ 35 */ 36 37 38#if defined(__ICC) && _ICC < 1200 || defined(__SUNPRO_C) 39 #define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v 40 #define DECLARE_ASM_CONST(n,t,v) const t __attribute__ ((aligned (n))) v 41#elif defined(__TI_COMPILER_VERSION__) 42 #define DECLARE_ALIGNED(n,t,v) \ 43 AV_PRAGMA(DATA_ALIGN(v,n)) \ 44 t __attribute__((aligned(n))) v 45 #define DECLARE_ASM_CONST(n,t,v) \ 46 AV_PRAGMA(DATA_ALIGN(v,n)) \ 47 static const t __attribute__((aligned(n))) v 48#elif defined(__GNUC__) 49 #define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v 50 #define DECLARE_ASM_CONST(n,t,v) static const t av_used __attribute__ ((aligned (n))) v 51#elif defined(_MSC_VER) 52 #define DECLARE_ALIGNED(n,t,v) __declspec(align(n)) t v 53 #define DECLARE_ASM_CONST(n,t,v) __declspec(align(n)) static const t v 54#else 55 #define DECLARE_ALIGNED(n,t,v) t v 56 #define DECLARE_ASM_CONST(n,t,v) static const t v 57#endif 58 59#if AV_GCC_VERSION_AT_LEAST(3,1) 60 #define av_malloc_attrib __attribute__((__malloc__)) 61#else 62 #define av_malloc_attrib 63#endif 64 65#if AV_GCC_VERSION_AT_LEAST(4,3) 66 #define av_alloc_size(n) __attribute__((alloc_size(n))) 67#else 68 #define av_alloc_size(n) 69#endif 70 71/** 72 * Allocate a block of size bytes with alignment suitable for all 73 * memory accesses (including vectors if available on the CPU). 74 * @param size Size in bytes for the memory block to be allocated. 75 * @return Pointer to the allocated block, NULL if the block cannot 76 * be allocated. 77 * @see av_mallocz() 78 */ 79void *av_malloc(size_t size) av_malloc_attrib av_alloc_size(1); 80 81/** 82 * Allocate or reallocate a block of memory. 83 * If ptr is NULL and size > 0, allocate a new block. If 84 * size is zero, free the memory block pointed to by ptr. 85 * @param ptr Pointer to a memory block already allocated with 86 * av_malloc(z)() or av_realloc() or NULL. 87 * @param size Size in bytes for the memory block to be allocated or 88 * reallocated. 89 * @return Pointer to a newly reallocated block or NULL if the block 90 * cannot be reallocated or the function is used to free the memory block. 91 * @see av_fast_realloc() 92 */ 93void *av_realloc(void *ptr, size_t size) av_alloc_size(2); 94 95/** 96 * Free a memory block which has been allocated with av_malloc(z)() or 97 * av_realloc(). 98 * @param ptr Pointer to the memory block which should be freed. 99 * @note ptr = NULL is explicitly allowed. 100 * @note It is recommended that you use av_freep() instead. 101 * @see av_freep() 102 */ 103void av_free(void *ptr); 104 105/** 106 * Allocate a block of size bytes with alignment suitable for all 107 * memory accesses (including vectors if available on the CPU) and 108 * zero all the bytes of the block. 109 * @param size Size in bytes for the memory block to be allocated. 110 * @return Pointer to the allocated block, NULL if it cannot be allocated. 111 * @see av_malloc() 112 */ 113void *av_mallocz(size_t size) av_malloc_attrib av_alloc_size(1); 114 115/** 116 * Duplicate the string s. 117 * @param s string to be duplicated 118 * @return Pointer to a newly allocated string containing a 119 * copy of s or NULL if the string cannot be allocated. 120 */ 121char *av_strdup(const char *s) av_malloc_attrib; 122 123/** 124 * Free a memory block which has been allocated with av_malloc(z)() or 125 * av_realloc() and set the pointer pointing to it to NULL. 126 * @param ptr Pointer to the pointer to the memory block which should 127 * be freed. 128 * @see av_free() 129 */ 130void av_freep(void *ptr); 131 132/** 133 * @} 134 */ 135 136#endif /* AVUTIL_MEM_H */ 137