On 7/23/2016 5:50 AM, Nicolas George wrote: > Le quintidi 5 thermidor, an CCXXIV, Sophia Wang a écrit : >> Signed-off-by: Sophia Wang <s...@google.com> >> --- >> libavformat/matroskadec.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c >> index f3d701f..c536605 100644 >> --- a/libavformat/matroskadec.c >> +++ b/libavformat/matroskadec.c >> @@ -3323,7 +3323,7 @@ static int matroska_read_packet(AVFormatContext *s, >> AVPacket *pkt) >> while (matroska_deliver_packet(matroska, pkt)) { >> int64_t pos = avio_tell(matroska->ctx->pb); >> if (matroska->done) >> - return AVERROR_EOF; >> + return avio_feof(s->pb) ? AVERROR_EOF : AVERROR(EIO); >> if (matroska_parse_cluster(matroska) < 0) >> matroska_resync(matroska, pos); >> } > > This does not seem correct. EIO means something (usually along the lines > from "you should not unplug your USB stick while watching a file stored on > it" to "get a new hard drive and hope your backups are up to date"), it is > not a generic error when nothing else fits; there is AVERROR_UNKNOWN for > that.
AVERROR(EIO) is used in a lot of demuxers to signal overreads because of incomplete files, damaged seek tables, etc. In any case, checking the return value of matroska_resync(matroska, pos) may be the correct thing to do here instead, since that function is the one that sets matroska->done to 1, then returns EOF. _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel