diff options
author | Baptiste Coudurier <baptiste.coudurier@gmail.com> | 2006-04-19 12:51:58 +0000 |
---|---|---|
committer | Baptiste Coudurier <baptiste.coudurier@gmail.com> | 2006-04-19 12:51:58 +0000 |
commit | 5c72cad888aa60da92579ee983afa6fe0fded794 (patch) | |
tree | 538d109e32075142f0d898bd21bda81fd466885b | |
parent | 98d12b09aff3f34d42a91db6a60452955e621494 (diff) | |
download | ffmpeg-5c72cad888aa60da92579ee983afa6fe0fded794.tar.gz |
always skip garbage at end of atom
Originally committed as revision 5300 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r-- | libavformat/mov.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/libavformat/mov.c b/libavformat/mov.c index b503d2ccf5..e5aa8f3064 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -461,7 +461,12 @@ static int mov_read_default(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom) if (c->parse_table[i].type == 0) { /* skip leaf atoms data */ url_fskip(pb, a.size); } else { + offset_t start_pos = url_ftell(pb); + int64_t left; err = (c->parse_table[i].func)(c, pb, a); + left = a.size - url_ftell(pb) + start_pos; + if (left > 0) /* skip garbage at atom end */ + url_fskip(pb, left); } a.offset += a.size; @@ -571,7 +576,6 @@ static int mov_read_esds(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom) { AVStream *st = c->fc->streams[c->fc->nb_streams-1]; MOVStreamContext *sc = (MOVStreamContext *)st->priv_data; - int64_t start_pos = url_ftell(pb); int tag, len; /* Well, broken but suffisant for some MP4 streams */ @@ -606,8 +610,6 @@ static int mov_read_esds(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom) } } } - /* in any case, skip garbage */ - url_fskip(pb, atom.size - ((url_ftell(pb) - start_pos))); return 0; } @@ -801,7 +803,6 @@ static int mov_read_alac(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom) static int mov_read_wave(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom) { - offset_t start_pos = url_ftell(pb); AVStream *st = c->fc->streams[c->fc->nb_streams-1]; if((uint64_t)atom.size > (1<<30)) @@ -819,10 +820,8 @@ static int mov_read_wave(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom) url_fskip(pb, atom.size); } else if (atom.size > 8) { /* to read frma, esds atoms */ mov_read_default(c, pb, atom); - } else if (atom.size > 0) + } else url_fskip(pb, atom.size); - /* in any case, skip garbage */ - url_fskip(pb, atom.size - ((url_ftell(pb) - start_pos))); return 0; } |