FFmpeg 5.1.6
Functions
Heap Management

Functions responsible for allocating, freeing, and copying memory. More...

Functions

void * av_malloc (size_t size) av_malloc_attrib
 Allocate a memory block with alignment suitable for all memory accesses (including vectors if available on the CPU). More...
 
void * av_mallocz (size_t size) av_malloc_attrib
 Allocate a memory block with alignment suitable for all memory accesses (including vectors if available on the CPU) and zero all the bytes of the block. More...
 
void * av_malloc_array (size_t nmemb, size_t size)
 Allocate a memory block for an array with av_malloc(). More...
 
void * av_calloc (size_t nmemb, size_t size) av_malloc_attrib
 Allocate a memory block for an array with av_mallocz(). More...
 
attribute_deprecated void * av_mallocz_array (size_t nmemb, size_t size) av_malloc_attrib
 
void * av_realloc (void *ptr, size_t size)
 Allocate, reallocate, or free a block of memory. More...
 
av_warn_unused_result int av_reallocp (void *ptr, size_t size)
 Allocate, reallocate, or free a block of memory through a pointer to a pointer. More...
 
void * av_realloc_f (void *ptr, size_t nelem, size_t elsize)
 Allocate, reallocate, or free a block of memory. More...
 
void * av_realloc_array (void *ptr, size_t nmemb, size_t size)
 Allocate, reallocate, or free an array. More...
 
int av_reallocp_array (void *ptr, size_t nmemb, size_t size)
 Allocate, reallocate an array through a pointer to a pointer. More...
 
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. More...
 
void av_fast_malloc (void *ptr, unsigned int *size, size_t min_size)
 Allocate a buffer, reusing the given one if large enough. More...
 
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. More...
 
void av_free (void *ptr)
 Free a memory block which has been allocated with a function of av_malloc() or av_realloc() family. More...
 
void av_freep (void *ptr)
 Free a memory block which has been allocated with a function of av_malloc() or av_realloc() family, and set the pointer pointing to it to NULL. More...
 
char * av_strdup (const char *s) av_malloc_attrib
 Duplicate a string. More...
 
char * av_strndup (const char *s, size_t len) av_malloc_attrib
 Duplicate a substring of a string. More...
 
void * av_memdup (const void *p, size_t size)
 Duplicate a buffer with av_malloc(). More...
 
void av_memcpy_backptr (uint8_t *dst, int back, int cnt)
 Overlapping memcpy() implementation. More...
 

Detailed Description

Functions responsible for allocating, freeing, and copying memory.

All memory allocation functions have a built-in upper limit of INT_MAX bytes. This may be changed with av_max_alloc(), although exercise extreme caution when doing so.

Function Documentation

◆ av_malloc()

void * av_malloc ( size_t  size)

Allocate a memory block with alignment suitable for all memory accesses (including vectors if available on the CPU).

Parameters
sizeSize in bytes for the memory block to be allocated
Returns
Pointer to the allocated block, or NULL if the block cannot be allocated
See also
av_mallocz()
Examples
avio_reading.c, and hw_decode.c.

Referenced by decode_write(), and main().

◆ av_mallocz()

void * av_mallocz ( size_t  size)

Allocate a memory block with alignment suitable for all memory accesses (including vectors if available on the CPU) and zero all the bytes of the block.

Parameters
sizeSize in bytes for the memory block to be allocated
Returns
Pointer to the allocated block, or NULL if it cannot be allocated
See also
av_malloc()
Examples
qsvdec.c.

Referenced by main().

◆ av_malloc_array()

void * av_malloc_array ( size_t  nmemb,
size_t  size 
)

Allocate a memory block for an array with av_malloc().

The allocated memory will have size size * nmemb bytes.

Parameters
nmembNumber of element
sizeSize of a single element
Returns
Pointer to the allocated block, or NULL if the block cannot be allocated
See also
av_malloc()
Examples
transcoding.c.

Referenced by init_filters().

◆ av_calloc()

void * av_calloc ( size_t  nmemb,
size_t  size 
)

Allocate a memory block for an array with av_mallocz().

The allocated memory will have size size * nmemb bytes.

Parameters
nmembNumber of elements
sizeSize of the single element
Returns
Pointer to the allocated block, or NULL if the block cannot be allocated
See also
av_mallocz()
av_malloc_array()
Examples
remuxing.c, and transcoding.c.

Referenced by main(), and open_input_file().

◆ av_mallocz_array()

attribute_deprecated void * av_mallocz_array ( size_t  nmemb,
size_t  size 
)

