mirror of https://git.ffmpeg.org/ffmpeg.git
Merge commit '721a4efc0545548a241080b53ab480e34f366240'
* commit '721a4efc0545548a241080b53ab480e34f366240': buffer: add support for pools using caller data in allocation Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
This commit is contained in:
commit
26abd5149e
|
@ -15,6 +15,9 @@ libavutil: 2015-08-28
|
||||||
|
|
||||||
API changes, most recent first:
|
API changes, most recent first:
|
||||||
|
|
||||||
|
2016-xx-xx - lavu 55.18.0
|
||||||
|
xxxxxxx buffer.h - Add av_buffer_pool_init2().
|
||||||
|
|
||||||
-------- 8< --------- FFmpeg 3.0 was cut here -------- 8< ---------
|
-------- 8< --------- FFmpeg 3.0 was cut here -------- 8< ---------
|
||||||
|
|
||||||
2016-02-10 - bc9a596 / 9f61abc - lavf 57.25.100 / 57.3.0 - avformat.h
|
2016-02-10 - bc9a596 / 9f61abc - lavf 57.25.100 / 57.3.0 - avformat.h
|
||||||
|
|
|
@ -214,6 +214,26 @@ int av_buffer_realloc(AVBufferRef **pbuf, int size)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AVBufferPool *av_buffer_pool_init2(int size, void *opaque,
|
||||||
|
AVBufferRef* (*alloc)(void *opaque, int size),
|
||||||
|
void (*pool_free)(void *opaque))
|
||||||
|
{
|
||||||
|
AVBufferPool *pool = av_mallocz(sizeof(*pool));
|
||||||
|
if (!pool)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
ff_mutex_init(&pool->mutex, NULL);
|
||||||
|
|
||||||
|
pool->size = size;
|
||||||
|
pool->opaque = opaque;
|
||||||
|
pool->alloc2 = alloc;
|
||||||
|
pool->pool_free = pool_free;
|
||||||
|
|
||||||
|
avpriv_atomic_int_set(&pool->refcount, 1);
|
||||||
|
|
||||||
|
return pool;
|
||||||
|
}
|
||||||
|
|
||||||
AVBufferPool *av_buffer_pool_init(int size, AVBufferRef* (*alloc)(int size))
|
AVBufferPool *av_buffer_pool_init(int size, AVBufferRef* (*alloc)(int size))
|
||||||
{
|
{
|
||||||
AVBufferPool *pool = av_mallocz(sizeof(*pool));
|
AVBufferPool *pool = av_mallocz(sizeof(*pool));
|
||||||
|
@ -244,6 +264,10 @@ static void buffer_pool_free(AVBufferPool *pool)
|
||||||
av_freep(&buf);
|
av_freep(&buf);
|
||||||
}
|
}
|
||||||
ff_mutex_destroy(&pool->mutex);
|
ff_mutex_destroy(&pool->mutex);
|
||||||
|
|
||||||
|
if (pool->pool_free)
|
||||||
|
pool->pool_free(pool->opaque);
|
||||||
|
|
||||||
av_freep(&pool);
|
av_freep(&pool);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -326,7 +350,8 @@ static AVBufferRef *pool_alloc_buffer(AVBufferPool *pool)
|
||||||
BufferPoolEntry *buf;
|
BufferPoolEntry *buf;
|
||||||
AVBufferRef *ret;
|
AVBufferRef *ret;
|
||||||
|
|
||||||
ret = pool->alloc(pool->size);
|
ret = pool->alloc2 ? pool->alloc2(pool->opaque, pool->size) :
|
||||||
|
pool->alloc(pool->size);
|
||||||
if (!ret)
|
if (!ret)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
|
|
@ -248,6 +248,23 @@ typedef struct AVBufferPool AVBufferPool;
|
||||||
*/
|
*/
|
||||||
AVBufferPool *av_buffer_pool_init(int size, AVBufferRef* (*alloc)(int size));
|
AVBufferPool *av_buffer_pool_init(int size, AVBufferRef* (*alloc)(int size));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allocate and initialize a buffer pool with a more complex allocator.
|
||||||
|
*
|
||||||
|
* @param size size of each buffer in this pool
|
||||||
|
* @param opaque arbitrary user data used by the allocator
|
||||||
|
* @param alloc a function that will be used to allocate new buffers when the
|
||||||
|
* pool is empty.
|
||||||
|
* @param pool_free a function that will be called immediately before the pool
|
||||||
|
* is freed. I.e. after av_buffer_pool_can_uninit() is called
|
||||||
|
* by the pool and all the frames are returned to the pool and
|
||||||
|
* freed. It is intended to uninitialize the user opaque data.
|
||||||
|
* @return newly created buffer pool on success, NULL on error.
|
||||||
|
*/
|
||||||
|
AVBufferPool *av_buffer_pool_init2(int size, void *opaque,
|
||||||
|
AVBufferRef* (*alloc)(void *opaque, int size),
|
||||||
|
void (*pool_free)(void *opaque));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mark the pool as being available for freeing. It will actually be freed only
|
* Mark the pool as being available for freeing. It will actually be freed only
|
||||||
* once all the allocated buffers associated with the pool are released. Thus it
|
* once all the allocated buffers associated with the pool are released. Thus it
|
||||||
|
|
|
@ -90,7 +90,10 @@ struct AVBufferPool {
|
||||||
volatile int nb_allocated;
|
volatile int nb_allocated;
|
||||||
|
|
||||||
int size;
|
int size;
|
||||||
|
void *opaque;
|
||||||
AVBufferRef* (*alloc)(int size);
|
AVBufferRef* (*alloc)(int size);
|
||||||
|
AVBufferRef* (*alloc2)(void *opaque, int size);
|
||||||
|
void (*pool_free)(void *opaque);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* AVUTIL_BUFFER_INTERNAL_H */
|
#endif /* AVUTIL_BUFFER_INTERNAL_H */
|
||||||
|
|
|
@ -64,8 +64,8 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define LIBAVUTIL_VERSION_MAJOR 55
|
#define LIBAVUTIL_VERSION_MAJOR 55
|
||||||
#define LIBAVUTIL_VERSION_MINOR 17
|
#define LIBAVUTIL_VERSION_MINOR 18
|
||||||
#define LIBAVUTIL_VERSION_MICRO 103
|
#define LIBAVUTIL_VERSION_MICRO 100
|
||||||
|
|
||||||
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
|
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
|
||||||
LIBAVUTIL_VERSION_MINOR, \
|
LIBAVUTIL_VERSION_MINOR, \
|
||||||
|
|
Loading…
Reference in New Issue