diff options
author | Baptiste Coudurier <baptiste.coudurier@gmail.com> | 2006-03-22 10:45:04 +0000 |
---|---|---|
committer | Baptiste Coudurier <baptiste.coudurier@gmail.com> | 2006-03-22 10:45:04 +0000 |
commit | 1175561e197bd29cbe5960dbdaf863488d6fdc3b (patch) | |
tree | 4a75414a9762606bb98d696e668e69ec46e244bf /libavformat/mov.c | |
parent | 68ca39b21ab56ae1101b39a4b3113bf3b337e191 (diff) | |
download | ffmpeg-1175561e197bd29cbe5960dbdaf863488d6fdc3b.tar.gz |
support 64bit date/duration
Originally committed as revision 5193 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat/mov.c')
-rw-r--r-- | libavformat/mov.c | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/libavformat/mov.c b/libavformat/mov.c index 8ba422ba7d..638245eb2c 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -693,16 +693,21 @@ static int mov_read_mdhd(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom) static int mov_read_mvhd(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom) { - get_byte(pb); /* version */ + int version = get_byte(pb); /* version */ get_byte(pb); get_byte(pb); get_byte(pb); /* flags */ - get_be32(pb); /* creation time */ - get_be32(pb); /* modification time */ + if (version == 1) { + get_be64(pb); + get_be64(pb); + } else { + get_be32(pb); /* creation time */ + get_be32(pb); /* modification time */ + } c->time_scale = get_be32(pb); /* time scale */ #ifdef DEBUG av_log(NULL, AV_LOG_DEBUG, "time scale = %i\n", c->time_scale); #endif - c->duration = get_be32(pb); /* duration */ + c->duration = (version == 1) ? get_be64(pb) : get_be32(pb); /* duration */ get_be32(pb); /* preferred scale */ get_be16(pb); /* preferred volume */ @@ -1335,10 +1340,11 @@ static int mov_read_trak(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom) static int mov_read_tkhd(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom) { AVStream *st; + int version; st = c->fc->streams[c->fc->nb_streams-1]; - get_byte(pb); /* version */ + version = get_byte(pb); /* version */ get_byte(pb); get_byte(pb); get_byte(pb); /* flags */ @@ -1349,12 +1355,17 @@ static int mov_read_tkhd(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom) MOV_TRACK_IN_POSTER 0x0008 */ - get_be32(pb); /* creation time */ - get_be32(pb); /* modification time */ + if (version == 1) { + get_be64(pb); + get_be64(pb); + } else { + get_be32(pb); /* creation time */ + get_be32(pb); /* modification time */ + } st->id = (int)get_be32(pb); /* track id (NOT 0 !)*/ get_be32(pb); /* reserved */ st->start_time = 0; /* check */ - get_be32(pb); /* highlevel (considering edits) duration in movie timebase */ + (version == 1) ? get_be64(pb) : get_be32(pb); /* highlevel (considering edits) duration in movie timebase */ get_be32(pb); /* reserved */ get_be32(pb); /* reserved */ |