◆ av_realloc()

void * av_realloc ( void *  ptr,
size_t  size 
)

Allocate, reallocate, or free a block of memory.

If ptr is NULL and size > 0, allocate a new block. Otherwise, expand or shrink that block of memory according to size.

Parameters
ptrPointer to a memory block already allocated with av_realloc() or NULL
sizeSize in bytes of the memory block to be allocated or reallocated
Returns
Pointer to a newly-reallocated block or NULL if the block cannot be reallocated
Warning
Unlike av_malloc(), the returned pointer is not guaranteed to be correctly aligned. The returned pointer must be freed after even if size is zero.
See also
av_fast_realloc()
av_reallocp()

◆ av_reallocp()

av_warn_unused_result int av_reallocp ( void *  ptr,
size_t  size 
)

Allocate, reallocate, or free a block of memory through a pointer to a pointer.

If *ptr is NULL and size > 0, allocate a new block. If size is zero, free the memory block pointed to by *ptr. Otherwise, expand or shrink that block of memory according to size.

Parameters
[in,out]ptrPointer to a pointer to a memory block already allocated with av_realloc(), or a pointer to NULL. The pointer is updated on success, or freed on failure.
[in]sizeSize in bytes for the memory block to be allocated or reallocated
Returns
Zero on success, an AVERROR error code on failure
Warning
Unlike av_malloc(), the allocated memory is not guaranteed to be correctly aligned.

◆ av_realloc_f()

void * av_realloc_f ( void *  ptr,
size_t  nelem,
size_t  elsize 
)

Allocate, reallocate, or free a block of memory.

This function does the same thing as av_realloc(), except:

  • It takes two size arguments and allocates nelem * elsize bytes, after checking the result of the multiplication for integer overflow.
  • It frees the input block in case of failure, thus avoiding the memory leak with the classic
    buf = realloc(buf);
    if (!buf)
    return -1;
    pattern.

◆ av_realloc_array()

void * av_realloc_array ( void *  ptr,
size_t  nmemb,
size_t  size 
)

Allocate, reallocate, or free an array.

If ptr is NULL and nmemb > 0, allocate a new block.

Parameters
ptrPointer to a memory block already allocated with av_realloc() or NULL
nmembNumber of elements in the array
sizeSize of the single element of the array
Returns
Pointer to a newly-reallocated block or NULL if the block cannot be reallocated
Warning
Unlike av_malloc(), the allocated memory is not guaranteed to be correctly aligned. The returned pointer must be freed after even if nmemb is zero.
See also
av_reallocp_array()

◆ av_reallocp_array()

int av_reallocp_array ( void *  ptr,
size_t  nmemb,
size_t  size 
)

Allocate, reallocate an array through a pointer to a pointer.

If *ptr is NULL and nmemb > 0, allocate a new block.

Parameters
[in,out]ptrPointer to a pointer to a memory block already allocated with av_realloc(), or a pointer to NULL. The pointer is updated on success, or freed on failure.
[in]nmembNumber of elements
[in]sizeSize of the single element
Returns
Zero on success, an AVERROR error code on failure
Warning
Unlike av_malloc(), the allocated memory is not guaranteed to be correctly aligned. *ptr must be freed after even if nmemb is zero.

◆ av_fast_realloc()

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.

If the given buffer is NULL, then a new uninitialized buffer is allocated.

If the given buffer is not large enough, and reallocation fails, NULL is returned and *size is set to 0, but the original buffer is not changed or freed.

A typical use pattern follows:

uint8_t *buf = ...;
uint8_t *new_buf = av_fast_realloc(buf, &current_size, size_needed);
if (!new_buf) {
// Allocation failed; clean up original buffer
av_freep(&buf);
return AVERROR(ENOMEM);
}
#define AVERROR(e)
Definition: error.h:45
void av_freep(void *ptr)
Free a memory block which has been allocated with a function of av_malloc() or av_realloc() family,...
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.
Parameters
[in,out]ptrAlready allocated buffer, or NULL
[in,out]sizePointer to the size of buffer ptr. *size is updated to the new allocated size, in particular 0 in case of failure.
[in]min_sizeDesired minimal size of buffer ptr
Returns
ptr if the buffer is large enough, a pointer to newly reallocated buffer if the buffer was not large enough, or NULL in case of error
See also
av_realloc()
av_fast_malloc()

◆ av_fast_malloc()

void av_fast_malloc ( void *  ptr,
unsigned int *  size,
size_t  min_size 
)

Allocate a buffer, reusing the given one if large enough.

