Hi,
if AVERROR(EAGAIN) is returned from ffm_is_avail_data it always causes
an infinite EAGAIN loop.
Best regards,
Andreas
>From 115425287fe1f898baa79705f05d495c061e310a Mon Sep 17 00:00:00 2001
From: Andreas Cadhalpun <andreas.cadhal...@googlemail.com>
Date: Sun, 8 Mar 2015 23:34:29 +0100
Subject: [PATCH 7/8] ffmdec: don't return AVERROR(EAGAIN) from
ffm_is_avail_data
If AVERROR(EAGAIN) is returned, ffm_read_packet is called again
immediately, which calls ffm_is_avail_data before changing the ffm
context, so that this will return AVERROR(EAGAIN) again, leading
to an infinite loop (again).
Signed-off-by: Andreas Cadhalpun <andreas.cadhal...@googlemail.com>
---
libavformat/ffmdec.c | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/libavformat/ffmdec.c b/libavformat/ffmdec.c
index 60df51d..9f00fc4 100644
--- a/libavformat/ffmdec.c
+++ b/libavformat/ffmdec.c
@@ -46,10 +46,7 @@ static int ffm_is_avail_data(AVFormatContext *s, int size)
return AVERROR_EOF;
avail_size = ffm->file_size - pos;
} else {
- if (pos == ffm->write_index) {
- /* exactly at the end of stream */
- return AVERROR(EAGAIN);
- } else if (pos < ffm->write_index) {
+ if (pos < ffm->write_index) {
avail_size = ffm->write_index - pos;
} else {
avail_size = (ffm->file_size - pos) + (ffm->write_index - FFM_PACKET_SIZE);
@@ -59,7 +56,7 @@ static int ffm_is_avail_data(AVFormatContext *s, int size)
if (size <= avail_size)
return 1;
else
- return AVERROR(EAGAIN);
+ return AVERROR_INVALIDDATA;
}
static int ffm_resync(AVFormatContext *s, int state)
--
2.1.4
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel