summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBaptiste Coudurier <baptiste.coudurier@gmail.com>2006-03-22 10:45:04 +0000
committerBaptiste Coudurier <baptiste.coudurier@gmail.com>2006-03-22 10:45:04 +0000
commit1175561e197bd29cbe5960dbdaf863488d6fdc3b (patch)
tree4a75414a9762606bb98d696e668e69ec46e244bf
parent68ca39b21ab56ae1101b39a4b3113bf3b337e191 (diff)
support 64bit date/duration
Originally committed as revision 5193 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r--libavformat/mov.c27
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 */