[Ffmpeg-devel] av_read_frame and EOF
Steve Lhomme
slhomme
Thu Apr 27 23:00:43 CEST 2006
Hi,
We've been struggling with issues where we read some files with
libavformat and at the end of the file we loop infinitely looking for a
packet that never comes.
Our loop to read packets is similar to what ffplay does:
while(1) {
ret = av_read_frame(fctx, &pkt);
if (ret < 0) {
if (url_ferror(&fctx->pb)) {
break;
} else
continue;
}
...
}
But for some files (MOV and WMV at least) the demuxer is too smart and
will not read past its boundaries. That means if no packet is left to
read it won't attempt to read more. So the underlying I/O stream never
reports an error nor an EOF. This lead to an infinite loop...
So my question is: is the demuxer supposed to return a different value
if there is a stream error or if there is no packet left ? Is there any
way to know in which case we are ?
We also have the case where we use url_feof() instead of url_ferror().
The problem is the same. But WMV at least tries to look around in the
file and so we can detect the EOF with a patched url_fseek().
Thanks for any clue.
(or conclusion that av_read_packet() < 0 means don't bother reading a
new packet)
Steve
More information about the ffmpeg-devel
mailing list