mirror of https://git.ffmpeg.org/ffmpeg.git
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:
parent
5e99df019a
commit
bf8ce5a5c3
6
ffmpeg.c
6
ffmpeg.c
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue