Skip to content

Commit 42e3ab0

Browse files
committed
DEBUG: log buffer pool get and release
1 parent 3fc8243 commit 42e3ab0

File tree

4 files changed

+51
-1
lines changed

4 files changed

+51
-1
lines changed

libavcodec/v4l2_request.c

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -545,6 +545,16 @@ static void v4l2_request_pool_free(void *opaque)
545545
av_log(NULL, AV_LOG_DEBUG, "%s: opaque=%p\n", __func__, opaque);
546546
}
547547

548+
static void v4l2_request_frame_get(void *opaque, void *data)
549+
{
550+
av_log(NULL, AV_LOG_DEBUG, "%s: opaque=%p data=%p\n", __func__, opaque, data);
551+
}
552+
553+
static void v4l2_request_frame_release(void *opaque, void *data)
554+
{
555+
av_log(NULL, AV_LOG_DEBUG, "%s: opaque=%p data=%p\n", __func__, opaque, data);
556+
}
557+
548558
static void v4l2_request_hwframe_ctx_free(AVHWFramesContext *hwfc)
549559
{
550560
av_log(NULL, AV_LOG_DEBUG, "%s: hwfc=%p pool=%p\n", __func__, hwfc, hwfc->pool);
@@ -563,7 +573,7 @@ int ff_v4l2_request_frame_params(AVCodecContext *avctx, AVBufferRef *hw_frames_c
563573
hwfc->width = ctx->format.fmt.pix.width;
564574
hwfc->height = ctx->format.fmt.pix.height;
565575

566-
hwfc->pool = av_buffer_pool_init2(sizeof(V4L2RequestDescriptor), avctx, v4l2_request_frame_alloc, v4l2_request_pool_free);
576+
hwfc->pool = av_buffer_pool_init3(sizeof(V4L2RequestDescriptor), avctx, v4l2_request_frame_alloc, v4l2_request_frame_get, v4l2_request_frame_release, v4l2_request_pool_free);
567577
if (!hwfc->pool)
568578
return AVERROR(ENOMEM);
569579

libavutil/buffer.c

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,31 @@ AVBufferPool *av_buffer_pool_init2(int size, void *opaque,
235235
return pool;
236236
}
237237

238+
AVBufferPool *av_buffer_pool_init3(int size, void *opaque,
239+
AVBufferRef* (*alloc)(void *opaque, int size),
240+
void (*get)(void *opaque, void *data),
241+
void (*release)(void *opaque, void *data),
242+
void (*pool_free)(void *opaque))
243+
{
244+
AVBufferPool *pool = av_mallocz(sizeof(*pool));
245+
if (!pool)
246+
return NULL;
247+
248+
ff_mutex_init(&pool->mutex, NULL);
249+
250+
pool->size = size;
251+
pool->opaque = opaque;
252+
pool->alloc2 = alloc;
253+
pool->pool_free = pool_free;
254+
255+
pool->get = get;
256+
pool->release = release;
257+
258+
atomic_init(&pool->refcount, 1);
259+
260+
return pool;
261+
}
262+
238263
AVBufferPool *av_buffer_pool_init(int size, AVBufferRef* (*alloc)(int size))
239264
{
240265
AVBufferPool *pool = av_mallocz(sizeof(*pool));
@@ -303,6 +328,9 @@ static void pool_release_buffer(void *opaque, uint8_t *data)
303328
BufferPoolEntry *buf = opaque;
304329
AVBufferPool *pool = buf->pool;
305330

331+
if (pool->release)
332+
pool->release(pool->opaque, buf->data);
333+
306334
if(CONFIG_MEMORY_POISONING)
307335
memset(buf->data, FF_MEMORY_POISON, pool->size);
308336

@@ -366,5 +394,8 @@ AVBufferRef *av_buffer_pool_get(AVBufferPool *pool)
366394
if (ret)
367395
atomic_fetch_add_explicit(&pool->refcount, 1, memory_order_relaxed);
368396

397+
if (pool->get)
398+
pool->get(pool->opaque, ret->data);
399+
369400
return ret;
370401
}

libavutil/buffer.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,12 @@ AVBufferPool *av_buffer_pool_init2(int size, void *opaque,
266266
AVBufferRef* (*alloc)(void *opaque, int size),
267267
void (*pool_free)(void *opaque));
268268

269+
AVBufferPool *av_buffer_pool_init3(int size, void *opaque,
270+
AVBufferRef* (*alloc)(void *opaque, int size),
271+
void (*get)(void *opaque, void *data),
272+
void (*release)(void *opaque, void *data),
273+
void (*pool_free)(void *opaque));
274+
269275
/**
270276
* Free all available buffers in a buffer pool.
271277
*/

libavutil/buffer_internal.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,9 @@ struct AVBufferPool {
9393
AVBufferRef* (*alloc)(int size);
9494
AVBufferRef* (*alloc2)(void *opaque, int size);
9595
void (*pool_free)(void *opaque);
96+
97+
void (*get)(void *opaque, void *data);
98+
void (*release)(void *opaque, void *data);
9699
};
97100

98101
#endif /* AVUTIL_BUFFER_INTERNAL_H */

0 commit comments

Comments
 (0)