Go to the documentation of this file.
   27 #define _XOPEN_SOURCE 600 
   34 #include <stdatomic.h> 
   51 #define malloc         AV_JOIN(MALLOC_PREFIX, malloc) 
   52 #define memalign       AV_JOIN(MALLOC_PREFIX, memalign) 
   53 #define posix_memalign AV_JOIN(MALLOC_PREFIX, posix_memalign) 
   54 #define realloc        AV_JOIN(MALLOC_PREFIX, realloc) 
   55 #define free           AV_JOIN(MALLOC_PREFIX, free) 
   57 void *malloc(
size_t size);
 
   58 void *memalign(
size_t align, 
size_t size);
 
   59 int   posix_memalign(
void **ptr, 
size_t align, 
size_t size);
 
   60 void *realloc(
void *ptr, 
size_t size);
 
   65 #define ALIGN (HAVE_SIMD_ALIGN_64 ? 64 : (HAVE_SIMD_ALIGN_32 ? 32 : 16)) 
   67 #define FF_MEMORY_POISON 0x2a 
   84 #if (!defined(__INTEL_COMPILER) && AV_GCC_VERSION_AT_LEAST(5,1)) || AV_HAS_BUILTIN(__builtin_mul_overflow) 
   85     if (__builtin_mul_overflow(
a, 
b, &t))
 
   91     if ((
a | 
b) >= ((
size_t)1 << (
sizeof(
size_t) * 4)) && 
a && t / 
a != 
b)
 
  105 #if HAVE_POSIX_MEMALIGN 
  109 #elif HAVE_ALIGNED_MALLOC 
  148 #if CONFIG_MEMORY_POISONING 
  161 #if HAVE_ALIGNED_MALLOC 
  166 #if CONFIG_MEMORY_POISONING 
  197     memcpy(&
val, ptr, 
sizeof(
val));
 
  205     memcpy(ptr, &
val, 
sizeof(
val));
 
  229     memcpy(&
val, ptr, 
sizeof(
val));
 
  231     memcpy(ptr, &
val, 
sizeof(
val));
 
  240 #if HAVE_ALIGNED_MALLOC 
  260         memset(ptr, 0, 
size);
 
  276         size_t len = strlen(
s) + 1;
 
  291     end = memchr(
s, 0, 
len);
 
  310             memcpy(ptr, 
p, 
size);
 
  318     memcpy(&
tab, tab_ptr, 
sizeof(
tab));
 
  322         memcpy(tab_ptr, &
tab, 
sizeof(
tab));
 
  332     memcpy(&
tab, tab_ptr, 
sizeof(
tab));
 
  336         memcpy(tab_ptr, &
tab, 
sizeof(
tab));
 
  344                        const uint8_t *elem_data)
 
  346     uint8_t *tab_elem_data = 
NULL;
 
  349         tab_elem_data = (uint8_t *)*tab_ptr + (*nb_ptr) * elem_size;
 
  351             memcpy(tab_elem_data, elem_data, elem_size);
 
  352         else if (CONFIG_MEMORY_POISONING)
 
  358     return tab_elem_data;
 
  383     uint32_t 
a = v << 8  | v >> 16;
 
  384     uint32_t 
b = v << 16 | v >> 8;
 
  385     uint32_t 
c = v << 24 | v;
 
  388     uint32_t 
a = v       | v << 24;
 
  389     uint32_t 
b = v >> 8  | v << 16;
 
  390     uint32_t 
c = v >> 16 | v << 8;
 
  424     uint64_t v2= v + ((uint64_t)v<<32);
 
  449     const uint8_t *
src = &
dst[-back];
 
  455     } 
else if (back == 2) {
 
  457     } 
else if (back == 3) {
 
  459     } 
