support fragments when non streamable

Originally committed as revision 12542 to svn://svn.ffmpeg.org/ffmpeg/trunk
pull/126/head
Baptiste Coudurier 17 years ago
parent 61aedb0f56
commit 433aeb6240
  1. 13
      libavformat/mov.c

@ -1727,7 +1727,7 @@ static int mov_read_packet(AVFormatContext *s, AVPacket *pkt)
AVIndexEntry *sample = 0; AVIndexEntry *sample = 0;
int64_t best_dts = INT64_MAX; int64_t best_dts = INT64_MAX;
int i; int i;
retry:
for (i = 0; i < s->nb_streams; i++) { for (i = 0; i < s->nb_streams; i++) {
AVStream *st = s->streams[i]; AVStream *st = s->streams[i];
MOVStreamContext *msc = st->priv_data; MOVStreamContext *msc = st->priv_data;
@ -1747,8 +1747,15 @@ static int mov_read_packet(AVFormatContext *s, AVPacket *pkt)
} }
} }
} }
if (!sample) if (!sample) {
return -1; mov->found_mdat = 0;
if (!url_is_streamed(s->pb) ||
mov_read_default(mov, s->pb, (MOV_atom_t){ 0, 0, INT64_MAX }) < 0 ||
url_feof(s->pb))
return -1;
dprintf(s, "read fragments, offset 0x%llx\n", url_ftell(s->pb));
goto retry;
}
/* must be done just before reading, to avoid infinite loop on sample */ /* must be done just before reading, to avoid infinite loop on sample */
sc->current_sample++; sc->current_sample++;
if (url_fseek(sc->pb, sample->pos, SEEK_SET) != sample->pos) { if (url_fseek(sc->pb, sample->pos, SEEK_SET) != sample->pos) {

Loading…
Cancel
Save