From 00385bad0bfd04e185118baebd92b9ece5070dc8 Mon Sep 17 00:00:00 2001 From: nemosupremo Date: Tue, 14 Jun 2022 21:44:59 -0700 Subject: [PATCH] Writer: Set mvhd/tkhd/mdhd version to 1 if duration is greater than u32::MAX (#76) --- src/track.rs | 6 ++++++ src/writer.rs | 3 +++ 2 files changed, 9 insertions(+) diff --git a/src/track.rs b/src/track.rs index bedf67b..a88365f 100644 --- a/src/track.rs +++ b/src/track.rs @@ -724,8 +724,14 @@ impl Mp4TrackWriter { fn update_durations(&mut self, dur: u32, movie_timescale: u32) { self.trak.mdia.mdhd.duration += dur as u64; + if self.trak.mdia.mdhd.duration > (u32::MAX as u64) { + self.trak.mdia.mdhd.version = 1 + } self.trak.tkhd.duration += dur as u64 * movie_timescale as u64 / self.trak.mdia.mdhd.timescale as u64; + if self.trak.tkhd.duration > (u32::MAX as u64) { + self.trak.tkhd.version = 1 + } } pub(crate) fn write_sample( diff --git a/src/writer.rs b/src/writer.rs index 7953363..2a45ade 100644 --- a/src/writer.rs +++ b/src/writer.rs @@ -135,6 +135,9 @@ impl Mp4Writer { moov.mvhd.timescale = self.timescale; moov.mvhd.duration = self.duration; + if moov.mvhd.duration > (u32::MAX as u64) { + moov.mvhd.version = 1 + } moov.write_box(&mut self.writer)?; Ok(()) }