summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Storsjö <martin@martin.st>2012-01-28 00:28:19 +0200
committerMartin Storsjö <martin@martin.st>2012-02-18 00:03:30 +0200
commit99a357f4c5091293bc42cb4bbd7bcae6a2624584 (patch)
tree0f71876aef540f949c99e30ae7faf2a91d5e40a2
parentaf468015d972c0dec5c8c37b2685ffa5cbe4ae87 (diff)
movenc: Write track durations with all bits set if duration is unknown
According to 14496-12, the duration should be all 1s if the duration is unknown. This is the case if writing a moov atom without any samples described in it (e.g. as in ismv files). Signed-off-by: Martin Storsjö <martin@martin.st>
-rw-r--r--libavformat/movenc.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/libavformat/movenc.c b/libavformat/movenc.c
index ace7b2f186..58d3c56e0a 100644
--- a/libavformat/movenc.c
+++ b/libavformat/movenc.c
@@ -1317,7 +1317,10 @@ static int mov_write_mdhd_tag(AVIOContext *pb, MOVTrack *track)
avio_wb32(pb, track->time); /* modification time */
}
avio_wb32(pb, track->timescale); /* time scale (sample rate for audio) */
- (version == 1) ? avio_wb64(pb, track->track_duration) : avio_wb32(pb, track->track_duration); /* duration */
+ if (!track->entry)
+ (version == 1) ? avio_wb64(pb, UINT64_C(0xffffffffffffffff)) : avio_wb32(pb, 0xffffffff);
+ else
+ (version == 1) ? avio_wb64(pb, track->track_duration) : avio_wb32(pb, track->track_duration); /* duration */
avio_wb16(pb, track->language); /* language */
avio_wb16(pb, 0); /* reserved (quality) */
@@ -1361,7 +1364,10 @@ static int mov_write_tkhd_tag(AVIOContext *pb, MOVTrack *track, AVStream *st)
}
avio_wb32(pb, track->track_id); /* track-id */
avio_wb32(pb, 0); /* reserved */
- (version == 1) ? avio_wb64(pb, duration) : avio_wb32(pb, duration);
+ if (!track->entry)
+ (version == 1) ? avio_wb64(pb, UINT64_C(0xffffffffffffffff)) : avio_wb32(pb, 0xffffffff);
+ else
+ (version == 1) ? avio_wb64(pb, duration) : avio_wb32(pb, duration);
avio_wb32(pb, 0); /* reserved */
avio_wb32(pb, 0); /* reserved */