FFmpeg
1.2.4
Main Page
Related Pages
Modules
Data Structures
Files
Examples
File List
Globals
debian
libavutil-dev
usr
include
libavutil
mem.h
Go to the documentation of this file.
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
26
#ifndef AVUTIL_MEM_H
27
#define AVUTIL_MEM_H
28
29
#include <limits.h>
30
#include <stdint.h>
31
32
#include "
attributes.h
"
33
#include "
error.h
"
34
#include "
avutil.h
"
35
42
#if defined(__INTEL_COMPILER) && __INTEL_COMPILER < 1110 || defined(__SUNPRO_C)
43
#define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v
44
#define DECLARE_ASM_CONST(n,t,v) const t __attribute__ ((aligned (n))) v
45
#elif defined(__TI_COMPILER_VERSION__)
46
#define DECLARE_ALIGNED(n,t,v) \
47
AV_PRAGMA(DATA_ALIGN(v,n)) \
48
t __attribute__((aligned(n))) v
49
#define DECLARE_ASM_CONST(n,t,v) \
50
AV_PRAGMA(DATA_ALIGN(v,n)) \
51
static const t __attribute__((aligned(n))) v
52
#elif defined(__GNUC__)
53
#define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v
54
#define DECLARE_ASM_CONST(n,t,v) static const t av_used __attribute__ ((aligned (n))) v
55
#elif defined(_MSC_VER)
56
#define DECLARE_ALIGNED(n,t,v) __declspec(align(n)) t v
57
#define DECLARE_ASM_CONST(n,t,v) __declspec(align(n)) static const t v
58
#else
59
#define DECLARE_ALIGNED(n,t,v) t v
60
#define DECLARE_ASM_CONST(n,t,v) static const t v
61
#endif
62
63
#if AV_GCC_VERSION_AT_LEAST(3,1)
64
#define av_malloc_attrib __attribute__((__malloc__))
65
#else
66
#define av_malloc_attrib
67
#endif
68
69
#if AV_GCC_VERSION_AT_LEAST(4,3)
70
#define av_alloc_size(...) __attribute__((alloc_size(__VA_ARGS__)))
71
#else
72
#define av_alloc_size(...)
73
#endif
74
83
void
*
av_malloc
(
size_t
size
)
av_malloc_attrib
av_alloc_size
(1);
84
94
av_alloc_size
(1, 2) static inline
void
*
av_malloc_array
(
size_t
nmemb,
size_t
size
)
95
{
96
if
(size <= 0 || nmemb >= INT_MAX / size)
97
return
NULL
;
98
return
av_malloc
(nmemb * size);
99
}
100
113
void
*
av_realloc
(
void
*ptr,
size_t
size
)
av_alloc_size
(2);
114
123
void
*
av_realloc_f
(
void
*ptr,
size_t
nelem,
size_t
elsize);
124
133
void
av_free
(
void
*ptr);
134
143
void
*
av_mallocz
(
size_t
size
)
av_malloc_attrib
av_alloc_size
(1);
144
155
void
*
av_calloc
(
size_t
nmemb,
size_t
size
)
av_malloc_attrib
;
156
167
av_alloc_size
(1, 2) static inline
void
*
av_mallocz_array
(
size_t
nmemb,
size_t
size
)
168
{
169
if
(size <= 0 || nmemb >= INT_MAX / size)
170
return
NULL
;
171
return
av_mallocz
(nmemb * size);
172
}
173
180
char
*
av_strdup
(
const
char
*s)
av_malloc_attrib
;
181
189
void
av_freep
(
void
*ptr);
190
198
void
av_dynarray_add
(
void
*tab_ptr,
int
*nb_ptr,
void
*elem);
199
204
static
inline
int
av_size_mult
(
size_t
a
,
size_t
b
,
size_t
*
r
)
205
{
206
size_t
t
= a *
b
;
207
/* Hack inspired from glibc: only try the division if nelem and elsize
208
* are both greater than sqrt(SIZE_MAX). */
209
if
((a | b) >= ((
size_t
)1 << (
sizeof
(
size_t
) * 4)) && a && t / a != b)
210
return
AVERROR
(EINVAL);
211
*r =
t
;
212
return
0;
213
}
214
218
void
av_max_alloc
(
size_t
max);
219
229
void
av_memcpy_backptr
(
uint8_t
*
dst
,
int
back,
int
cnt);
230
235
#endif
/* AVUTIL_MEM_H */
Generated on Fri Nov 29 2013 19:14:53 for FFmpeg by
1.8.1.2