else if (back == 4) {
 
  464             while (cnt > blocklen) {
 
  465                 memcpy(
dst, 
src, blocklen);
 
  501     if (min_size <= *
size)
 
  506     max_size = 
FFMIN(max_size, UINT_MAX);
 
  508     if (min_size > max_size) {
 
  513     min_size = 
FFMIN(max_size, 
FFMAX(min_size + min_size / 16 + 32, min_size));
 
  527 static inline void fast_malloc(
void *ptr, 
unsigned int *
size, 
size_t min_size, 
int zero_realloc)
 
  532     memcpy(&
val, ptr, 
sizeof(
val));
 
  533     if (min_size <= *
size) {
 
  540     max_size = 
FFMIN(max_size, UINT_MAX);
 
  542     if (min_size > max_size) {
 
  547     min_size = 
FFMIN(max_size, 
FFMAX(min_size + min_size / 16 + 32, min_size));
 
  550     memcpy(ptr, &
val, 
sizeof(
val));
 
  
int av_size_mult(size_t a, size_t b, size_t *r)
Multiply two size_t values checking for overflow.
 
#define FF_DYNARRAY_ADD(av_size_max, av_elt_size, av_array, av_size, av_success, av_failure)
Add an element to a dynamic array.
 
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
 
void * av_dynarray2_add(void **tab_ptr, int *nb_ptr, size_t elem_size, const uint8_t *elem_data)
Add an element of size elem_size to a dynamic array.
 
static void fast_malloc(void *ptr, unsigned int *size, size_t min_size, int zero_realloc)
 
void * av_memdup(const void *p, size_t size)
Duplicate a buffer with av_malloc().
 
void av_max_alloc(size_t max)
Set the maximum size that may be allocated in one block.
 
void * av_realloc_f(void *ptr, size_t nelem, size_t elsize)
Allocate, reallocate, or free a block of memory.
 
static void fill16(uint8_t *dst, int len)
 
static const struct twinvq_data tab
 
static double val(void *priv, double ch)
 
void av_memcpy_backptr(uint8_t *dst, int back, int cnt)
Overlapping memcpy() implementation.
 
void * av_malloc_array(size_t nmemb, size_t size)
 
void * av_fast_realloc(void *ptr, unsigned int *size, size_t min_size)
Reallocate the given buffer if it is not large enough, otherwise do nothing.
 
void * av_realloc_array(void *ptr, size_t nmemb, size_t size)
 
void av_freep(void *arg)
Free a memory block which has been allocated with a function of av_malloc() or av_realloc() family,...
 
#define av_assert0(cond)
assert() equivalent, that is always enabled.
 
static void fill24(uint8_t *dst, int len)
 
and forward the result(frame or status change) to the corresponding input. If nothing is possible
 
void av_fast_mallocz(void *ptr, unsigned int *size, size_t min_size)
Allocate and clear a buffer, reusing the given one if large enough.
 
#define atomic_load_explicit(object, order)
 
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
 
void av_dynarray_add(void *tab_ptr, int *nb_ptr, void *elem)
Add the pointer to an element to a dynamic array.
 
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
 
int av_reallocp(void *ptr, size_t size)
Allocate, reallocate, or free a block of memory through a pointer to a pointer.
 
static void fill32(uint8_t *dst, int len)
 
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_RL24
 
static const uint8_t *BS_FUNC() align(BSCTX *bc)
Skip bits to a byte boundary.
 
The reader does not expect b to be semantically here and if the code is changed by maybe adding a a division or other the signedness will almost certainly be mistaken To avoid this confusion a new type was SUINT is the C unsigned type but it holds a signed int to use the same example SUINT a
 
int av_reallocp_array(void *ptr, size_t nmemb, size_t size)
Allocate, reallocate an array through a pointer to a pointer.
 
#define atomic_store_explicit(object, desired, order)
 
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
 
void * av_calloc(size_t nmemb, size_t size)
 
void av_free(void *ptr)
Free a memory block which has been allocated with a function of av_malloc() or av_realloc() family.
 
void * av_malloc(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
 
static atomic_size_t max_alloc_size
 
static int size_mult(size_t a, size_t b, size_t *r)
 
int av_dynarray_add_nofree(void *tab_ptr, int *nb_ptr, void *elem)
Add an element to a dynamic array.
 
IDirect3DDxgiInterfaceAccess _COM_Outptr_ void ** p
 
char * av_strdup(const char *s)
Duplicate a string.
 
void av_fast_malloc(void *ptr, unsigned int *size, size_t min_size)
Allocate a buffer, reusing the given one if large enough.
 
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_WL16 uint64_t_TMPL AV_WB64 unsigned int_TMPL AV_WB32 unsigned int_TMPL AV_RB24
 
char * av_strndup(const char *s, size_t len)
Duplicate a substring of a string.
 
void * av_realloc(void *ptr, size_t size)
Allocate, reallocate, or free a block of memory.