[FFmpeg-devel] [PATCH] RTSP-MS 15/15: move packet_time_start zero value assignment in asf.c
Ronald S. Bultje
rsbultje
Thu Apr 16 16:14:59 CEST 2009
Hi,
On Wed, Apr 15, 2009 at 11:13 PM, Michael Niedermayer <michaelni at gmx.at> wrote:
> On Wed, Apr 15, 2009 at 09:36:47PM -0400, Ronald S. Bultje wrote:
>> Shit... I hate you. :-).
>
> good :)
/me looks doubtful
> yes, url_fseek/skip() clears eof but the first get_byte() or whatever
> will notice it has no data and call fill_buffer() that will set eof_reached
> again, so unless you check for eof straight after a url_fskip/seek it should
> give the correct value
Indeed. Which doesn't happen. Yesterday I blindly assumed it'd call
get_byte() etc. somewhere. It doesn't. It gets stuck here (EOF is not
set) in parse_packet():
if (asf->packet_size_left < FRAME_HEADER_SIZE
|| asf->packet_segments < 1) {
//asf->packet_size_left <= asf->packet_padsize) {
int ret = asf->packet_size_left + asf->packet_padsize;
//printf("PacketLeftSize:%d Pad:%d Pos:%"PRId64"\n",
asf->packet_size_left, asf->packet_padsize, url_ftell(pb));
assert(ret>=0);
/* fail safe */
url_fskip(pb, ret);
asf->packet_pos= url_ftell(pb);
if (asf->data_object_size != (uint64_t)-1 &&
(asf->packet_pos - asf->data_object_offset >=
asf->data_object_size))
return AVERROR(EIO); /* Do not exceed the size of the
data object */
Returning EIO, which causes a return of EIO to ffplay. Ffplay then
checks for EOF, isn't there, reruns and we re-enter this loop. We
never read a single byte, we just skip.
I still think we should add some EOF check to url_fskip() or url_fseek()...
Ronald
More information about the ffmpeg-devel
mailing list