From d9aac2676161e4116574482508d9c7f0c4398f49 Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Wed, 16 Jun 2010 01:12:26 +0000 Subject: [PATCH] When reading a stream, should retry on EAGAIN instead of just failing. Also, when reading a live feed, should retry regardless of whether any client has opened the stream. Originally committed as revision 23621 to svn://svn.ffmpeg.org/ffmpeg/trunk --- ffserver.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/ffserver.c b/ffserver.c index 77340af3df..31d0268d05 100644 --- a/ffserver.c +++ b/ffserver.c @@ -2306,12 +2306,16 @@ static int http_prepare_data(HTTPContext *c) else { AVPacket pkt; redo: - if (av_read_frame(c->fmt_in, &pkt) < 0) { - if (c->stream->feed && c->stream->feed->feed_opened) { + ret = av_read_frame(c->fmt_in, &pkt); + if (ret < 0) { + if (c->stream->feed) { /* if coming from feed, it means we reached the end of the ffm file, so must wait for more data */ c->state = HTTPSTATE_WAIT_FEED; return 1; /* state changed */ + } else if (ret == AVERROR(EAGAIN)) { + /* input not ready, come back later */ + return 0; } else { if (c->stream->loop) { av_close_input_file(c->fmt_in);