better handling of partial files
authorBaptiste Coudurier <baptiste.coudurier@gmail.com>
Sat, 8 Jul 2006 12:58:50 +0000 (12:58 +0000)
committerBaptiste Coudurier <baptiste.coudurier@gmail.com>
Sat, 8 Jul 2006 12:58:50 +0000 (12:58 +0000)
Originally committed as revision 5668 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavformat/mov.c

index 0df006e..7987a5f 100644 (file)
@@ -1750,9 +1750,9 @@ static void mov_build_index(MOVContext *mov, AVStream *st)
             assert(chunk_duration % sc->time_rate == 0);
             current_dts += chunk_duration / sc->time_rate;
         }
-        /* adjust sample count to chunk count */
-        sc->sample_count = sc->chunk_count;
     }
+    /* adjust sample count to avindex entries */
+    sc->sample_count = st->nb_index_entries;
 }
 
 static int mov_read_header(AVFormatContext *s, AVFormatParameters *ap)
@@ -1842,11 +1842,12 @@ static int mov_read_packet(AVFormatContext *s, AVPacket *pkt)
         return -1;
     /* must be done just before reading, to avoid infinite loop on sample */
     sc->current_sample++;
-    url_fseek(&s->pb, sample->pos, SEEK_SET);
-    if (av_get_packet(&s->pb, pkt, sample->size) <= 0) {
-        av_log(s, AV_LOG_ERROR, "stream %d, error reading packet at offset 0x%llx, maybe partial file\n", sc->ffindex, sample->pos);
+    if (sample->pos >= url_fsize(&s->pb)) {
+        av_log(mov->fc, AV_LOG_ERROR, "stream %d, offset 0x%llx: partial file\n", sc->ffindex, sample->pos);
         return -1;
     }
+    url_fseek(&s->pb, sample->pos, SEEK_SET);
+    av_get_packet(&s->pb, pkt, sample->size);
     pkt->stream_index = sc->ffindex;
     pkt->dts = sample->timestamp;
     if (sc->ctts_data) {