Contrary to av_fast_realloc(), the current buffer contents might not be preserved and on error the old buffer is freed, thus no special handling to avoid memleaks is necessary.

*ptr is allowed to be NULL, in which case allocation always happens if size_needed is greater than 0.

uint8_t *buf = ...;
av_fast_malloc(&buf, &current_size, size_needed);
if (!buf) {
// Allocation failed; buf already freed
return AVERROR(ENOMEM);
}
void av_fast_malloc(void *ptr, unsigned int *size, size_t min_size)
Allocate a buffer, reusing the given one if large enough.
Parameters
[in,out]ptrPointer to pointer to an already allocated buffer. *ptr will be overwritten with pointer to new buffer on success or NULL on failure
[in,out]sizePointer to the size of buffer *ptr. *size is updated to the new allocated size, in particular 0 in case of failure.
[in]min_sizeDesired minimal size of buffer *ptr
See also
av_realloc()
av_fast_mallocz()

◆ av_fast_mallocz()

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.

Like av_fast_malloc(), but all newly allocated space is initially cleared. Reused buffer is not cleared.

*ptr is allowed to be NULL, in which case allocation always happens if size_needed is greater than 0.

Parameters
[in,out]ptrPointer to pointer to an already allocated buffer. *ptr will be overwritten with pointer to new buffer on success or NULL on failure
[in,out]sizePointer to the size of buffer *ptr. *size is updated to the new allocated size, in particular 0 in case of failure.
[in]min_sizeDesired minimal size of buffer *ptr
See also
av_fast_malloc()

◆ av_free()

void av_free ( void *  ptr)

Free a memory block which has been allocated with a function of av_malloc() or av_realloc() family.

Parameters
ptrPointer to the memory block which should be freed.
Note
ptr = NULL is explicitly allowed.
It is recommended that you use av_freep() instead, to prevent leaving behind dangling pointers.
See also
av_freep()
Examples
decode_audio.c, demuxing_decoding.c, and transcoding.c.

Referenced by main().

◆ av_freep()

void av_freep ( void *  ptr)

Free a memory block which has been allocated with a function of av_malloc() or av_realloc() family, and set the pointer pointing to it to NULL.

uint8_t *buf = av_malloc(16);
av_free(buf);
// buf now contains a dangling pointer to freed memory, and accidental
// dereference of buf will result in a use-after-free, which may be a
// security risk.
uint8_t *buf = av_malloc(16);
av_freep(&buf);
// buf is now NULL, and accidental dereference will only result in a
// NULL-pointer dereference.
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) av_malloc_attrib
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
Parameters
ptrPointer to the pointer to the memory block which should be freed
Note
*ptr = NULL is safe and leads to no action.
See also
av_free()
Examples
avio_reading.c, filter_audio.c, http_multiclient.c, hw_decode.c, remuxing.c, resampling_audio.c, scaling_video.c, and transcode_aac.c.

Referenced by decode_write(), init_converted_samples(), main(), process_client(), and read_decode_convert_and_store().

◆ av_strdup()

char * av_strdup ( const char *  s)

Duplicate a string.

Parameters
sString to be duplicated
Returns
Pointer to a newly-allocated string containing a copy of s or NULL if the string cannot be allocated
See also
av_strndup()
Examples
filtering_audio.c, filtering_video.c, transcode_aac.c, and transcoding.c.

Referenced by init_filter(), init_filters(), and open_output_file().

◆ av_strndup()

char * av_strndup ( const char *  s,
size_t  len 
)

Duplicate a substring of a string.

Parameters
sString to be duplicated
lenMaximum length of the resulting string (not counting the terminating byte)
Returns
Pointer to a newly-allocated string containing a substring of s or NULL if the string cannot be allocated

◆ av_memdup()

void * av_memdup ( const void *  p,
size_t  size 
)

Duplicate a buffer with av_malloc().

Parameters
pBuffer to be duplicated
sizeSize in bytes of the buffer copied
Returns
Pointer to a newly allocated buffer containing a copy of p or NULL if the buffer cannot be allocated

◆ av_memcpy_backptr()

void av_memcpy_backptr ( uint8_t *  dst,
int  back,
int  cnt 
)

Overlapping memcpy() implementation.

Parameters
dstDestination buffer
backNumber of bytes back to start copying (i.e. the initial size of the overlapping window); must be > 0
cntNumber of bytes to copy; must be >= 0
Note
cnt > back is valid, this will copy the bytes we just copied, thus creating a repeating pattern with a period length of back.