diff --git a/RELEASENOTES.md b/RELEASENOTES.md index de912f643d..acb595a6d8 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -47,6 +47,9 @@ per sample. * Fix playback hanging on DASH multi-period streams when CEA-608 subtitles are enabled ([#1863](https://github.com/androidx/media/issues/1863)). + * Fix garbled CEA-608 subtitles in MP4 files that incorrectly mark every + sample as a sync sample + ([#1863](https://github.com/androidx/media/issues/1863)). * Metadata: * Image: * DRM: 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 104b54ce66..3f8dd29b53 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 @@ -1643,17 +1643,17 @@ public class FragmentedMp4Extractor implements Extractor { : 0); nalBuffer.setLimit(unescapedLength); - if (track.format.maxNumReorderSamples != Format.NO_VALUE - && track.format.maxNumReorderSamples != reorderingSeiMessageQueue.getMaxSize()) { + if (track.format.maxNumReorderSamples == Format.NO_VALUE) { + if (reorderingSeiMessageQueue.getMaxSize() != 0) { + reorderingSeiMessageQueue.setMaxSize(0); + } + } else if (reorderingSeiMessageQueue.getMaxSize() + != track.format.maxNumReorderSamples) { reorderingSeiMessageQueue.setMaxSize(track.format.maxNumReorderSamples); } reorderingSeiMessageQueue.add(sampleTimeUs, nalBuffer); - boolean sampleIsKeyFrameOrEndOfStream = - (trackBundle.getCurrentSampleFlags() - & (C.BUFFER_FLAG_KEY_FRAME | C.BUFFER_FLAG_END_OF_STREAM)) - != 0; - if (sampleIsKeyFrameOrEndOfStream) { + if ((trackBundle.getCurrentSampleFlags() & C.BUFFER_FLAG_END_OF_STREAM) != 0) { reorderingSeiMessageQueue.flush(); } } else {