diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 9ff5ad06af..55c33006ca 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -73,6 +73,11 @@ * Improved frame rate calculation by using media duration from the `mdhd` box in `Mp4Extractor` and `FragmentedMp4Extractor` ([#1531](https://github.com/androidx/media/issues/1531)). + * Fix incorrect scaling of `media_time` in MP4 edit lists. While + `segment_duration` was already correctly scaled using the movie + timescale, `media_time` is now properly scaled using the track + timescale, as specified by the MP4 format standard + ([#1792](https://github.com/androidx/media/issues/1792)). * DataSource: * Audio: * Fix pop sounds that may occur during seeks. diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/FragmentedMp4Extractor.java b/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/FragmentedMp4Extractor.java index a3ef9643b3..18521ed7fd 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/FragmentedMp4Extractor.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/FragmentedMp4Extractor.java @@ -1149,12 +1149,12 @@ public class FragmentedMp4Extractor implements Extractor { if (track.editListDurations[0] == 0) { return true; } - long editListEndMediaTimeUs = + long editListDurationUs = Util.scaleLargeTimestamp( - track.editListDurations[0] + track.editListMediaTimes[0], - C.MICROS_PER_SECOND, - track.movieTimescale); - return editListEndMediaTimeUs >= track.durationUs; + track.editListDurations[0], C.MICROS_PER_SECOND, track.movieTimescale); + long editListMediaTimeUs = + Util.scaleLargeTimestamp(track.editListMediaTimes[0], C.MICROS_PER_SECOND, track.timescale); + return editListDurationUs + editListMediaTimeUs >= track.durationUs; } /**