From 1f5c1333a733a7cba1803c9f9eab86da5f010bd5 Mon Sep 17 00:00:00 2001 From: Nicolas George Date: Mon, 25 Jun 2012 00:30:15 +0200 Subject: [PATCH] sink_buffer: implement fixed frame size. --- libavfilter/buffersink.h | 9 +++++++++ libavfilter/sink_buffer.c | 8 ++++++++ 2 files changed, 17 insertions(+) diff --git a/libavfilter/buffersink.h b/libavfilter/buffersink.h index e9148f7edc..808c0c7aad 100644 --- a/libavfilter/buffersink.h +++ b/libavfilter/buffersink.h @@ -55,6 +55,15 @@ typedef struct { */ AVABufferSinkParams *av_abuffersink_params_alloc(void); +/** + * Set the frame size for an audio buffer sink. + * + * All calls to av_buffersink_get_buffer_ref will return a buffer with + * exactly the specified number of samples, or AVERROR(EAGAIN) if there is + * not enough. The last buffer at EOF will be padded with 0. + */ +void av_buffersink_set_frame_size(AVFilterContext *ctx, unsigned frame_size); + /** * Tell av_buffersink_get_buffer_ref() to read video/samples buffer * reference, but not remove it from the buffer. This is useful if you diff --git a/libavfilter/sink_buffer.c b/libavfilter/sink_buffer.c index 4db874fdfa..2f3dff84ff 100644 --- a/libavfilter/sink_buffer.c +++ b/libavfilter/sink_buffer.c @@ -125,6 +125,14 @@ static void end_frame(AVFilterLink *inlink) } } +void av_buffersink_set_frame_size(AVFilterContext *ctx, unsigned frame_size) +{ + AVFilterLink *inlink = ctx->inputs[0]; + + inlink->min_samples = inlink->max_samples = + inlink->partial_buf_size = frame_size; +} + int av_buffersink_get_buffer_ref(AVFilterContext *ctx, AVFilterBufferRef **bufref, int flags) {