1/* 2 * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at> 3 * 4 * This file is part of FFmpeg. 5 * 6 * FFmpeg 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 * FFmpeg 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 FFmpeg; 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 libavutil/mem.h 23 * memory handling functions 24 */ 25 26#ifndef AVUTIL_MEM_H 27#define AVUTIL_MEM_H 28 29#include "common.h" 30 31#if AV_GCC_VERSION_AT_LEAST(3,1) 32 #define av_malloc_attrib __attribute__((__malloc__)) 33#else 34 #define av_malloc_attrib 35#endif 36 37#if (!defined(__ICC) || __ICC > 1100) && AV_GCC_VERSION_AT_LEAST(4,3) 38 #define av_alloc_size(n) __attribute__((alloc_size(n))) 39#else 40 #define av_alloc_size(n) 41#endif 42 43/** 44 * Allocates a block of \p size bytes with alignment suitable for all 45 * memory accesses (including vectors if available on the CPU). 46 * @param size Size in bytes for the memory block to be allocated. 47 * @return Pointer to the allocated block, NULL if the block cannot 48 * be allocated. 49 * @see av_mallocz() 50 */ 51void *av_malloc(unsigned int size) av_malloc_attrib av_alloc_size(1); 52 53/** 54 * Allocates or reallocates a block of memory. 55 * If \p ptr is NULL and \p size > 0, allocates a new block. If \p 56 * size is zero, frees the memory block pointed to by \p ptr. 57 * @param size Size in bytes for the memory block to be allocated or 58 * reallocated. 59 * @param ptr Pointer to a memory block already allocated with 60 * av_malloc(z)() or av_realloc() or NULL. 61 * @return Pointer to a newly reallocated block or NULL if the block 62 * cannot be reallocated or the function is used to free the memory block. 63 * @see av_fast_realloc() 64 */ 65void *av_realloc(void *ptr, unsigned int size) av_alloc_size(2); 66 67/** 68 * Frees a memory block which has been allocated with av_malloc(z)() or 69 * av_realloc(). 70 * @param ptr Pointer to the memory block which should be freed. 71 * @note ptr = NULL is explicitly allowed. 72 * @note It is recommended that you use av_freep() instead. 73 * @see av_freep() 74 */ 75void av_free(void *ptr); 76 77/** 78 * Allocates a block of \p size bytes with alignment suitable for all 79 * memory accesses (including vectors if available on the CPU) and 80 * zeroes all the bytes of the block. 81 * @param size Size in bytes for the memory block to be allocated. 82 * @return Pointer to the allocated block, NULL if it cannot be allocated. 83 * @see av_malloc() 84 */ 85void *av_mallocz(unsigned int size) av_malloc_attrib av_alloc_size(1); 86 87/** 88 * Duplicates the string \p s. 89 * @param s string to be duplicated 90 * @return Pointer to a newly allocated string containing a 91 * copy of \p s or NULL if the string cannot be allocated. 92 */ 93char *av_strdup(const char *s) av_malloc_attrib; 94 95/** 96 * Frees a memory block which has been allocated with av_malloc(z)() or 97 * av_realloc() and set the pointer pointing to it to NULL. 98 * @param ptr Pointer to the pointer to the memory block which should 99 * be freed. 100 * @see av_free() 101 */ 102void av_freep(void *ptr); 103 104#endif /* AVUTIL_MEM_H */ 105