structAVBuffer{uint8_t*data;/**< data described by this buffer */int size;/**< size of data in bytes *//**
* number of existing AVBufferRef instances referring to this buffer
*/
atomic_uint refcount;/**
* a callback for freeing the data
*/void(*free)(void*opaque,uint8_t*data);/**
* an opaque pointer, to be used by the freeing callback
*/void*opaque;/**
* A combination of BUFFER_FLAG_*
*/int flags;};
/**
* A reference to a data buffer.
*
* The size of this struct is not a part of the public ABI and it is not meant
* to be allocated directly.
*/typedefstructAVBufferRef{
AVBuffer *buffer;/**
* The data buffer. It is considered writable if and only if
* this is the only reference to the buffer, in which case
* av_buffer_is_writable() returns 1.
*/uint8_t*data;/**
* Size of data in bytes.
*/int size;} AVBufferRef;
typedefstructBufferPoolEntry{uint8_t*data;/*
* Backups of the original opaque/free of the AVBuffer corresponding to
* data. They will be used to free the buffer when the pool is freed.
*/void*opaque;void(*free)(void*opaque,uint8_t*data);
AVBufferPool *pool;structBufferPoolEntry*next;} BufferPoolEntry;structAVBufferPool{
AVMutex mutex;
BufferPoolEntry *pool;/*
* This is used to track when the pool is to be freed.
* The pointer to the pool itself held by the caller is considered to
* be one reference. Each buffer requested by the caller increases refcount
* by one, returning the buffer to the pool decreases it by one.
* refcount reaches zero when the buffer has been uninited AND all the
* buffers have been released, then it's safe to free the pool and all
* the buffers in it.
*/
atomic_uint refcount;int size;void*opaque;
AVBufferRef*(*alloc)(int size);
AVBufferRef*(*alloc2)(void*opaque,int size);void(*pool_free)(void*opaque);};