Commit | Line | Data |
---|---|---|
792098c2 PI |
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 mem.h | |
23 | * Memory handling functions. | |
24 | */ | |
25 | ||
5b21bdab DB |
26 | #ifndef FFMPEG_MEM_H |
27 | #define FFMPEG_MEM_H | |
792098c2 | 28 | |
7ce3e4a8 | 29 | #ifdef __ICC |
4bfc91a0 DB |
30 | #define DECLARE_ALIGNED(n,t,v) t v __attribute__ ((aligned (n))) |
31 | #define DECLARE_ASM_CONST(n,t,v) const t __attribute__ ((aligned (n))) v | |
5cbd67ea | 32 | #elif defined(__GNUC__) |
4bfc91a0 DB |
33 | #define DECLARE_ALIGNED(n,t,v) t v __attribute__ ((aligned (n))) |
34 | #define DECLARE_ASM_CONST(n,t,v) static const t v attribute_used __attribute__ ((aligned (n))) | |
a02dd7eb | 35 | #elif defined(_MSC_VER) |
4bfc91a0 DB |
36 | #define DECLARE_ALIGNED(n,t,v) __declspec(align(n)) t v |
37 | #define DECLARE_ASM_CONST(n,t,v) __declspec(align(n)) static const t v | |
c123486e DB |
38 | #elif defined(HAVE_INLINE_ASM) |
39 | #error The asm code needs alignment, but we do not know how to do it for this compiler. | |
7cb1fc76 | 40 | #else |
4bfc91a0 DB |
41 | #define DECLARE_ALIGNED(n,t,v) t v |
42 | #define DECLARE_ASM_CONST(n,t,v) static const t v | |
792098c2 PI |
43 | #endif |
44 | ||
d326dd97 | 45 | #if defined(__GNUC__) && (__GNUC__ > 3 || __GNUC__ == 3 && __GNUC_MINOR__ > 0) |
85074d3c ZM |
46 | #define av_malloc_attrib __attribute__((__malloc__)) |
47 | #else | |
48 | #define av_malloc_attrib | |
49 | #endif | |
50 | ||
d326dd97 | 51 | #if defined(__GNUC__) && (__GNUC__ > 4 || __GNUC__ == 4 && __GNUC_MINOR__ > 1) |
cca6d953 ZM |
52 | #define av_alloc_size(n) __attribute__((alloc_size(n))) |
53 | #else | |
54 | #define av_alloc_size(n) | |
55 | #endif | |
56 | ||
792098c2 | 57 | /** |
0ee97f0d SS |
58 | * Allocate a block of \p size bytes with alignment suitable for all |
59 | * memory accesses (including vectors if available on the CPU). | |
60 | * @param size Size in bytes for the memory block to be allocated. | |
61 | * @return Pointer to the allocated block, NULL if it cannot allocate | |
62 | * it. | |
63 | * @see av_mallocz() | |
792098c2 | 64 | */ |
cca6d953 | 65 | void *av_malloc(unsigned int size) av_malloc_attrib av_alloc_size(1); |
792098c2 PI |
66 | |
67 | /** | |
0ee97f0d SS |
68 | * Allocate or reallocate a block of memory. |
69 | * If \p ptr is NULL and \p size > 0, allocate a new block. If \p | |
70 | * size is zero, free the memory block pointed by \p ptr. | |
71 | * @param size Size in bytes for the memory block to be allocated or | |
72 | * reallocated. | |
73 | * @param ptr Pointer to a memory block already allocated with | |
74 | * av_malloc(z)() or av_realloc() or NULL. | |
75 | * @return Pointer to a newly reallocated block or NULL if it cannot | |
76 | * reallocate or the function is used to free the memory block. | |
77 | * @see av_fast_realloc() | |
792098c2 | 78 | */ |
cca6d953 | 79 | void *av_realloc(void *ptr, unsigned int size) av_alloc_size(2); |
792098c2 PI |
80 | |
81 | /** | |
0ee97f0d SS |
82 | * Free a memory block which has been allocated with av_malloc(z)() or |
83 | * av_realloc(). | |
84 | * @param ptr Pointer to the memory block which should be freed. | |
22baf42c SS |
85 | * @note ptr = NULL is explicitly allowed. |
86 | * @note It is recommended that you use av_freep() instead. | |
0ee97f0d | 87 | * @see av_freep() |
792098c2 PI |
88 | */ |
89 | void av_free(void *ptr); | |
90 | ||
0ee97f0d SS |
91 | /** |
92 | * Allocate a block of \p size bytes with alignment suitable for all | |
93 | * memory accesses (including vectors if available on the CPU) and | |
94 | * set to zeroes all the bytes of the block. | |
95 | * @param size Size in bytes for the memory block to be allocated. | |
96 | * @return Pointer to the allocated block, NULL if it cannot allocate | |
97 | * it. | |
98 | * @see av_malloc() | |
99 | */ | |
cca6d953 | 100 | void *av_mallocz(unsigned int size) av_malloc_attrib av_alloc_size(1); |
d3de3ee2 SS |
101 | |
102 | /** | |
8a2d973d | 103 | * Duplicate the string \p s. |
d3de3ee2 SS |
104 | * @param s String to be duplicated. |
105 | * @return Pointer to a newly allocated string containing a | |
8a2d973d | 106 | * copy of \p s or NULL if it cannot be allocated. |
d3de3ee2 | 107 | */ |
85074d3c | 108 | char *av_strdup(const char *s) av_malloc_attrib; |
792098c2 PI |
109 | |
110 | /** | |
0ee97f0d SS |
111 | * Free a memory block which has been allocated with av_malloc(z)() or |
112 | * av_realloc() and set to NULL the pointer to it. | |
113 | * @param ptr Pointer to the pointer to the memory block which should | |
114 | * be freed. | |
115 | * @see av_free() | |
792098c2 PI |
116 | */ |
117 | void av_freep(void *ptr); | |
118 | ||
5b21bdab | 119 | #endif /* FFMPEG_MEM_H */ |