Go to the documentation of this file.
19 #include <stdatomic.h>
30 void (*free)(
void *opaque, uint8_t *
data),
31 void *opaque,
int flags)
56 void (*free)(
void *opaque, uint8_t *
data),
57 void *opaque,
int flags)
133 b->free(
b->opaque,
b->data);
332 if (!ppool || !*ppool)
384 ret->buffer->opaque = buf;
AVBufferPool * av_buffer_pool_init(size_t size, AVBufferRef *(*alloc)(size_t size))
Allocate and initialize a buffer pool.
static int ff_mutex_init(AVMutex *mutex, const void *attr)
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
uint8_t * data
The data buffer.
static void pool_free(FFRefStructPool *pool)
AVBufferRef * av_buffer_ref(const AVBufferRef *buf)
Create a new reference to an AVBuffer.
#define BUFFER_FLAG_REALLOCATABLE
The buffer was av_realloc()ed, so it is reallocatable.
static int ff_mutex_unlock(AVMutex *mutex)
int flags
A combination of AV_BUFFER_FLAG_*.
AVBufferPool * av_buffer_pool_init2(size_t size, void *opaque, AVBufferRef *(*alloc)(void *opaque, size_t size), void(*pool_free)(void *opaque))
Allocate and initialize a buffer pool with a more complex allocator.
AVBufferRef * av_buffer_pool_get(AVBufferPool *pool)
Allocate a new AVBuffer, reusing an old buffer from the pool when available.
static void buffer_replace(AVBufferRef **dst, AVBufferRef **src)
#define AV_BUFFER_FLAG_READONLY
Always treat the buffer as read-only, even when it has only one reference.
static void pool_release_buffer(void *opaque, uint8_t *data)
void av_buffer_default_free(void *opaque, uint8_t *data)
Default free callback, which calls av_free() on the buffer data.
#define av_assert0(cond)
assert() equivalent, that is always enabled.
void(* free)(void *opaque, uint8_t *data)
a callback for freeing the data
size_t size
size of data in bytes
#define atomic_load(object)
#define BUFFER_FLAG_NO_FREE
The AVBuffer structure is part of a larger structure and should not be freed.
int flags_internal
A combination of BUFFER_FLAG_*.
static void buffer_pool_free(AVBufferPool *pool)
void * opaque
an opaque pointer, to be used by the freeing callback
void(* pool_free)(void *opaque)
void av_buffer_unref(AVBufferRef **buf)
Free a given reference and automatically free the buffer if there are no more references to it.
uint8_t * data
data described by this buffer
void av_buffer_pool_uninit(AVBufferPool **ppool)
Mark the pool as being available for freeing.
void(* free)(void *opaque, uint8_t *data)
static AVBufferRef * pool_alloc_buffer(AVBufferPool *pool)
static AVBufferRef * buffer_create(AVBuffer *buf, uint8_t *data, size_t size, void(*free)(void *opaque, uint8_t *data), void *opaque, int flags)
#define atomic_fetch_sub_explicit(object, operand, order)
AVBufferRef * av_buffer_create(uint8_t *data, size_t size, void(*free)(void *opaque, uint8_t *data), void *opaque, int flags)
Create an AVBuffer from an existing array.
static int ff_mutex_destroy(AVMutex *mutex)
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
#define atomic_fetch_add_explicit(object, operand, order)
AVBufferRef *(* alloc)(size_t size)
int av_buffer_make_writable(AVBufferRef **pbuf)
Create a writable reference from a given buffer reference, avoiding data copy if possible.
int av_buffer_get_ref_count(const AVBufferRef *buf)
static int ff_mutex_lock(AVMutex *mutex)
void * av_buffer_pool_buffer_get_opaque(const AVBufferRef *ref)
Query the original opaque parameter of an allocated buffer in the pool.
AVBufferRef * av_buffer_alloc(size_t size)
Allocate an AVBuffer of the given size using av_malloc().
size_t size
Size of data in bytes.
A reference counted buffer type.
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
int av_buffer_replace(AVBufferRef **pdst, const AVBufferRef *src)
Ensure dst refers to the same data as src.
struct BufferPoolEntry * next
int av_buffer_is_writable(const AVBufferRef *buf)
AVBufferRef * av_buffer_allocz(size_t size)
Same as av_buffer_alloc(), except the returned buffer will be initialized to zero.
static void buffer_pool_flush(AVBufferPool *pool)
static int ref[MAX_W *MAX_W]
int av_buffer_realloc(AVBufferRef **pbuf, size_t size)
Reallocate a given buffer.
void * av_buffer_get_opaque(const AVBufferRef *buf)
A reference to a data buffer.
AVBufferRef *(* alloc2)(void *opaque, size_t size)
#define flags(name, subs,...)
#define atomic_init(obj, value)
atomic_uint refcount
number of existing AVBufferRef instances referring to this buffer
void * av_realloc(void *ptr, size_t size)
Allocate, reallocate, or free a block of memory.