ffmpeg: probe buffersinks once more after EOF.

Reap buffers stored in the buffer sinks even when
the avfilter_graph_request_oldest() loop only returns EOF.

avfilter_graph_request_oldest() can cause frames to arrive
to the sinks even when it returns EOF.
This commit is contained in:
Nicolas George 2012-07-17 18:02:33 +02:00
parent 5e99df019a
commit bf8ce5a5c3
1 changed files with 3 additions and 3 deletions

View File

@ -1928,7 +1928,7 @@ static int poll_filters(void)
AVFilterBufferRef *picref; AVFilterBufferRef *picref;
AVFrame *filtered_frame = NULL; AVFrame *filtered_frame = NULL;
int i, ret, ret_all; int i, ret, ret_all;
unsigned nb_success, nb_eof; unsigned nb_success = 1, av_uninit(nb_eof);
int64_t frame_pts; int64_t frame_pts;
while (1) { while (1) {
@ -2001,6 +2001,8 @@ static int poll_filters(void)
avfilter_unref_buffer(picref); avfilter_unref_buffer(picref);
} }
} }
if (!nb_success) /* from last round */
break;
/* Request frames through all the graphs */ /* Request frames through all the graphs */
ret_all = nb_success = nb_eof = 0; ret_all = nb_success = nb_eof = 0;
for (i = 0; i < nb_filtergraphs; i++) { for (i = 0; i < nb_filtergraphs; i++) {
@ -2017,8 +2019,6 @@ static int poll_filters(void)
ret_all = ret; ret_all = ret;
} }
} }
if (!nb_success)
break;
/* Try again if anything succeeded */ /* Try again if anything succeeded */
} }
return nb_eof == nb_filtergraphs ? AVERROR_EOF : ret_all; return nb_eof == nb_filtergraphs ? AVERROR_EOF : ret_all;