From ac07f941ae1626bfd8e201a3771c67e54073e31e Mon Sep 17 00:00:00 2001 From: Nicolas George Date: Sun, 19 Aug 2012 18:08:40 +0200 Subject: ffmpeg: use AV_BUFFERSRC_FLAG_PUSH. It reduces the lifespan of buffers in filter graphs, and therefore the memory consumption. --- ffmpeg.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'ffmpeg.c') diff --git a/ffmpeg.c b/ffmpeg.c index b50b160d59..2459199014 100644 --- a/ffmpeg.c +++ b/ffmpeg.c @@ -193,7 +193,8 @@ static void sub2video_push_ref(InputStream *ist, int64_t pts) av_buffersrc_add_ref(ist->filters[i]->filter, avfilter_ref_buffer(ref, ~0), AV_BUFFERSRC_FLAG_NO_CHECK_FORMAT | - AV_BUFFERSRC_FLAG_NO_COPY); + AV_BUFFERSRC_FLAG_NO_COPY | + AV_BUFFERSRC_FLAG_PUSH); } static void sub2video_update(InputStream *ist, AVSubtitle *sub, int64_t pts) @@ -1508,7 +1509,8 @@ static int decode_audio(InputStream *ist, AVPacket *pkt, int *got_output) decoded_frame_tb, (AVRational){1, ist->st->codec->sample_rate}); for (i = 0; i < ist->nb_filters; i++) - av_buffersrc_add_frame(ist->filters[i]->filter, decoded_frame, 0); + av_buffersrc_add_frame(ist->filters[i]->filter, decoded_frame, + AV_BUFFERSRC_FLAG_PUSH); decoded_frame->pts = AV_NOPTS_VALUE; @@ -1619,9 +1621,10 @@ static int decode_video(InputStream *ist, AVPacket *pkt, int *got_output) buf->refcount++; av_buffersrc_add_ref(ist->filters[i]->filter, fb, AV_BUFFERSRC_FLAG_NO_CHECK_FORMAT | - AV_BUFFERSRC_FLAG_NO_COPY); + AV_BUFFERSRC_FLAG_NO_COPY | + AV_BUFFERSRC_FLAG_PUSH); } else - if(av_buffersrc_add_frame(ist->filters[i]->filter, decoded_frame, 0)<0) { + if(av_buffersrc_add_frame(ist->filters[i]->filter, decoded_frame, AV_BUFFERSRC_FLAG_PUSH)<0) { av_log(NULL, AV_LOG_FATAL, "Failed to inject frame into filter network\n"); exit_program(1); } -- cgit v1.2.3