History

lavf/framesync: detect EOF immediately.

Fix an infinite loop in forward_status_change().

Nicolas George committed 9 years ago

Commit 3b64e3e1 parent 68e55981 file · +9 −1Browse files

Unified · Split

libavfilter/framesync.c+9−1
@@ -18,6 +18,9 @@ · 17 unmodified lines
1818 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
1919 */
2020
21+#define FF_INTERNAL_FIELDS 1
22+#include "framequeue.h"
23+
2124 #include "libavutil/avassert.h"
2225 #include "avfilter.h"
2326 #include "bufferqueue.h"
@@ -314,7 +317,7 @@ int ff_framesync_filter_frame(FFFrameSync *fs, AVFilterLink *inlink, · 290 unmodified lines
314317 int ff_framesync_request_frame(FFFrameSync *fs, AVFilterLink *outlink)
315318 {
316319 AVFilterContext *ctx = outlink->src;
317− int input, ret;
320+ int input, ret, i;
318321
319322 if ((ret = ff_framesync_process_frame(fs, 0)) < 0)
320323 return ret;
@@ -323,6 +326,11 @@ int ff_framesync_request_frame(FFFrameSync *fs, AVFilterLink *outlink) · 2 unmodified lines
323326 if (fs->eof)
324327 return AVERROR_EOF;
325328 input = fs->in_request;
329+ /* Detect status change early */
330+ for (i = 0; i < fs->nb_in; i++)
331+ if (!ff_framequeue_queued_frames(&ctx->inputs[i]->fifo) &&
332+ ctx->inputs[i]->status_in && !ctx->inputs[i]->status_out)
333+ input = i;
326334 ret = ff_request_frame(ctx->inputs[input]);
327335 if (ret == AVERROR_EOF) {
328336 if ((ret = ff_framesync_add_frame(fs, input, NULL)) < 0)

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t