From 0a75447785ad694629f08df1073507123eb8173e Mon Sep 17 00:00:00 2001 From: sheenachhabra Date: Fri, 6 Dec 2024 09:55:00 -0800 Subject: [PATCH] Rename terminologies as per the MP4-AT spec https://developer.android.com/media/platform/mp4-at-file-format PiperOrigin-RevId: 703531148 --- .../media3/container/MdtaMetadataEntry.java | 51 +++--- .../androidx/media3/container/Mp4Box.java | 2 +- .../androidx/media3/container/Mp4Util.java | 8 +- .../media3/extractor/mp4/Mp4Extractor.java | 130 ++++++++------- .../mp4/Mp4ExtractorNonParameterizedTest.java | 33 ++-- .../mp4/Mp4ExtractorParameterizedTest.java | 8 +- .../java/androidx/media3/muxer/Boxes.java | 16 +- .../java/androidx/media3/muxer/Mp4Muxer.java | 149 +++++++++--------- .../java/androidx/media3/muxer/Mp4Writer.java | 74 ++++----- .../java/androidx/media3/muxer/MuxerUtil.java | 72 +++++---- .../media3/muxer/Mp4MuxerEndToEndTest.java | 76 +++++---- ...ample.mp4_with_flag_read_auxiliary_tracks} | 0 ...mple_with_fake_auxiliary_tracks.mp4.0.dump | 50 ++++++ ...mple_with_fake_auxiliary_tracks.mp4.1.dump | 50 ++++++ ...mple_with_fake_auxiliary_tracks.mp4.2.dump | 50 ++++++ ...mple_with_fake_auxiliary_tracks.mp4.3.dump | 50 ++++++ ...ding_within_gop_sample_dependencies.0.dump | 50 ++++++ ...ding_within_gop_sample_dependencies.1.dump | 50 ++++++ ...ding_within_gop_sample_dependencies.2.dump | 50 ++++++ ...ding_within_gop_sample_dependencies.3.dump | 50 ++++++ ...op_sample_dependencies.unknown_length.dump | 50 ++++++ ...e_auxiliary_tracks.mp4.unknown_length.dump | 50 ++++++ ...racks.mp4_with_flag_read_auxiliary_tracks} | 4 +- ...aved_with_primary_video_tracks.mp4.0.dump} | 2 +- ...aved_with_primary_video_tracks.mp4.1.dump} | 2 +- ...aved_with_primary_video_tracks.mp4.2.dump} | 2 +- ...aved_with_primary_video_tracks.mp4.3.dump} | 2 +- ...ding_within_gop_sample_dependencies.0.dump | 50 ++++++ ...ding_within_gop_sample_dependencies.1.dump | 50 ++++++ ...ding_within_gop_sample_dependencies.2.dump | 50 ++++++ ...ding_within_gop_sample_dependencies.3.dump | 50 ++++++ ...op_sample_dependencies.unknown_length.dump | 50 ++++++ ...imary_video_tracks.mp4.unknown_length.dump | 50 ++++++ ...racks.mp4_with_flag_read_auxiliary_tracks} | 4 +- ...ding_within_gop_sample_dependencies.0.dump | 50 ------ ...ding_within_gop_sample_dependencies.1.dump | 50 ------ ...ding_within_gop_sample_dependencies.2.dump | 50 ------ ...ding_within_gop_sample_dependencies.3.dump | 50 ------ ...op_sample_dependencies.unknown_length.dump | 50 ------ ...table_video_tracks.mp4.unknown_length.dump | 50 ------ ...eaved_with_primary_video_tracks.mp4.0.dump | 50 ------ ...eaved_with_primary_video_tracks.mp4.1.dump | 50 ------ ...eaved_with_primary_video_tracks.mp4.2.dump | 50 ------ ...eaved_with_primary_video_tracks.mp4.3.dump | 50 ------ ...ding_within_gop_sample_dependencies.0.dump | 50 ------ ...ding_within_gop_sample_dependencies.1.dump | 50 ------ ...ding_within_gop_sample_dependencies.2.dump | 50 ------ ...ding_within_gop_sample_dependencies.3.dump | 50 ------ ...op_sample_dependencies.unknown_length.dump | 50 ------ ...imary_video_tracks.mp4.unknown_length.dump | 50 ------ ... => sample_with_fake_auxiliary_tracks.mp4} | Bin 800960 -> 800960 bytes ...interleaved_with_primary_video_tracks.mp4} | Bin 402385 -> 402382 bytes ...ump => mp4_with_auxiliary_tracks.mp4.dump} | 4 +- ...p4_with_auxiliary_tracks_in_axte.box.dump} | 30 ++-- ...iliary_track_samples_interleaved.mp4.dump} | 4 +- ...th_auxiliary_tracks_without_axte.box.dump} | 0 .../mp4_with_primary_tracks.mp4.dump | 2 +- ...xiliary_track_samples_interleaved.mp4.dump | 50 ++++++ ...ditable_track_samples_interleaved.mp4.dump | 50 ------ .../media3/test/utils/DumpableMp4Box.java | 2 +- 60 files changed, 1186 insertions(+), 1191 deletions(-) rename libraries/test_data/src/test/assets/extractordumps/mp4/{sample.mp4_with_flag_read_Editable_video_tracks => sample.mp4_with_flag_read_auxiliary_tracks} (100%) create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks.mp4.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks.mp4.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks.mp4.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks.mp4.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks.mp4.reading_within_gop_sample_dependencies.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks.mp4.reading_within_gop_sample_dependencies.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks.mp4.reading_within_gop_sample_dependencies.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks.mp4.reading_within_gop_sample_dependencies.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks.mp4.reading_within_gop_sample_dependencies.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks.mp4.unknown_length.dump rename libraries/test_data/src/test/assets/extractordumps/mp4/{sample_with_fake_editable_video_tracks.mp4_with_flag_read_Editable_video_tracks => sample_with_fake_auxiliary_tracks.mp4_with_flag_read_auxiliary_tracks} (82%) rename libraries/test_data/src/test/assets/extractordumps/mp4/{sample_with_fake_editable_video_tracks.mp4.0.dump => sample_with_fake_auxiliary_tracks_interleaved_with_primary_video_tracks.mp4.0.dump} (90%) rename libraries/test_data/src/test/assets/extractordumps/mp4/{sample_with_fake_editable_video_tracks.mp4.1.dump => sample_with_fake_auxiliary_tracks_interleaved_with_primary_video_tracks.mp4.1.dump} (90%) rename libraries/test_data/src/test/assets/extractordumps/mp4/{sample_with_fake_editable_video_tracks.mp4.2.dump => sample_with_fake_auxiliary_tracks_interleaved_with_primary_video_tracks.mp4.2.dump} (90%) rename libraries/test_data/src/test/assets/extractordumps/mp4/{sample_with_fake_editable_video_tracks.mp4.3.dump => sample_with_fake_auxiliary_tracks_interleaved_with_primary_video_tracks.mp4.3.dump} (90%) create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks_interleaved_with_primary_video_tracks.mp4.reading_within_gop_sample_dependencies.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks_interleaved_with_primary_video_tracks.mp4.reading_within_gop_sample_dependencies.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks_interleaved_with_primary_video_tracks.mp4.reading_within_gop_sample_dependencies.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks_interleaved_with_primary_video_tracks.mp4.reading_within_gop_sample_dependencies.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks_interleaved_with_primary_video_tracks.mp4.reading_within_gop_sample_dependencies.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks_interleaved_with_primary_video_tracks.mp4.unknown_length.dump rename libraries/test_data/src/test/assets/extractordumps/mp4/{sample_with_fake_editable_video_tracks_interleaved_with_primary_video_tracks.mp4_with_flag_read_Editable_video_tracks => sample_with_fake_auxiliary_tracks_interleaved_with_primary_video_tracks.mp4_with_flag_read_auxiliary_tracks} (82%) delete mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks.mp4.reading_within_gop_sample_dependencies.0.dump delete mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks.mp4.reading_within_gop_sample_dependencies.1.dump delete mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks.mp4.reading_within_gop_sample_dependencies.2.dump delete mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks.mp4.reading_within_gop_sample_dependencies.3.dump delete mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks.mp4.reading_within_gop_sample_dependencies.unknown_length.dump delete mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks.mp4.unknown_length.dump delete mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks_interleaved_with_primary_video_tracks.mp4.0.dump delete mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks_interleaved_with_primary_video_tracks.mp4.1.dump delete mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks_interleaved_with_primary_video_tracks.mp4.2.dump delete mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks_interleaved_with_primary_video_tracks.mp4.3.dump delete mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks_interleaved_with_primary_video_tracks.mp4.reading_within_gop_sample_dependencies.0.dump delete mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks_interleaved_with_primary_video_tracks.mp4.reading_within_gop_sample_dependencies.1.dump delete mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks_interleaved_with_primary_video_tracks.mp4.reading_within_gop_sample_dependencies.2.dump delete mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks_interleaved_with_primary_video_tracks.mp4.reading_within_gop_sample_dependencies.3.dump delete mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks_interleaved_with_primary_video_tracks.mp4.reading_within_gop_sample_dependencies.unknown_length.dump delete mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks_interleaved_with_primary_video_tracks.mp4.unknown_length.dump rename libraries/test_data/src/test/assets/media/mp4/{sample_with_fake_editable_video_tracks.mp4 => sample_with_fake_auxiliary_tracks.mp4} (99%) rename libraries/test_data/src/test/assets/media/mp4/{sample_with_fake_editable_video_tracks_interleaved_with_primary_video_tracks.mp4 => sample_with_fake_auxiliary_tracks_interleaved_with_primary_video_tracks.mp4} (99%) rename libraries/test_data/src/test/assets/muxerdumps/{mp4_with_editable_video_tracks.mp4.dump => mp4_with_auxiliary_tracks.mp4.dump} (82%) rename libraries/test_data/src/test/assets/muxerdumps/{mp4_with_editable_video_tracks_in_edvd.box.dump => mp4_with_auxiliary_tracks_in_axte.box.dump} (88%) rename libraries/test_data/src/test/assets/muxerdumps/{mp4_with_editable_video_tracks_when_editable_track_samples_interleaved.mp4.dump => mp4_with_auxiliary_tracks_when_auxiliary_track_samples_interleaved.mp4.dump} (82%) rename libraries/test_data/src/test/assets/muxerdumps/{mp4_with_editable_video_tracks_without_edvd.box.dump => mp4_with_auxiliary_tracks_without_axte.box.dump} (100%) create mode 100644 libraries/test_data/src/test/assets/muxerdumps/mp4_with_primary_tracks_when_auxiliary_track_samples_interleaved.mp4.dump delete mode 100644 libraries/test_data/src/test/assets/muxerdumps/mp4_with_primary_tracks_when_editable_track_samples_interleaved.mp4.dump diff --git a/libraries/container/src/main/java/androidx/media3/container/MdtaMetadataEntry.java b/libraries/container/src/main/java/androidx/media3/container/MdtaMetadataEntry.java index fb50d7bdc3..5474162ccf 100644 --- a/libraries/container/src/main/java/androidx/media3/container/MdtaMetadataEntry.java +++ b/libraries/container/src/main/java/androidx/media3/container/MdtaMetadataEntry.java @@ -42,24 +42,23 @@ public final class MdtaMetadataEntry implements Metadata.Entry { public static final String KEY_ANDROID_CAPTURE_FPS = "com.android.capture.fps"; // TODO: b/345219017 - Add depth/editing file format spec link after its published. - /** Key for editable tracks box (edvd) offset. */ - public static final String KEY_EDITABLE_TRACKS_OFFSET = "editable.tracks.offset"; + /** Key for auxiliary tracks extension box (axte) offset. */ + public static final String KEY_AUXILIARY_TRACKS_OFFSET = "auxiliary.tracks.offset"; - /** Key for editable tracks box (edvd) length. */ - public static final String KEY_EDITABLE_TRACKS_LENGTH = "editable.tracks.length"; + /** Key for auxiliary tracks extension box (axte) length. */ + public static final String KEY_AUXILIARY_TRACKS_LENGTH = "auxiliary.tracks.length"; - /** Key for editable tracks map. */ - public static final String KEY_EDITABLE_TRACKS_MAP = "editable.tracks.map"; + /** Key for auxiliary tracks map. */ + public static final String KEY_AUXILIARY_TRACKS_MAP = "auxiliary.tracks.map"; - /** Key for editable tracks samples location. */ - public static final String KEY_EDITABLE_TRACKS_SAMPLES_LOCATION = - "editable.tracks.samples.location"; + /** Key for whether auxiliary tracks samples are interleaved. */ + public static final String KEY_AUXILIARY_TRACKS_INTERLEAVED = "auxiliary.tracks.interleaved"; - /** The editable tracks samples are in edit data MP4. */ - public static final byte EDITABLE_TRACKS_SAMPLES_LOCATION_IN_EDIT_DATA_MP4 = 0; + /** The auxiliary tracks samples are not interleaved and are in the axte.mdat box. */ + public static final byte AUXILIARY_TRACKS_SAMPLES_NOT_INTERLEAVED = 0; - /** The editable tracks samples are interleaved with the primary tracks samples. */ - public static final byte EDITABLE_TRACKS_SAMPLES_LOCATION_INTERLEAVED = 1; + /** The auxiliary tracks samples are interleaved in the primary video track’s mdat box. */ + public static final byte AUXILIARY_TRACKS_SAMPLES_INTERLEAVED = 1; /** The default locale indicator which implies all speakers in all countries. */ public static final int DEFAULT_LOCALE_INDICATOR = 0; @@ -120,11 +119,11 @@ public final class MdtaMetadataEntry implements Metadata.Entry { } /** - * Returns the editable track types from the {@linkplain #KEY_EDITABLE_TRACKS_MAP editable tracks - * map} metadata. + * Returns the auxiliary track types from the {@linkplain #KEY_AUXILIARY_TRACKS_MAP auxiliary + * tracks map} metadata. */ - public List getEditableTrackTypesFromMap() { - checkState(key.equals(KEY_EDITABLE_TRACKS_MAP), "Metadata is not an editable tracks map"); + public List getAuxiliaryTrackTypesFromMap() { + checkState(key.equals(KEY_AUXILIARY_TRACKS_MAP), "Metadata is not an auxiliary tracks map"); // Value has 1 byte version, 1 byte track count, n bytes track types. int numberOfTracks = value[1]; List trackTypes = new ArrayList<>(); @@ -179,8 +178,8 @@ public final class MdtaMetadataEntry implements Metadata.Entry { formattedValue = String.valueOf(new ParsableByteArray(value).readUnsignedLongToLong()); break; case TYPE_INDICATOR_RESERVED: - if (key.equals(KEY_EDITABLE_TRACKS_MAP)) { - formattedValue = getFormattedValueForEditableTracksMap(getEditableTrackTypesFromMap()); + if (key.equals(KEY_AUXILIARY_TRACKS_MAP)) { + formattedValue = getFormattedValueForAuxiliaryTracksMap(getAuxiliaryTrackTypesFromMap()); break; } // fall through @@ -225,26 +224,26 @@ public final class MdtaMetadataEntry implements Metadata.Entry { case KEY_ANDROID_CAPTURE_FPS: checkArgument(typeIndicator == TYPE_INDICATOR_FLOAT32 && value.length == 4); break; - case KEY_EDITABLE_TRACKS_OFFSET: - case KEY_EDITABLE_TRACKS_LENGTH: + case KEY_AUXILIARY_TRACKS_OFFSET: + case KEY_AUXILIARY_TRACKS_LENGTH: checkArgument(typeIndicator == TYPE_INDICATOR_UNSIGNED_INT64 && value.length == 8); break; - case KEY_EDITABLE_TRACKS_MAP: + case KEY_AUXILIARY_TRACKS_MAP: checkArgument(typeIndicator == TYPE_INDICATOR_RESERVED); break; - case KEY_EDITABLE_TRACKS_SAMPLES_LOCATION: + case KEY_AUXILIARY_TRACKS_INTERLEAVED: checkArgument( typeIndicator == TYPE_INDICATOR_8_BIT_UNSIGNED_INT && value.length == 1 - && (value[0] == EDITABLE_TRACKS_SAMPLES_LOCATION_IN_EDIT_DATA_MP4 - || value[0] == EDITABLE_TRACKS_SAMPLES_LOCATION_INTERLEAVED)); + && (value[0] == AUXILIARY_TRACKS_SAMPLES_NOT_INTERLEAVED + || value[0] == AUXILIARY_TRACKS_SAMPLES_INTERLEAVED)); break; default: // Ignore custom keys. } } - private static String getFormattedValueForEditableTracksMap(List trackTypes) { + private static String getFormattedValueForAuxiliaryTracksMap(List trackTypes) { StringBuilder sb = new StringBuilder(); sb.append("track types = "); Joiner.on(',').appendTo(sb, trackTypes); diff --git a/libraries/container/src/main/java/androidx/media3/container/Mp4Box.java b/libraries/container/src/main/java/androidx/media3/container/Mp4Box.java index 76c11c5c82..9742307e5f 100644 --- a/libraries/container/src/main/java/androidx/media3/container/Mp4Box.java +++ b/libraries/container/src/main/java/androidx/media3/container/Mp4Box.java @@ -459,7 +459,7 @@ public abstract class Mp4Box { public static final int TYPE_iacb = 0x69616362; @SuppressWarnings("ConstantCaseForConstants") - public static final int TYPE_edvd = 0x65647664; + public static final int TYPE_axte = 0x61787465; public final int type; diff --git a/libraries/container/src/main/java/androidx/media3/container/Mp4Util.java b/libraries/container/src/main/java/androidx/media3/container/Mp4Util.java index 0ebcd1bb6a..e076d3ab21 100644 --- a/libraries/container/src/main/java/androidx/media3/container/Mp4Util.java +++ b/libraries/container/src/main/java/androidx/media3/container/Mp4Util.java @@ -21,7 +21,7 @@ import androidx.media3.common.util.UnstableApi; @UnstableApi public final class Mp4Util { /** The original video track without any depth based effects applied. */ - public static final int EDITABLE_TRACK_TYPE_SHARP = 0; + public static final int MP4_AT_AUXILIARY_TRACK_TYPE_SHARP = 0; /** * A linear encoded depth video track. @@ -29,7 +29,7 @@ public final class Mp4Util { *

See https://developer.android.com/static/media/camera/camera2/Dynamic-depth-v1.0.pdf for * linear depth encoding. */ - public static final int EDITABLE_TRACK_TYPE_DEPTH_LINEAR = 1; + public static final int MP4_AT_AUXILIARY_TRACK_TYPE_DEPTH_LINEAR = 1; /** * An inverse encoded depth video track. @@ -37,10 +37,10 @@ public final class Mp4Util { *

See https://developer.android.com/static/media/camera/camera2/Dynamic-depth-v1.0.pdf for * inverse depth encoding. */ - public static final int EDITABLE_TRACK_TYPE_DEPTH_INVERSE = 2; + public static final int MP4_AT_AUXILIARY_TRACK_TYPE_DEPTH_INVERSE = 2; /** A timed metadata of depth video track. */ - public static final int EDITABLE_TRACK_TYPE_DEPTH_METADATA = 3; + public static final int MP4_AT_AUXILIARY_TRACK_TYPE_DEPTH_METADATA = 3; private Mp4Util() {} } diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/Mp4Extractor.java b/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/Mp4Extractor.java index f0be73801c..4874977c3d 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/Mp4Extractor.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/Mp4Extractor.java @@ -23,11 +23,11 @@ import static androidx.media3.common.util.Assertions.checkNotNull; import static androidx.media3.common.util.Assertions.checkState; import static androidx.media3.common.util.Assertions.checkStateNotNull; import static androidx.media3.common.util.Util.castNonNull; -import static androidx.media3.container.MdtaMetadataEntry.EDITABLE_TRACKS_SAMPLES_LOCATION_IN_EDIT_DATA_MP4; -import static androidx.media3.container.Mp4Util.EDITABLE_TRACK_TYPE_DEPTH_INVERSE; -import static androidx.media3.container.Mp4Util.EDITABLE_TRACK_TYPE_DEPTH_LINEAR; -import static androidx.media3.container.Mp4Util.EDITABLE_TRACK_TYPE_DEPTH_METADATA; -import static androidx.media3.container.Mp4Util.EDITABLE_TRACK_TYPE_SHARP; +import static androidx.media3.container.MdtaMetadataEntry.AUXILIARY_TRACKS_SAMPLES_NOT_INTERLEAVED; +import static androidx.media3.container.Mp4Util.MP4_AT_AUXILIARY_TRACK_TYPE_DEPTH_INVERSE; +import static androidx.media3.container.Mp4Util.MP4_AT_AUXILIARY_TRACK_TYPE_DEPTH_LINEAR; +import static androidx.media3.container.Mp4Util.MP4_AT_AUXILIARY_TRACK_TYPE_DEPTH_METADATA; +import static androidx.media3.container.Mp4Util.MP4_AT_AUXILIARY_TRACK_TYPE_SHARP; import static androidx.media3.extractor.mp4.BoxParser.parseTraks; import static androidx.media3.extractor.mp4.MetadataUtil.findMdtaMetadataEntryWithKey; import static androidx.media3.extractor.mp4.MimeTypeResolver.getContainerMimeType; @@ -110,7 +110,7 @@ public final class Mp4Extractor implements Extractor, SeekMap { FLAG_MARK_FIRST_VIDEO_TRACK_WITH_MAIN_ROLE, FLAG_EMIT_RAW_SUBTITLE_DATA, FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES, - FLAG_READ_EDITABLE_VIDEO_TRACKS + FLAG_READ_AUXILIARY_TRACKS }) public @interface Flags {} @@ -162,15 +162,15 @@ public final class Mp4Extractor implements Extractor, SeekMap { // TODO: b/345219017 - Add depth/editing file format spec link after its published. /** - * Flag to extract the editable video tracks. + * Flag to extract the auxiliary tracks. * - *

Either primary video tracks or editable video tracks (but not both) will be extracted based - * on the flag. + *

Either primary video tracks or auxiliary tracks (but not both) will be extracted based on + * the flag. * - *

If the flag is set but the editable video tracks are not present, then it fallbacks to - * extract primary tracks instead. + *

If the flag is set but the auxiliary tracks are not present, then it fallbacks to extract + * primary tracks instead. */ - public static final int FLAG_READ_EDITABLE_VIDEO_TRACKS = 1 << 6; + public static final int FLAG_READ_AUXILIARY_TRACKS = 1 << 6; /** * @deprecated Use {@link #newFactory(SubtitleParser.Factory)} instead. @@ -248,12 +248,12 @@ public final class Mp4Extractor implements Extractor, SeekMap { private int sampleCurrentNalBytesRemaining; private boolean isSampleDependedOn; private boolean seenFtypAtom; - private boolean seekToEdvdAtom; - private long edvdAtomOffset; - private boolean readingEditableVideoTracks; + private boolean seekToAxteAtom; + private long axteAtomOffset; + private boolean readingAuxiliaryTracks; - // Used when editable video samples are in the edit data MP4 (inside edvd atom). - private long sampleOffsetForEditableVideoTracks; + // Used when auxiliary tracks samples are in the auxiliary tracks MP4 (inside axte atom). + private long sampleOffsetForAuxiliaryTracks; // Extractor outputs. private ExtractorOutput extractorOutput; @@ -609,11 +609,11 @@ public final class Mp4Extractor implements Extractor, SeekMap { } } processAtomEnded(atomEndPosition); - if (seekToEdvdAtom) { - readingEditableVideoTracks = true; - positionHolder.position = edvdAtomOffset; + if (seekToAxteAtom) { + readingAuxiliaryTracks = true; + positionHolder.position = axteAtomOffset; seekRequired = true; - seekToEdvdAtom = false; + seekToAxteAtom = false; } return seekRequired && parserState != STATE_READING_SAMPLE; } @@ -634,7 +634,7 @@ public final class Mp4Extractor implements Extractor, SeekMap { // We've reached the end of the moov atom. Process it and prepare to read samples. processMoovAtom(containerAtom); containerAtoms.clear(); - if (!seekToEdvdAtom) { + if (!seekToAxteAtom) { parserState = STATE_READING_SAMPLE; } } else if (!containerAtoms.isEmpty()) { @@ -649,23 +649,22 @@ public final class Mp4Extractor implements Extractor, SeekMap { /** * Processes moov atom and updates the stored track metadata. * - *

The processing is aborted if the edvd.moov atom needs to be processed instead. + *

The processing is aborted if the axte.moov atom needs to be processed instead. */ private void processMoovAtom(ContainerBox moov) throws ParserException { - // Process metadata first to determine whether to abort processing and seek to the edvd atom. + // Process metadata first to determine whether to abort processing and seek to the axte atom. @Nullable Metadata mdtaMetadata = null; @Nullable Mp4Box.ContainerBox meta = moov.getContainerBoxOfType(Mp4Box.TYPE_meta); - List<@C.AuxiliaryTrackType Integer> auxiliaryTrackTypesForEditableVideoTracks = - new ArrayList<>(); + List<@C.AuxiliaryTrackType Integer> auxiliaryTrackTypesForAuxiliaryTracks = new ArrayList<>(); if (meta != null) { mdtaMetadata = BoxParser.parseMdtaFromMeta(meta); - if (readingEditableVideoTracks) { + if (readingAuxiliaryTracks) { checkStateNotNull(mdtaMetadata); - maybeSetDefaultSampleOffsetForEditableVideoTracks(mdtaMetadata); - auxiliaryTrackTypesForEditableVideoTracks = - getAuxiliaryTrackTypesForEditableVideoTracks(mdtaMetadata); - } else if (shouldSeekToEdvdAtom(mdtaMetadata)) { - seekToEdvdAtom = true; + maybeSetDefaultSampleOffsetForAuxiliaryTracks(mdtaMetadata); + auxiliaryTrackTypesForAuxiliaryTracks = + getAuxiliaryTrackTypesForAuxiliaryTracks(mdtaMetadata); + } else if (shouldSeekToAxteAtom(mdtaMetadata)) { + seekToAxteAtom = true; return; } } @@ -698,14 +697,14 @@ public final class Mp4Extractor implements Extractor, SeekMap { isQuickTime, /* modifyTrackFunction= */ track -> track); - if (readingEditableVideoTracks) { + if (readingAuxiliaryTracks) { checkState( - auxiliaryTrackTypesForEditableVideoTracks.size() == trackSampleTables.size(), + auxiliaryTrackTypesForAuxiliaryTracks.size() == trackSampleTables.size(), String.format( Locale.US, "The number of auxiliary track types from metadata (%d) is not same as the number of" - + " editable video tracks (%d)", - auxiliaryTrackTypesForEditableVideoTracks.size(), + + " auxiliary tracks (%d)", + auxiliaryTrackTypesForAuxiliaryTracks.size(), trackSampleTables.size())); } int trackIndex = 0; @@ -748,9 +747,9 @@ public final class Mp4Extractor implements Extractor, SeekMap { float frameRate = trackSampleTable.sampleCount / (trackDurationUs / 1000000f); formatBuilder.setFrameRate(frameRate); } - if (readingEditableVideoTracks) { + if (readingAuxiliaryTracks) { roleFlags |= C.ROLE_FLAG_AUXILIARY; - formatBuilder.setAuxiliaryTrackType(auxiliaryTrackTypesForEditableVideoTracks.get(i)); + formatBuilder.setAuxiliaryTrackType(auxiliaryTrackTypesForAuxiliaryTracks.get(i)); } formatBuilder.setRoleFlags(roleFlags); } @@ -780,18 +779,18 @@ public final class Mp4Extractor implements Extractor, SeekMap { extractorOutput.seekMap(this); } - private boolean shouldSeekToEdvdAtom(@Nullable Metadata mdtaMetadata) { + private boolean shouldSeekToAxteAtom(@Nullable Metadata mdtaMetadata) { if (mdtaMetadata == null) { return false; } - if ((flags & FLAG_READ_EDITABLE_VIDEO_TRACKS) != 0) { + if ((flags & FLAG_READ_AUXILIARY_TRACKS) != 0) { @Nullable - MdtaMetadataEntry edvdAtomOffsetMetadata = - findMdtaMetadataEntryWithKey(mdtaMetadata, MdtaMetadataEntry.KEY_EDITABLE_TRACKS_OFFSET); - if (edvdAtomOffsetMetadata != null) { - long offset = new ParsableByteArray(edvdAtomOffsetMetadata.value).readUnsignedLongToLong(); + MdtaMetadataEntry axteAtomOffsetMetadata = + findMdtaMetadataEntryWithKey(mdtaMetadata, MdtaMetadataEntry.KEY_AUXILIARY_TRACKS_OFFSET); + if (axteAtomOffsetMetadata != null) { + long offset = new ParsableByteArray(axteAtomOffsetMetadata.value).readUnsignedLongToLong(); if (offset > 0) { - edvdAtomOffset = offset; + axteAtomOffset = offset; return true; } } @@ -800,42 +799,41 @@ public final class Mp4Extractor implements Extractor, SeekMap { } /** - * Sets the sample offset for the editable video tracks, if the samples are in the edit data MP4 - * (inside edvd atom). + * Sets the sample offset for the auxiliary tracks, if the samples are in the auxiliary tracks MP4 + * (inside axte atom). */ - private void maybeSetDefaultSampleOffsetForEditableVideoTracks(Metadata metadata) { + private void maybeSetDefaultSampleOffsetForAuxiliaryTracks(Metadata metadata) { @Nullable - MdtaMetadataEntry sampleLocationMetadata = - findMdtaMetadataEntryWithKey( - metadata, MdtaMetadataEntry.KEY_EDITABLE_TRACKS_SAMPLES_LOCATION); - if (sampleLocationMetadata != null) { - if (sampleLocationMetadata.value[0] == EDITABLE_TRACKS_SAMPLES_LOCATION_IN_EDIT_DATA_MP4) { - sampleOffsetForEditableVideoTracks = edvdAtomOffset + 16; // 16 bits for edvd atom header + MdtaMetadataEntry samplesInterleavedMetadata = + findMdtaMetadataEntryWithKey(metadata, MdtaMetadataEntry.KEY_AUXILIARY_TRACKS_INTERLEAVED); + if (samplesInterleavedMetadata != null) { + if (samplesInterleavedMetadata.value[0] == AUXILIARY_TRACKS_SAMPLES_NOT_INTERLEAVED) { + sampleOffsetForAuxiliaryTracks = axteAtomOffset + 16; // 16 bits for axte atom header } } } - private List<@C.AuxiliaryTrackType Integer> getAuxiliaryTrackTypesForEditableVideoTracks( + private List<@C.AuxiliaryTrackType Integer> getAuxiliaryTrackTypesForAuxiliaryTracks( Metadata metadata) { MdtaMetadataEntry trackTypesMetadata = checkStateNotNull( - findMdtaMetadataEntryWithKey(metadata, MdtaMetadataEntry.KEY_EDITABLE_TRACKS_MAP)); - List editableVideoTrackTypes = trackTypesMetadata.getEditableTrackTypesFromMap(); + findMdtaMetadataEntryWithKey(metadata, MdtaMetadataEntry.KEY_AUXILIARY_TRACKS_MAP)); + List auxiliaryTrackTypesFromMap = trackTypesMetadata.getAuxiliaryTrackTypesFromMap(); List<@C.AuxiliaryTrackType Integer> auxiliaryTrackTypes = - new ArrayList<>(editableVideoTrackTypes.size()); - for (int i = 0; i < editableVideoTrackTypes.size(); i++) { + new ArrayList<>(auxiliaryTrackTypesFromMap.size()); + for (int i = 0; i < auxiliaryTrackTypesFromMap.size(); i++) { @C.AuxiliaryTrackType int auxiliaryTrackType; - switch (editableVideoTrackTypes.get(i)) { - case EDITABLE_TRACK_TYPE_SHARP: + switch (auxiliaryTrackTypesFromMap.get(i)) { + case MP4_AT_AUXILIARY_TRACK_TYPE_SHARP: auxiliaryTrackType = AUXILIARY_TRACK_TYPE_ORIGINAL; break; - case EDITABLE_TRACK_TYPE_DEPTH_LINEAR: + case MP4_AT_AUXILIARY_TRACK_TYPE_DEPTH_LINEAR: auxiliaryTrackType = AUXILIARY_TRACK_TYPE_DEPTH_LINEAR; break; - case EDITABLE_TRACK_TYPE_DEPTH_INVERSE: + case MP4_AT_AUXILIARY_TRACK_TYPE_DEPTH_INVERSE: auxiliaryTrackType = AUXILIARY_TRACK_TYPE_DEPTH_INVERSE; break; - case EDITABLE_TRACK_TYPE_DEPTH_METADATA: + case MP4_AT_AUXILIARY_TRACK_TYPE_DEPTH_METADATA: auxiliaryTrackType = C.AUXILIARY_TRACK_TYPE_DEPTH_METADATA; break; default: @@ -872,7 +870,7 @@ public final class Mp4Extractor implements Extractor, SeekMap { Mp4Track track = tracks[sampleTrackIndex]; TrackOutput trackOutput = track.trackOutput; int sampleIndex = track.sampleIndex; - long position = track.sampleTable.offsets[sampleIndex] + sampleOffsetForEditableVideoTracks; + long position = track.sampleTable.offsets[sampleIndex] + sampleOffsetForAuxiliaryTracks; int sampleSize = track.sampleTable.sizes[sampleIndex]; @Nullable TrueHdSampleRechunker trueHdSampleRechunker = track.trueHdSampleRechunker; long skipAmount = position - inputPosition + sampleBytesRead; @@ -1226,7 +1224,7 @@ public final class Mp4Extractor implements Extractor, SeekMap { || atom == Mp4Box.TYPE_stbl || atom == Mp4Box.TYPE_edts || atom == Mp4Box.TYPE_meta - || atom == Mp4Box.TYPE_edvd; + || atom == Mp4Box.TYPE_axte; } private static final class Mp4Track { diff --git a/libraries/extractor/src/test/java/androidx/media3/extractor/mp4/Mp4ExtractorNonParameterizedTest.java b/libraries/extractor/src/test/java/androidx/media3/extractor/mp4/Mp4ExtractorNonParameterizedTest.java index 2e72c39705..d9d626817a 100644 --- a/libraries/extractor/src/test/java/androidx/media3/extractor/mp4/Mp4ExtractorNonParameterizedTest.java +++ b/libraries/extractor/src/test/java/androidx/media3/extractor/mp4/Mp4ExtractorNonParameterizedTest.java @@ -107,54 +107,53 @@ public final class Mp4ExtractorNonParameterizedTest { @Test public void - extract_fileHavingNoEditableVideoTracksWithReadEditableVideoTracksFlag_extractsPrimaryVideoTracks() + extract_fileHavingNoAuxiliaryTracksWithReadAuxiliaryTracksFlag_extractsPrimaryVideoTracks() throws Exception { Context context = ApplicationProvider.getApplicationContext(); String inputFilePath = "media/mp4/sample.mp4"; Mp4Extractor mp4Extractor = new Mp4Extractor( - new DefaultSubtitleParserFactory(), Mp4Extractor.FLAG_READ_EDITABLE_VIDEO_TRACKS); + new DefaultSubtitleParserFactory(), Mp4Extractor.FLAG_READ_AUXILIARY_TRACKS); FakeExtractorOutput primaryTracksOutput = TestUtil.extractAllSamplesFromFile(mp4Extractor, context, inputFilePath); - String dumpFilePath = getDumpFilePath(inputFilePath, "_with_flag_read_Editable_video_tracks"); + String dumpFilePath = getDumpFilePath(inputFilePath, "_with_flag_read_auxiliary_tracks"); DumpFileAsserts.assertOutput(context, primaryTracksOutput, dumpFilePath); } @Test - public void - extract_fileHavingEditableVideoTracksWithReadEditableVideoTracksFlag_extractsEditableVideoTracks() - throws Exception { + public void extract_fileHavingAuxiliaryTracksWithReadAuxiliaryTracksFlag_extractsAuxiliaryTracks() + throws Exception { Context context = ApplicationProvider.getApplicationContext(); - String inputFilePath = "media/mp4/sample_with_fake_editable_video_tracks.mp4"; + String inputFilePath = "media/mp4/sample_with_fake_auxiliary_tracks.mp4"; Mp4Extractor mp4Extractor = new Mp4Extractor( - new DefaultSubtitleParserFactory(), Mp4Extractor.FLAG_READ_EDITABLE_VIDEO_TRACKS); + new DefaultSubtitleParserFactory(), Mp4Extractor.FLAG_READ_AUXILIARY_TRACKS); - FakeExtractorOutput editableTracksOutput = + FakeExtractorOutput auxiliaryTracksOutput = TestUtil.extractAllSamplesFromFile(mp4Extractor, context, inputFilePath); - String dumpFilePath = getDumpFilePath(inputFilePath, "_with_flag_read_Editable_video_tracks"); - DumpFileAsserts.assertOutput(context, editableTracksOutput, dumpFilePath); + String dumpFilePath = getDumpFilePath(inputFilePath, "_with_flag_read_auxiliary_tracks"); + DumpFileAsserts.assertOutput(context, auxiliaryTracksOutput, dumpFilePath); } @Test public void - extract_fileHavingEditableVideoTracksInterleavedWithPrimaryVideoTracksWithReadEditableVideoTracksFlag_extractsEditableVideoTracks() + extract_fileHavingAuxiliaryTracksInterleavedWithPrimaryVideoTracksWithReadAuxiliaryTracksFlag_extractsAuxiliaryTracks() throws Exception { Context context = ApplicationProvider.getApplicationContext(); String inputFilePath = - "media/mp4/sample_with_fake_editable_video_tracks_interleaved_with_primary_video_tracks.mp4"; + "media/mp4/sample_with_fake_auxiliary_tracks_interleaved_with_primary_video_tracks.mp4"; Mp4Extractor mp4Extractor = new Mp4Extractor( - new DefaultSubtitleParserFactory(), Mp4Extractor.FLAG_READ_EDITABLE_VIDEO_TRACKS); + new DefaultSubtitleParserFactory(), Mp4Extractor.FLAG_READ_AUXILIARY_TRACKS); - FakeExtractorOutput editableTracksOutput = + FakeExtractorOutput auxiliaryTracksOutput = TestUtil.extractAllSamplesFromFile(mp4Extractor, context, inputFilePath); - String dumpFilePath = getDumpFilePath(inputFilePath, "_with_flag_read_Editable_video_tracks"); - DumpFileAsserts.assertOutput(context, editableTracksOutput, dumpFilePath); + String dumpFilePath = getDumpFilePath(inputFilePath, "_with_flag_read_auxiliary_tracks"); + DumpFileAsserts.assertOutput(context, auxiliaryTracksOutput, dumpFilePath); } private static String getDumpFilePath(String inputFilePath, String suffix) { diff --git a/libraries/extractor/src/test/java/androidx/media3/extractor/mp4/Mp4ExtractorParameterizedTest.java b/libraries/extractor/src/test/java/androidx/media3/extractor/mp4/Mp4ExtractorParameterizedTest.java index 8f08526018..3a24611639 100644 --- a/libraries/extractor/src/test/java/androidx/media3/extractor/mp4/Mp4ExtractorParameterizedTest.java +++ b/libraries/extractor/src/test/java/androidx/media3/extractor/mp4/Mp4ExtractorParameterizedTest.java @@ -229,14 +229,14 @@ public final class Mp4ExtractorParameterizedTest { } @Test - public void mp4WithEditableVideoTracks() throws Exception { - assertExtractorBehavior("media/mp4/sample_with_fake_editable_video_tracks.mp4"); + public void mp4WithAuxiliaryTracks() throws Exception { + assertExtractorBehavior("media/mp4/sample_with_fake_auxiliary_tracks.mp4"); } @Test - public void mp4WithEditableVideoTracksInterleavedWithPrimaryVideoTracks() throws Exception { + public void mp4WithAuxiliaryTracksInterleavedWithPrimaryVideoTracks() throws Exception { assertExtractorBehavior( - "media/mp4/sample_with_fake_editable_video_tracks_interleaved_with_primary_video_tracks.mp4"); + "media/mp4/sample_with_fake_auxiliary_tracks_interleaved_with_primary_video_tracks.mp4"); } private void assertExtractorBehavior(String file) throws IOException { diff --git a/libraries/muxer/src/main/java/androidx/media3/muxer/Boxes.java b/libraries/muxer/src/main/java/androidx/media3/muxer/Boxes.java index beebe65f85..cc8201a5d5 100644 --- a/libraries/muxer/src/main/java/androidx/media3/muxer/Boxes.java +++ b/libraries/muxer/src/main/java/androidx/media3/muxer/Boxes.java @@ -1279,14 +1279,14 @@ import org.checkerframework.checker.nullness.qual.PolyNull; return BoxUtils.wrapIntoBox("trex", contents); } - /** Returns the edvd box header. */ - public static ByteBuffer getEdvdBoxHeader(long payloadSize) { - ByteBuffer edvdBoxHeader = ByteBuffer.allocate(LARGE_SIZE_BOX_HEADER_SIZE); - edvdBoxHeader.putInt(1); // indicating a 64-bit length field - edvdBoxHeader.put(Util.getUtf8Bytes("edvd")); - edvdBoxHeader.putLong(LARGE_SIZE_BOX_HEADER_SIZE + payloadSize); // the actual length - edvdBoxHeader.flip(); - return edvdBoxHeader; + /** Returns the axte box header. */ + public static ByteBuffer getAxteBoxHeader(long payloadSize) { + ByteBuffer axteBoxHeader = ByteBuffer.allocate(LARGE_SIZE_BOX_HEADER_SIZE); + axteBoxHeader.putInt(1); // indicating a 64-bit length field + axteBoxHeader.put(Util.getUtf8Bytes("axte")); + axteBoxHeader.putLong(LARGE_SIZE_BOX_HEADER_SIZE + payloadSize); // the actual length + axteBoxHeader.flip(); + return axteBoxHeader; } /** Returns an ISO 639-2/T (ISO3) language code for the IETF BCP 47 language tag. */ diff --git a/libraries/muxer/src/main/java/androidx/media3/muxer/Mp4Muxer.java b/libraries/muxer/src/main/java/androidx/media3/muxer/Mp4Muxer.java index 4e5af47d52..71b13fccb3 100644 --- a/libraries/muxer/src/main/java/androidx/media3/muxer/Mp4Muxer.java +++ b/libraries/muxer/src/main/java/androidx/media3/muxer/Mp4Muxer.java @@ -19,12 +19,12 @@ import static androidx.media3.common.util.Assertions.checkArgument; import static androidx.media3.common.util.Assertions.checkNotNull; import static androidx.media3.common.util.Assertions.checkState; import static androidx.media3.muxer.Boxes.LARGE_SIZE_BOX_HEADER_SIZE; -import static androidx.media3.muxer.Boxes.getEdvdBoxHeader; -import static androidx.media3.muxer.MuxerUtil.getEditableTracksLengthMetadata; -import static androidx.media3.muxer.MuxerUtil.getEditableTracksOffsetMetadata; -import static androidx.media3.muxer.MuxerUtil.isEditableVideoTrack; +import static androidx.media3.muxer.Boxes.getAxteBoxHeader; +import static androidx.media3.muxer.MuxerUtil.getAuxiliaryTracksLengthMetadata; +import static androidx.media3.muxer.MuxerUtil.getAuxiliaryTracksOffsetMetadata; +import static androidx.media3.muxer.MuxerUtil.isAuxiliaryTrack; import static androidx.media3.muxer.MuxerUtil.isMetadataSupported; -import static androidx.media3.muxer.MuxerUtil.populateEditableVideoTracksMetadata; +import static androidx.media3.muxer.MuxerUtil.populateAuxiliaryTracksMetadata; import static java.lang.annotation.ElementType.TYPE_USE; import android.media.MediaCodec; @@ -107,8 +107,8 @@ import org.checkerframework.checker.nullness.qual.EnsuresNonNull; */ @UnstableApi public final class Mp4Muxer implements Muxer { - /** Parameters for {@link #FILE_FORMAT_EDITABLE_VIDEO}. */ - public static final class EditableVideoParameters { + /** Parameters for {@link #FILE_FORMAT_MP4_AT}. */ + public static final class Mp4AtFileParameters { /** Provides temporary cache files to be used by the muxer. */ public interface CacheFileProvider { @@ -129,12 +129,12 @@ public final class Mp4Muxer implements Muxer { /** * Creates an instance. * - * @param shouldInterleaveSamples Whether to interleave editable video track samples with - * primary track samples. + * @param shouldInterleaveSamples Whether to interleave auxiliary track samples with primary + * track samples. * @param cacheFileProvider A {@link CacheFileProvider}. Required only when {@code * shouldInterleaveSamples} is set to {@code false}, can be {@code null} otherwise. */ - public EditableVideoParameters( + public Mp4AtFileParameters( boolean shouldInterleaveSamples, @Nullable CacheFileProvider cacheFileProvider) { checkArgument(shouldInterleaveSamples || cacheFileProvider != null); this.shouldInterleaveSamples = shouldInterleaveSamples; @@ -177,7 +177,7 @@ public final class Mp4Muxer implements Muxer { @Documented @Retention(RetentionPolicy.SOURCE) @Target(TYPE_USE) - @IntDef({FILE_FORMAT_DEFAULT, FILE_FORMAT_EDITABLE_VIDEO}) + @IntDef({FILE_FORMAT_DEFAULT, FILE_FORMAT_MP4_AT}) public @interface FileFormat {} /** The default MP4 format. */ @@ -185,13 +185,13 @@ public final class Mp4Muxer implements Muxer { // TODO: b/345219017 - Add spec details. /** - * The editable video file format. In this file format all the tracks with {@linkplain - * Format#auxiliaryTrackType} set to {@link C#AUXILIARY_TRACK_TYPE_ORIGINAL}, {@link - * C#AUXILIARY_TRACK_TYPE_DEPTH_LINEAR}, {@link C#AUXILIARY_TRACK_TYPE_DEPTH_INVERSE}, or {@link - * C#AUXILIARY_TRACK_TYPE_DEPTH_METADATA} are written in the MP4 edit data (edvd box). The rest of - * the tracks are written as usual. + * The MP4-AT (MP4 With Auxiliary Tracks Extension) file format. In this file format all the + * tracks with {@linkplain Format#auxiliaryTrackType} set to {@link + * C#AUXILIARY_TRACK_TYPE_ORIGINAL}, {@link C#AUXILIARY_TRACK_TYPE_DEPTH_LINEAR}, {@link + * C#AUXILIARY_TRACK_TYPE_DEPTH_INVERSE}, or {@link C#AUXILIARY_TRACK_TYPE_DEPTH_METADATA} are + * written in the Auxiliary Tracks MP4 (axte box). The rest of the tracks are written as usual. */ - public static final int FILE_FORMAT_EDITABLE_VIDEO = 1; + public static final int FILE_FORMAT_MP4_AT = 1; /** A builder for {@link Mp4Muxer} instances. */ public static final class Builder { @@ -203,7 +203,7 @@ public final class Mp4Muxer implements Muxer { private boolean sampleBatchingEnabled; private boolean attemptStreamableOutputEnabled; private @FileFormat int outputFileFormat; - @Nullable private EditableVideoParameters editableVideoParameters; + @Nullable private Mp4AtFileParameters mp4AtFileParameters; /** * Creates a {@link Builder} instance with default values. @@ -297,8 +297,8 @@ public final class Mp4Muxer implements Muxer { * *

The default value is {@link #FILE_FORMAT_DEFAULT}. * - *

For {@link #FILE_FORMAT_EDITABLE_VIDEO}, {@link EditableVideoParameters} must also be - * {@linkplain #setEditableVideoParameters(EditableVideoParameters)} set}. + *

For {@link #FILE_FORMAT_MP4_AT}, {@link Mp4AtFileParameters} must also be {@linkplain + * #setMp4AtFileParameters(Mp4AtFileParameters)} set}. */ @CanIgnoreReturnValue public Mp4Muxer.Builder setOutputFileFormat(@FileFormat int fileFormat) { @@ -306,21 +306,20 @@ public final class Mp4Muxer implements Muxer { return this; } - /** Sets the {@link EditableVideoParameters}. */ + /** Sets the {@link Mp4AtFileParameters}. */ @CanIgnoreReturnValue - public Mp4Muxer.Builder setEditableVideoParameters( - EditableVideoParameters editableVideoParameters) { - this.editableVideoParameters = editableVideoParameters; + public Mp4Muxer.Builder setMp4AtFileParameters(Mp4AtFileParameters mp4AtFileParameters) { + this.mp4AtFileParameters = mp4AtFileParameters; return this; } /** Builds an {@link Mp4Muxer} instance. */ public Mp4Muxer build() { checkArgument( - outputFileFormat == FILE_FORMAT_EDITABLE_VIDEO - ? editableVideoParameters != null - : editableVideoParameters == null, - "EditablevideoParameters must be set for FILE_FORMAT_EDITABLE_VIDEO"); + outputFileFormat == FILE_FORMAT_MP4_AT + ? mp4AtFileParameters != null + : mp4AtFileParameters == null, + "Mp4AtFileParameters must be set for FILE_FORMAT_MP4_AT"); return new Mp4Muxer( outputStream, lastSampleDurationBehavior, @@ -329,7 +328,7 @@ public final class Mp4Muxer implements Muxer { sampleBatchingEnabled, attemptStreamableOutputEnabled, outputFileFormat, - editableVideoParameters); + mp4AtFileParameters); } } @@ -343,15 +342,15 @@ public final class Mp4Muxer implements Muxer { private final boolean sampleBatchingEnabled; private final boolean attemptStreamableOutputEnabled; private final @FileFormat int outputFileFormat; - @Nullable private final EditableVideoParameters editableVideoParameters; + @Nullable private final Mp4AtFileParameters mp4AtFileParameters; private final MetadataCollector metadataCollector; private final Mp4Writer mp4Writer; - private final List editableVideoTracks; + private final List auxiliaryTracks; @Nullable private String cacheFilePath; @Nullable private FileOutputStream cacheFileOutputStream; - @Nullable private MetadataCollector editableVideoMetadataCollector; - @Nullable private Mp4Writer editableVideoMp4Writer; + @Nullable private MetadataCollector auxiliaryTracksMetadataCollector; + @Nullable private Mp4Writer auxiliaryTracksMp4Writer; private Mp4Muxer( FileOutputStream outputStream, @@ -361,7 +360,7 @@ public final class Mp4Muxer implements Muxer { boolean sampleBatchingEnabled, boolean attemptStreamableOutputEnabled, @FileFormat int outputFileFormat, - @Nullable EditableVideoParameters editableVideoParameters) { + @Nullable Mp4AtFileParameters mp4AtFileParameters) { this.outputStream = outputStream; outputChannel = outputStream.getChannel(); this.lastSampleDurationBehavior = lastFrameDurationBehavior; @@ -370,7 +369,7 @@ public final class Mp4Muxer implements Muxer { this.sampleBatchingEnabled = sampleBatchingEnabled; this.attemptStreamableOutputEnabled = attemptStreamableOutputEnabled; this.outputFileFormat = outputFileFormat; - this.editableVideoParameters = editableVideoParameters; + this.mp4AtFileParameters = mp4AtFileParameters; metadataCollector = new MetadataCollector(); mp4Writer = new Mp4Writer( @@ -381,7 +380,7 @@ public final class Mp4Muxer implements Muxer { sampleCopyEnabled, sampleBatchingEnabled, attemptStreamableOutputEnabled); - editableVideoTracks = new ArrayList<>(); + auxiliaryTracks = new ArrayList<>(); } /** @@ -417,18 +416,18 @@ public final class Mp4Muxer implements Muxer { * @throws MuxerException If an error occurs while adding track. */ public TrackToken addTrack(int sortKey, Format format) throws MuxerException { - if (outputFileFormat == FILE_FORMAT_EDITABLE_VIDEO && isEditableVideoTrack(format)) { - if (checkNotNull(editableVideoParameters).shouldInterleaveSamples) { - // Editable video tracks are handled by the primary Mp4Writer. - return mp4Writer.addEditableVideoTrack(sortKey, format); + if (outputFileFormat == FILE_FORMAT_MP4_AT && isAuxiliaryTrack(format)) { + if (checkNotNull(mp4AtFileParameters).shouldInterleaveSamples) { + // Auxiliary tracks are handled by the primary Mp4Writer. + return mp4Writer.addAuxiliaryTrack(sortKey, format); } try { - ensureSetupForEditableVideoTracks(); + ensureSetupForAuxiliaryTracks(); } catch (FileNotFoundException e) { throw new MuxerException("Cache file not found", e); } - Track track = editableVideoMp4Writer.addTrack(sortKey, format); - editableVideoTracks.add(track); + Track track = auxiliaryTracksMp4Writer.addTrack(sortKey, format); + auxiliaryTracks.add(track); return track; } return mp4Writer.addTrack(sortKey, format); @@ -458,8 +457,8 @@ public final class Mp4Muxer implements Muxer { checkState(trackToken instanceof Track); Track track = (Track) trackToken; try { - if (editableVideoTracks.contains(trackToken)) { - checkNotNull(editableVideoMp4Writer).writeSampleData(track, byteBuffer, bufferInfo); + if (auxiliaryTracks.contains(trackToken)) { + checkNotNull(auxiliaryTracksMp4Writer).writeSampleData(track, byteBuffer, bufferInfo); } else { mp4Writer.writeSampleData(track, byteBuffer, bufferInfo); } @@ -502,9 +501,9 @@ public final class Mp4Muxer implements Muxer { public void close() throws MuxerException { @Nullable MuxerException exception = null; try { - finishWritingEditableVideoTracks(); + finishWritingAuxiliaryTracks(); finishWritingPrimaryVideoTracks(); - appendEditableVideoTracksDataToTheOutputFile(); + appendAuxiliaryTracksDataToTheOutputFile(); } catch (IOException e) { exception = new MuxerException("Failed to finish writing data", e); } @@ -533,17 +532,17 @@ public final class Mp4Muxer implements Muxer { } } - @EnsuresNonNull({"editableVideoMp4Writer"}) - private void ensureSetupForEditableVideoTracks() throws FileNotFoundException { - if (editableVideoMp4Writer == null) { + @EnsuresNonNull({"auxiliaryTracksMp4Writer"}) + private void ensureSetupForAuxiliaryTracks() throws FileNotFoundException { + if (auxiliaryTracksMp4Writer == null) { cacheFilePath = - checkNotNull(checkNotNull(editableVideoParameters).cacheFileProvider).getCacheFilePath(); + checkNotNull(checkNotNull(mp4AtFileParameters).cacheFileProvider).getCacheFilePath(); cacheFileOutputStream = new FileOutputStream(cacheFilePath); - editableVideoMetadataCollector = new MetadataCollector(); - editableVideoMp4Writer = + auxiliaryTracksMetadataCollector = new MetadataCollector(); + auxiliaryTracksMp4Writer = new Mp4Writer( cacheFileOutputStream.getChannel(), - checkNotNull(editableVideoMetadataCollector), + checkNotNull(auxiliaryTracksMetadataCollector), annexBToAvccConverter, lastSampleDurationBehavior, sampleCopyEnabled, @@ -552,48 +551,48 @@ public final class Mp4Muxer implements Muxer { } } - private void finishWritingEditableVideoTracks() throws IOException { - if (editableVideoMp4Writer == null) { - // Editable video tracks were not added. + private void finishWritingAuxiliaryTracks() throws IOException { + if (auxiliaryTracksMp4Writer == null) { + // Auxiliary tracks were not added. return; } - populateEditableVideoTracksMetadata( - checkNotNull(editableVideoMetadataCollector), + populateAuxiliaryTracksMetadata( + checkNotNull(auxiliaryTracksMetadataCollector), metadataCollector.timestampData, /* samplesInterleaved= */ false, - editableVideoTracks); - checkNotNull(editableVideoMp4Writer).finishWritingSamplesAndFinalizeMoovBox(); + auxiliaryTracks); + checkNotNull(auxiliaryTracksMp4Writer).finishWritingSamplesAndFinalizeMoovBox(); } private void finishWritingPrimaryVideoTracks() throws IOException { // The exact offset is known after writing all the data in mp4Writer. - MdtaMetadataEntry placeholderEditableTrackOffset = getEditableTracksOffsetMetadata(0L); - if (editableVideoMp4Writer != null) { - long editableVideoDataSize = checkNotNull(cacheFileOutputStream).getChannel().size(); - long edvdBoxSize = LARGE_SIZE_BOX_HEADER_SIZE + editableVideoDataSize; - metadataCollector.addMetadata(getEditableTracksLengthMetadata(edvdBoxSize)); - metadataCollector.addMetadata(placeholderEditableTrackOffset); + MdtaMetadataEntry placeholderAuxiliaryTracksOffset = getAuxiliaryTracksOffsetMetadata(0L); + if (auxiliaryTracksMp4Writer != null) { + long auxiliaryTracksDataSize = checkNotNull(cacheFileOutputStream).getChannel().size(); + long axteBoxSize = LARGE_SIZE_BOX_HEADER_SIZE + auxiliaryTracksDataSize; + metadataCollector.addMetadata(getAuxiliaryTracksLengthMetadata(axteBoxSize)); + metadataCollector.addMetadata(placeholderAuxiliaryTracksOffset); } mp4Writer.finishWritingSamplesAndFinalizeMoovBox(); - if (editableVideoMp4Writer != null) { + if (auxiliaryTracksMp4Writer != null) { long primaryVideoDataSize = outputChannel.size(); - metadataCollector.removeMdtaMetadataEntry(placeholderEditableTrackOffset); - metadataCollector.addMetadata(getEditableTracksOffsetMetadata(primaryVideoDataSize)); + metadataCollector.removeMdtaMetadataEntry(placeholderAuxiliaryTracksOffset); + metadataCollector.addMetadata(getAuxiliaryTracksOffsetMetadata(primaryVideoDataSize)); mp4Writer.finalizeMoovBox(); checkState( outputChannel.size() == primaryVideoDataSize, - "The editable tracks offset should remain the same"); + "The auxiliary tracks offset should remain the same"); } } - private void appendEditableVideoTracksDataToTheOutputFile() throws IOException { - if (editableVideoMp4Writer == null) { - // Editable video tracks were not added. + private void appendAuxiliaryTracksDataToTheOutputFile() throws IOException { + if (auxiliaryTracksMp4Writer == null) { + // Auxiliary tracks were not added. return; } outputChannel.position(outputChannel.size()); FileInputStream inputStream = new FileInputStream(checkNotNull(cacheFilePath)); - outputChannel.write(getEdvdBoxHeader(inputStream.getChannel().size())); + outputChannel.write(getAxteBoxHeader(inputStream.getChannel().size())); ByteStreams.copy(inputStream, outputStream); inputStream.close(); } diff --git a/libraries/muxer/src/main/java/androidx/media3/muxer/Mp4Writer.java b/libraries/muxer/src/main/java/androidx/media3/muxer/Mp4Writer.java index 6fd67dd2d6..40186c7a14 100644 --- a/libraries/muxer/src/main/java/androidx/media3/muxer/Mp4Writer.java +++ b/libraries/muxer/src/main/java/androidx/media3/muxer/Mp4Writer.java @@ -20,10 +20,10 @@ import static androidx.media3.common.util.Assertions.checkState; import static androidx.media3.muxer.AnnexBUtils.doesSampleContainAnnexBNalUnits; import static androidx.media3.muxer.Boxes.BOX_HEADER_SIZE; import static androidx.media3.muxer.Boxes.LARGE_SIZE_BOX_HEADER_SIZE; -import static androidx.media3.muxer.Boxes.getEdvdBoxHeader; -import static androidx.media3.muxer.MuxerUtil.getEditableTracksLengthMetadata; -import static androidx.media3.muxer.MuxerUtil.getEditableTracksOffsetMetadata; -import static androidx.media3.muxer.MuxerUtil.populateEditableVideoTracksMetadata; +import static androidx.media3.muxer.Boxes.getAxteBoxHeader; +import static androidx.media3.muxer.MuxerUtil.getAuxiliaryTracksLengthMetadata; +import static androidx.media3.muxer.MuxerUtil.getAuxiliaryTracksOffsetMetadata; +import static androidx.media3.muxer.MuxerUtil.populateAuxiliaryTracksMetadata; import static java.lang.Math.max; import static java.lang.Math.min; @@ -55,7 +55,7 @@ import java.util.concurrent.atomic.AtomicBoolean; private final boolean sampleCopyEnabled; private final boolean sampleBatchingEnabled; private final List tracks; - private final List editableVideoTracks; + private final List auxiliaryTracks; private final AtomicBoolean hasWrittenSamples; // Stores location of the space reserved for the moov box at the beginning of the file (after ftyp @@ -101,7 +101,7 @@ import java.util.concurrent.atomic.AtomicBoolean; this.sampleCopyEnabled = sampleCopyEnabled; this.sampleBatchingEnabled = sampleBatchingEnabled; tracks = new ArrayList<>(); - editableVideoTracks = new ArrayList<>(); + auxiliaryTracks = new ArrayList<>(); hasWrittenSamples = new AtomicBoolean(false); canWriteMoovAtStart = attemptStreamableOutputEnabled; lastMoovWritten = Range.closed(0L, 0L); @@ -123,18 +123,18 @@ import java.util.concurrent.atomic.AtomicBoolean; } /** - * Adds an editable video track of the given {@link Format}. + * Adds an auxiliary track of the given {@link Format}. * - *

See {@link MuxerUtil#isEditableVideoTrack(Format)} for editable video tracks. + *

See {@link MuxerUtil#isAuxiliaryTrack(Format)} for auxiliary tracks. * * @param sortKey The key used for sorting the track list. * @param format The {@link Format} for the track. * @return A unique {@link Track}. It should be used in {@link #writeSampleData}. */ - public Track addEditableVideoTrack(int sortKey, Format format) { + public Track addAuxiliaryTrack(int sortKey, Format format) { Track track = new Track(format, sortKey, sampleCopyEnabled); - editableVideoTracks.add(track); - Collections.sort(editableVideoTracks, (a, b) -> Integer.compare(a.sortKey, b.sortKey)); + auxiliaryTracks.add(track); + Collections.sort(auxiliaryTracks, (a, b) -> Integer.compare(a.sortKey, b.sortKey)); return track; } @@ -175,8 +175,8 @@ import java.util.concurrent.atomic.AtomicBoolean; for (int i = 0; i < tracks.size(); i++) { writePendingTrackSamples(tracks.get(i)); } - for (int i = 0; i < editableVideoTracks.size(); i++) { - writePendingTrackSamples(editableVideoTracks.get(i)); + for (int i = 0; i < auxiliaryTracks.size(); i++) { + writePendingTrackSamples(auxiliaryTracks.get(i)); } // Leave the file empty if no samples are written. @@ -186,48 +186,48 @@ import java.util.concurrent.atomic.AtomicBoolean; finalizeMoovBox(); - if (!editableVideoTracks.isEmpty()) { - writeEdvdBox(); + if (!auxiliaryTracks.isEmpty()) { + writeAxteBox(); } } - private void writeEdvdBox() throws IOException { + private void writeAxteBox() throws IOException { // The exact offset is known after writing primary track data. - MdtaMetadataEntry placeholderEditableTrackOffset = - getEditableTracksOffsetMetadata(/* offset= */ 0L); - metadataCollector.addMetadata(placeholderEditableTrackOffset); - ByteBuffer edvdBox = getEdvdBox(); - metadataCollector.addMetadata(getEditableTracksLengthMetadata(edvdBox.remaining())); + MdtaMetadataEntry placeholderAuxiliaryTrackOffset = + getAuxiliaryTracksOffsetMetadata(/* offset= */ 0L); + metadataCollector.addMetadata(placeholderAuxiliaryTrackOffset); + ByteBuffer axteBox = getAxteBox(); + metadataCollector.addMetadata(getAuxiliaryTracksLengthMetadata(axteBox.remaining())); finalizeMoovBox(); // Once final moov is written, update the actual offset. - metadataCollector.removeMdtaMetadataEntry(placeholderEditableTrackOffset); - metadataCollector.addMetadata(getEditableTracksOffsetMetadata(outputFileChannel.size())); + metadataCollector.removeMdtaMetadataEntry(placeholderAuxiliaryTrackOffset); + metadataCollector.addMetadata(getAuxiliaryTracksOffsetMetadata(outputFileChannel.size())); long fileSizeBefore = outputFileChannel.size(); finalizeMoovBox(); checkState(fileSizeBefore == outputFileChannel.size()); - // After writing primary track data, write the edvd box. + // After writing primary track data, write the axte box. outputFileChannel.position(outputFileChannel.size()); - outputFileChannel.write(edvdBox); + outputFileChannel.write(axteBox); } - private ByteBuffer getEdvdBox() { - // The edvd box will have one ftyp and one moov box. + private ByteBuffer getAxteBox() { + // The axte box will have one ftyp and one moov box. ByteBuffer ftypBox = Boxes.ftyp(); - MetadataCollector editableVideoMetadataCollector = new MetadataCollector(); - populateEditableVideoTracksMetadata( - editableVideoMetadataCollector, + MetadataCollector auxiliaryTracksMetadataCollector = new MetadataCollector(); + populateAuxiliaryTracksMetadata( + auxiliaryTracksMetadataCollector, metadataCollector.timestampData, /* samplesInterleaved= */ true, - editableVideoTracks); + auxiliaryTracks); ByteBuffer moovBox = Boxes.moov( - editableVideoTracks, - editableVideoMetadataCollector, + auxiliaryTracks, + auxiliaryTracksMetadataCollector, /* isFragmentedMp4= */ false, lastSampleDurationBehavior); - ByteBuffer edvdBoxHeader = - getEdvdBoxHeader(/* payloadSize= */ ftypBox.remaining() + moovBox.remaining()); - return BoxUtils.concatenateBuffers(edvdBoxHeader, ftypBox, moovBox); + ByteBuffer axteBoxHeader = + getAxteBoxHeader(/* payloadSize= */ ftypBox.remaining() + moovBox.remaining()); + return BoxUtils.concatenateBuffers(axteBoxHeader, ftypBox, moovBox); } /** @@ -501,7 +501,7 @@ import java.util.concurrent.atomic.AtomicBoolean; private void doInterleave() throws IOException { boolean primaryTrackSampleWritten = maybeWritePendingTrackSamples(tracks); - maybeWritePendingTrackSamples(editableVideoTracks); + maybeWritePendingTrackSamples(auxiliaryTracks); if (primaryTrackSampleWritten && canWriteMoovAtStart) { maybeWriteMoovAtStart(); diff --git a/libraries/muxer/src/main/java/androidx/media3/muxer/MuxerUtil.java b/libraries/muxer/src/main/java/androidx/media3/muxer/MuxerUtil.java index 5920976d13..4fd8b2c22b 100644 --- a/libraries/muxer/src/main/java/androidx/media3/muxer/MuxerUtil.java +++ b/libraries/muxer/src/main/java/androidx/media3/muxer/MuxerUtil.java @@ -15,13 +15,13 @@ */ package androidx.media3.muxer; -import static androidx.media3.container.MdtaMetadataEntry.EDITABLE_TRACKS_SAMPLES_LOCATION_INTERLEAVED; -import static androidx.media3.container.MdtaMetadataEntry.EDITABLE_TRACKS_SAMPLES_LOCATION_IN_EDIT_DATA_MP4; +import static androidx.media3.container.MdtaMetadataEntry.AUXILIARY_TRACKS_SAMPLES_INTERLEAVED; +import static androidx.media3.container.MdtaMetadataEntry.AUXILIARY_TRACKS_SAMPLES_NOT_INTERLEAVED; import static androidx.media3.container.MdtaMetadataEntry.TYPE_INDICATOR_8_BIT_UNSIGNED_INT; -import static androidx.media3.container.Mp4Util.EDITABLE_TRACK_TYPE_DEPTH_INVERSE; -import static androidx.media3.container.Mp4Util.EDITABLE_TRACK_TYPE_DEPTH_LINEAR; -import static androidx.media3.container.Mp4Util.EDITABLE_TRACK_TYPE_DEPTH_METADATA; -import static androidx.media3.container.Mp4Util.EDITABLE_TRACK_TYPE_SHARP; +import static androidx.media3.container.Mp4Util.MP4_AT_AUXILIARY_TRACK_TYPE_DEPTH_INVERSE; +import static androidx.media3.container.Mp4Util.MP4_AT_AUXILIARY_TRACK_TYPE_DEPTH_LINEAR; +import static androidx.media3.container.Mp4Util.MP4_AT_AUXILIARY_TRACK_TYPE_DEPTH_METADATA; +import static androidx.media3.container.Mp4Util.MP4_AT_AUXILIARY_TRACK_TYPE_SHARP; import androidx.media3.common.C; import androidx.media3.common.Format; @@ -55,10 +55,10 @@ public final class MuxerUtil { } /** - * Returns whether the given {@linkplain Format track format} is an editable video track. + * Returns whether the given {@linkplain Format track format} is an auxiliary track. * *

The {@linkplain Format track format} with {@link C#ROLE_FLAG_AUXILIARY} and the {@code - * auxiliaryTrackType} from the following are considered as an editable video track. + * auxiliaryTrackType} from the following are considered as an auxiliary track. * *

    *
  • {@link C#AUXILIARY_TRACK_TYPE_ORIGINAL} @@ -67,7 +67,7 @@ public final class MuxerUtil { *
  • {@link C#AUXILIARY_TRACK_TYPE_DEPTH_METADATA} *
*/ - /* package */ static boolean isEditableVideoTrack(Format format) { + /* package */ static boolean isAuxiliaryTrack(Format format) { return (format.roleFlags & C.ROLE_FLAG_AUXILIARY) > 0 && (format.auxiliaryTrackType == C.AUXILIARY_TRACK_TYPE_ORIGINAL || format.auxiliaryTrackType == C.AUXILIARY_TRACK_TYPE_DEPTH_LINEAR @@ -75,84 +75,86 @@ public final class MuxerUtil { || format.auxiliaryTrackType == C.AUXILIARY_TRACK_TYPE_DEPTH_METADATA); } - /** Returns a {@link MdtaMetadataEntry} for the editable tracks offset metadata. */ - /* package */ static MdtaMetadataEntry getEditableTracksOffsetMetadata(long offset) { + /** Returns a {@link MdtaMetadataEntry} for the auxiliary tracks offset metadata. */ + /* package */ static MdtaMetadataEntry getAuxiliaryTracksOffsetMetadata(long offset) { return new MdtaMetadataEntry( - MdtaMetadataEntry.KEY_EDITABLE_TRACKS_OFFSET, + MdtaMetadataEntry.KEY_AUXILIARY_TRACKS_OFFSET, Longs.toByteArray(offset), MdtaMetadataEntry.TYPE_INDICATOR_UNSIGNED_INT64); } - /** Returns a {@link MdtaMetadataEntry} for the editable tracks length metadata. */ - /* package */ static MdtaMetadataEntry getEditableTracksLengthMetadata(long length) { + /** Returns a {@link MdtaMetadataEntry} for the auxiliary tracks length metadata. */ + /* package */ static MdtaMetadataEntry getAuxiliaryTracksLengthMetadata(long length) { return new MdtaMetadataEntry( - MdtaMetadataEntry.KEY_EDITABLE_TRACKS_LENGTH, + MdtaMetadataEntry.KEY_AUXILIARY_TRACKS_LENGTH, Longs.toByteArray(length), MdtaMetadataEntry.TYPE_INDICATOR_UNSIGNED_INT64); } /** - * Populates editable video tracks metadata. + * Populates auxiliary tracks metadata. * * @param metadataCollector The {@link MetadataCollector} to add the metadata to. * @param timestampData The {@link Mp4TimestampData}. - * @param samplesInterleaved Whether editable video track samples are interleaved with the primary + * @param samplesInterleaved Whether auxiliary track samples are interleaved with the primary * track samples. - * @param editableVideoTracks The editable video tracks. + * @param auxiliaryTracks The auxiliary tracks. */ - /* package */ static void populateEditableVideoTracksMetadata( + /* package */ static void populateAuxiliaryTracksMetadata( MetadataCollector metadataCollector, Mp4TimestampData timestampData, boolean samplesInterleaved, - List editableVideoTracks) { + List auxiliaryTracks) { metadataCollector.addMetadata(timestampData); - metadataCollector.addMetadata(getEditableTracksSamplesLocationMetadata(samplesInterleaved)); - metadataCollector.addMetadata(getEditableTracksMapMetadata(editableVideoTracks)); + metadataCollector.addMetadata(getAuxiliaryTracksSamplesLocationMetadata(samplesInterleaved)); + metadataCollector.addMetadata(getAuxiliaryTracksMapMetadata(auxiliaryTracks)); } - private static MdtaMetadataEntry getEditableTracksSamplesLocationMetadata( + private static MdtaMetadataEntry getAuxiliaryTracksSamplesLocationMetadata( boolean samplesInterleaved) { return new MdtaMetadataEntry( - MdtaMetadataEntry.KEY_EDITABLE_TRACKS_SAMPLES_LOCATION, + MdtaMetadataEntry.KEY_AUXILIARY_TRACKS_INTERLEAVED, new byte[] { samplesInterleaved - ? EDITABLE_TRACKS_SAMPLES_LOCATION_INTERLEAVED - : EDITABLE_TRACKS_SAMPLES_LOCATION_IN_EDIT_DATA_MP4 + ? AUXILIARY_TRACKS_SAMPLES_INTERLEAVED + : AUXILIARY_TRACKS_SAMPLES_NOT_INTERLEAVED }, TYPE_INDICATOR_8_BIT_UNSIGNED_INT); } - private static MdtaMetadataEntry getEditableTracksMapMetadata(List editableVideoTracks) { + private static MdtaMetadataEntry getAuxiliaryTracksMapMetadata(List auxiliaryTracks) { // 1 byte version + 1 byte track count (n) + n bytes track types. - int totalTracks = editableVideoTracks.size(); + int totalTracks = auxiliaryTracks.size(); int dataSize = 2 + totalTracks; byte[] data = new byte[dataSize]; data[0] = 1; // version data[1] = (byte) totalTracks; // track count for (int i = 0; i < totalTracks; i++) { - Track track = editableVideoTracks.get(i); + Track track = auxiliaryTracks.get(i); int trackType; switch (track.format.auxiliaryTrackType) { case C.AUXILIARY_TRACK_TYPE_ORIGINAL: - trackType = EDITABLE_TRACK_TYPE_SHARP; + trackType = MP4_AT_AUXILIARY_TRACK_TYPE_SHARP; break; case C.AUXILIARY_TRACK_TYPE_DEPTH_LINEAR: - trackType = EDITABLE_TRACK_TYPE_DEPTH_LINEAR; + trackType = MP4_AT_AUXILIARY_TRACK_TYPE_DEPTH_LINEAR; break; case C.AUXILIARY_TRACK_TYPE_DEPTH_INVERSE: - trackType = EDITABLE_TRACK_TYPE_DEPTH_INVERSE; + trackType = MP4_AT_AUXILIARY_TRACK_TYPE_DEPTH_INVERSE; break; case C.AUXILIARY_TRACK_TYPE_DEPTH_METADATA: - trackType = EDITABLE_TRACK_TYPE_DEPTH_METADATA; + trackType = MP4_AT_AUXILIARY_TRACK_TYPE_DEPTH_METADATA; break; default: throw new IllegalArgumentException( - "Unsupported editable track type " + track.format.auxiliaryTrackType); + "Unsupported auxiliary track type " + track.format.auxiliaryTrackType); } data[i + 2] = (byte) trackType; } return new MdtaMetadataEntry( - MdtaMetadataEntry.KEY_EDITABLE_TRACKS_MAP, data, MdtaMetadataEntry.TYPE_INDICATOR_RESERVED); + MdtaMetadataEntry.KEY_AUXILIARY_TRACKS_MAP, + data, + MdtaMetadataEntry.TYPE_INDICATOR_RESERVED); } private static boolean isMdtaMetadataEntrySupported(MdtaMetadataEntry mdtaMetadataEntry) { diff --git a/libraries/muxer/src/test/java/androidx/media3/muxer/Mp4MuxerEndToEndTest.java b/libraries/muxer/src/test/java/androidx/media3/muxer/Mp4MuxerEndToEndTest.java index c5c4c30c39..6e42612b92 100644 --- a/libraries/muxer/src/test/java/androidx/media3/muxer/Mp4MuxerEndToEndTest.java +++ b/libraries/muxer/src/test/java/androidx/media3/muxer/Mp4MuxerEndToEndTest.java @@ -416,7 +416,7 @@ public class Mp4MuxerEndToEndTest { } @Test - public void createMp4Muxer_withFileFormatEditableVideoButWithoutCacheFileProvider_throws() + public void createMp4Muxer_withFileFormatMp4AtButWithoutCacheFileProvider_throws() throws Exception { String outputFilePath = temporaryFolder.newFile().getPath(); @@ -424,20 +424,19 @@ public class Mp4MuxerEndToEndTest { IllegalArgumentException.class, () -> new Mp4Muxer.Builder(new FileOutputStream(outputFilePath)) - .setOutputFileFormat(Mp4Muxer.FILE_FORMAT_EDITABLE_VIDEO) + .setOutputFileFormat(Mp4Muxer.FILE_FORMAT_MP4_AT) .build()); } @Test - public void writeMp4File_withFileFormatEditableVideoAndEditableVideoTracks_writesEdvdBox() - throws Exception { + public void writeMp4File_withFileFormatMp4AtAndAuxiliaryTracks_writesAxteBox() throws Exception { String outputFilePath = temporaryFolder.newFile().getPath(); String cacheFilePath = temporaryFolder.newFile().getPath(); Mp4Muxer muxer = new Mp4Muxer.Builder(new FileOutputStream(outputFilePath)) - .setOutputFileFormat(Mp4Muxer.FILE_FORMAT_EDITABLE_VIDEO) - .setEditableVideoParameters( - new Mp4Muxer.EditableVideoParameters( + .setOutputFileFormat(Mp4Muxer.FILE_FORMAT_MP4_AT) + .setMp4AtFileParameters( + new Mp4Muxer.Mp4AtFileParameters( /* shouldInterleaveSamples= */ false, () -> cacheFilePath)) .build(); @@ -470,15 +469,15 @@ public class Mp4MuxerEndToEndTest { DumpableMp4Box outputFileDumpableBox = new DumpableMp4Box(ByteBuffer.wrap(TestUtil.getByteArrayFromFilePath(outputFilePath))); - // 1 track is written in the outer moov box and 2 tracks are written in the edvd.moov box. + // 1 track is written in the outer moov box and 2 tracks are written in the axte.moov box. DumpFileAsserts.assertOutput( context, outputFileDumpableBox, - MuxerTestUtil.getExpectedDumpFilePath("mp4_with_editable_video_tracks_in_edvd.box")); + MuxerTestUtil.getExpectedDumpFilePath("mp4_with_auxiliary_tracks_in_axte.box")); } @Test - public void writeMp4File_withFileFormatDefaultAndEditableVideoTracks_doesNotWriteEdvdBox() + public void writeMp4File_withFileFormatDefaultAndAuxiliaryTracks_doesNotWriteAxteBox() throws Exception { String outputFilePath = temporaryFolder.newFile().getPath(); Mp4Muxer muxer = new Mp4Muxer.Builder(new FileOutputStream(outputFilePath)).build(); @@ -512,24 +511,24 @@ public class Mp4MuxerEndToEndTest { DumpableMp4Box outputFileDumpableBox = new DumpableMp4Box(ByteBuffer.wrap(TestUtil.getByteArrayFromFilePath(outputFilePath))); - // All 3 tracks are written in the outer moov box and no edvd box. + // All 3 tracks are written in the outer moov box and no axte box. DumpFileAsserts.assertOutput( context, outputFileDumpableBox, - MuxerTestUtil.getExpectedDumpFilePath("mp4_with_editable_video_tracks_without_edvd.box")); + MuxerTestUtil.getExpectedDumpFilePath("mp4_with_auxiliary_tracks_without_axte.box")); } @Test public void - writeMp4File_withFileFormatEditableVideoAndEditableVideoTracks_primaryVideoTracksMatchesExpected() + writeMp4File_withFileFormatMp4AtAndAuxiliaryVideoTracks_primaryVideoTracksMatchesExpected() throws Exception { String outputFilePath = temporaryFolder.newFile().getPath(); String cacheFilePath = temporaryFolder.newFile().getPath(); Mp4Muxer muxer = new Mp4Muxer.Builder(new FileOutputStream(outputFilePath)) - .setOutputFileFormat(Mp4Muxer.FILE_FORMAT_EDITABLE_VIDEO) - .setEditableVideoParameters( - new Mp4Muxer.EditableVideoParameters( + .setOutputFileFormat(Mp4Muxer.FILE_FORMAT_MP4_AT) + .setMp4AtFileParameters( + new Mp4Muxer.Mp4AtFileParameters( /* shouldInterleaveSamples= */ false, () -> cacheFilePath)) .build(); @@ -571,16 +570,15 @@ public class Mp4MuxerEndToEndTest { } @Test - public void - writeMp4File_withFileFormatEditableVideoAndEditableVideoTracks_editableVideoTracksMatchesExpected() - throws Exception { + public void writeMp4File_withFileFormatMp4AtAndAuxiliaryTracks_auxiliaryTracksMatchesExpected() + throws Exception { String outputFilePath = temporaryFolder.newFile().getPath(); String cacheFilePath = temporaryFolder.newFile().getPath(); Mp4Muxer muxer = new Mp4Muxer.Builder(new FileOutputStream(outputFilePath)) - .setOutputFileFormat(Mp4Muxer.FILE_FORMAT_EDITABLE_VIDEO) - .setEditableVideoParameters( - new Mp4Muxer.EditableVideoParameters( + .setOutputFileFormat(Mp4Muxer.FILE_FORMAT_MP4_AT) + .setMp4AtFileParameters( + new Mp4Muxer.Mp4AtFileParameters( /* shouldInterleaveSamples= */ false, () -> cacheFilePath)) .build(); @@ -611,27 +609,27 @@ public class Mp4MuxerEndToEndTest { muxer.close(); } - FakeExtractorOutput editableTracksOutput = + FakeExtractorOutput auxiliaryTracksOutput = TestUtil.extractAllSamplesFromFilePath( new Mp4Extractor( - new DefaultSubtitleParserFactory(), Mp4Extractor.FLAG_READ_EDITABLE_VIDEO_TRACKS), + new DefaultSubtitleParserFactory(), Mp4Extractor.FLAG_READ_AUXILIARY_TRACKS), outputFilePath); DumpFileAsserts.assertOutput( context, - editableTracksOutput, - MuxerTestUtil.getExpectedDumpFilePath("mp4_with_editable_video_tracks.mp4")); + auxiliaryTracksOutput, + MuxerTestUtil.getExpectedDumpFilePath("mp4_with_auxiliary_tracks.mp4")); } @Test public void - writeMp4File_withFileFormatEditableVideoAndEditableVideoTracksAndShouldInterleaveSamples_primaryVideoTracksMatchesExpected() + writeMp4File_withFileFormatMp4AtAndAuxiliaryTracksAndShouldInterleaveSamples_primaryVideoTracksMatchesExpected() throws Exception { String outputFilePath = temporaryFolder.newFile().getPath(); Mp4Muxer muxer = new Mp4Muxer.Builder(new FileOutputStream(outputFilePath)) - .setOutputFileFormat(Mp4Muxer.FILE_FORMAT_EDITABLE_VIDEO) - .setEditableVideoParameters( - new Mp4Muxer.EditableVideoParameters( + .setOutputFileFormat(Mp4Muxer.FILE_FORMAT_MP4_AT) + .setMp4AtFileParameters( + new Mp4Muxer.Mp4AtFileParameters( /* shouldInterleaveSamples= */ true, /* cacheFileProvider= */ null)) .build(); @@ -670,19 +668,19 @@ public class Mp4MuxerEndToEndTest { context, primaryTracksOutput, MuxerTestUtil.getExpectedDumpFilePath( - "mp4_with_primary_tracks_when_editable_track_samples_interleaved.mp4")); + "mp4_with_primary_tracks_when_auxiliary_track_samples_interleaved.mp4")); } @Test public void - writeMp4File_withFileFormatEditableVideoAndEditableVideoTracksAndShouldInterleaveSamples_editableVideoTracksMatchesExpected() + writeMp4File_withFileFormatMp4AtAndAuxiliaryTracksAndShouldInterleaveSamples_auxiliaryTracksMatchesExpected() throws Exception { String outputFilePath = temporaryFolder.newFile().getPath(); Mp4Muxer muxer = new Mp4Muxer.Builder(new FileOutputStream(outputFilePath)) - .setOutputFileFormat(Mp4Muxer.FILE_FORMAT_EDITABLE_VIDEO) - .setEditableVideoParameters( - new Mp4Muxer.EditableVideoParameters( + .setOutputFileFormat(Mp4Muxer.FILE_FORMAT_MP4_AT) + .setMp4AtFileParameters( + new Mp4Muxer.Mp4AtFileParameters( /* shouldInterleaveSamples= */ true, /* cacheFileProvider= */ null)) .build(); @@ -713,16 +711,16 @@ public class Mp4MuxerEndToEndTest { muxer.close(); } - FakeExtractorOutput editableTracksOutput = + FakeExtractorOutput auxiliaryTracksOutput = TestUtil.extractAllSamplesFromFilePath( new Mp4Extractor( - new DefaultSubtitleParserFactory(), Mp4Extractor.FLAG_READ_EDITABLE_VIDEO_TRACKS), + new DefaultSubtitleParserFactory(), Mp4Extractor.FLAG_READ_AUXILIARY_TRACKS), outputFilePath); DumpFileAsserts.assertOutput( context, - editableTracksOutput, + auxiliaryTracksOutput, MuxerTestUtil.getExpectedDumpFilePath( - "mp4_with_editable_video_tracks_when_editable_track_samples_interleaved.mp4")); + "mp4_with_auxiliary_tracks_when_auxiliary_track_samples_interleaved.mp4")); } @Test diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample.mp4_with_flag_read_Editable_video_tracks b/libraries/test_data/src/test/assets/extractordumps/mp4/sample.mp4_with_flag_read_auxiliary_tracks similarity index 100% rename from libraries/test_data/src/test/assets/extractordumps/mp4/sample.mp4_with_flag_read_Editable_video_tracks rename to libraries/test_data/src/test/assets/extractordumps/mp4/sample.mp4_with_flag_read_auxiliary_tracks diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks.mp4.0.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks.mp4.0.dump new file mode 100644 index 0000000000..0463d73c5b --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks.mp4.0.dump @@ -0,0 +1,50 @@ +seekMap: + isSeekable = true + duration = 0 + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400276]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] +numberOfTracks = 1 +track 0: + total output bytes = 280 + sample count = 5 + track duration = 0 + format 0: + id = 1 + containerMimeType = video/mp4 + sampleMimeType = video/avc + codecs = avc1.F4000A + maxInputSize = 86 + maxNumReorderSamples = 2 + width = 12 + height = 10 + colorInfo: + colorRange = 1 + lumaBitdepth = 8 + chromaBitdepth = 8 + metadata = entries=[mdta: key=auxiliary.tracks.length, value=400628, mdta: key=auxiliary.tracks.offset, value=400332, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] + initializationData: + data = length 28, hash 410B510 + data = length 9, hash FBADD682 + sample 0: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 1: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 2: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 3: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 4: + time = 0 + flags = 536870913 + data = length 56, hash C4551A2E +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks.mp4.1.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks.mp4.1.dump new file mode 100644 index 0000000000..0463d73c5b --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks.mp4.1.dump @@ -0,0 +1,50 @@ +seekMap: + isSeekable = true + duration = 0 + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400276]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] +numberOfTracks = 1 +track 0: + total output bytes = 280 + sample count = 5 + track duration = 0 + format 0: + id = 1 + containerMimeType = video/mp4 + sampleMimeType = video/avc + codecs = avc1.F4000A + maxInputSize = 86 + maxNumReorderSamples = 2 + width = 12 + height = 10 + colorInfo: + colorRange = 1 + lumaBitdepth = 8 + chromaBitdepth = 8 + metadata = entries=[mdta: key=auxiliary.tracks.length, value=400628, mdta: key=auxiliary.tracks.offset, value=400332, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] + initializationData: + data = length 28, hash 410B510 + data = length 9, hash FBADD682 + sample 0: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 1: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 2: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 3: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 4: + time = 0 + flags = 536870913 + data = length 56, hash C4551A2E +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks.mp4.2.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks.mp4.2.dump new file mode 100644 index 0000000000..0463d73c5b --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks.mp4.2.dump @@ -0,0 +1,50 @@ +seekMap: + isSeekable = true + duration = 0 + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400276]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] +numberOfTracks = 1 +track 0: + total output bytes = 280 + sample count = 5 + track duration = 0 + format 0: + id = 1 + containerMimeType = video/mp4 + sampleMimeType = video/avc + codecs = avc1.F4000A + maxInputSize = 86 + maxNumReorderSamples = 2 + width = 12 + height = 10 + colorInfo: + colorRange = 1 + lumaBitdepth = 8 + chromaBitdepth = 8 + metadata = entries=[mdta: key=auxiliary.tracks.length, value=400628, mdta: key=auxiliary.tracks.offset, value=400332, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] + initializationData: + data = length 28, hash 410B510 + data = length 9, hash FBADD682 + sample 0: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 1: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 2: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 3: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 4: + time = 0 + flags = 536870913 + data = length 56, hash C4551A2E +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks.mp4.3.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks.mp4.3.dump new file mode 100644 index 0000000000..0463d73c5b --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks.mp4.3.dump @@ -0,0 +1,50 @@ +seekMap: + isSeekable = true + duration = 0 + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400276]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] +numberOfTracks = 1 +track 0: + total output bytes = 280 + sample count = 5 + track duration = 0 + format 0: + id = 1 + containerMimeType = video/mp4 + sampleMimeType = video/avc + codecs = avc1.F4000A + maxInputSize = 86 + maxNumReorderSamples = 2 + width = 12 + height = 10 + colorInfo: + colorRange = 1 + lumaBitdepth = 8 + chromaBitdepth = 8 + metadata = entries=[mdta: key=auxiliary.tracks.length, value=400628, mdta: key=auxiliary.tracks.offset, value=400332, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] + initializationData: + data = length 28, hash 410B510 + data = length 9, hash FBADD682 + sample 0: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 1: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 2: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 3: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 4: + time = 0 + flags = 536870913 + data = length 56, hash C4551A2E +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks.mp4.reading_within_gop_sample_dependencies.0.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks.mp4.reading_within_gop_sample_dependencies.0.dump new file mode 100644 index 0000000000..0463d73c5b --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks.mp4.reading_within_gop_sample_dependencies.0.dump @@ -0,0 +1,50 @@ +seekMap: + isSeekable = true + duration = 0 + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400276]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] +numberOfTracks = 1 +track 0: + total output bytes = 280 + sample count = 5 + track duration = 0 + format 0: + id = 1 + containerMimeType = video/mp4 + sampleMimeType = video/avc + codecs = avc1.F4000A + maxInputSize = 86 + maxNumReorderSamples = 2 + width = 12 + height = 10 + colorInfo: + colorRange = 1 + lumaBitdepth = 8 + chromaBitdepth = 8 + metadata = entries=[mdta: key=auxiliary.tracks.length, value=400628, mdta: key=auxiliary.tracks.offset, value=400332, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] + initializationData: + data = length 28, hash 410B510 + data = length 9, hash FBADD682 + sample 0: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 1: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 2: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 3: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 4: + time = 0 + flags = 536870913 + data = length 56, hash C4551A2E +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks.mp4.reading_within_gop_sample_dependencies.1.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks.mp4.reading_within_gop_sample_dependencies.1.dump new file mode 100644 index 0000000000..0463d73c5b --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks.mp4.reading_within_gop_sample_dependencies.1.dump @@ -0,0 +1,50 @@ +seekMap: + isSeekable = true + duration = 0 + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400276]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] +numberOfTracks = 1 +track 0: + total output bytes = 280 + sample count = 5 + track duration = 0 + format 0: + id = 1 + containerMimeType = video/mp4 + sampleMimeType = video/avc + codecs = avc1.F4000A + maxInputSize = 86 + maxNumReorderSamples = 2 + width = 12 + height = 10 + colorInfo: + colorRange = 1 + lumaBitdepth = 8 + chromaBitdepth = 8 + metadata = entries=[mdta: key=auxiliary.tracks.length, value=400628, mdta: key=auxiliary.tracks.offset, value=400332, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] + initializationData: + data = length 28, hash 410B510 + data = length 9, hash FBADD682 + sample 0: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 1: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 2: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 3: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 4: + time = 0 + flags = 536870913 + data = length 56, hash C4551A2E +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks.mp4.reading_within_gop_sample_dependencies.2.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks.mp4.reading_within_gop_sample_dependencies.2.dump new file mode 100644 index 0000000000..0463d73c5b --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks.mp4.reading_within_gop_sample_dependencies.2.dump @@ -0,0 +1,50 @@ +seekMap: + isSeekable = true + duration = 0 + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400276]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] +numberOfTracks = 1 +track 0: + total output bytes = 280 + sample count = 5 + track duration = 0 + format 0: + id = 1 + containerMimeType = video/mp4 + sampleMimeType = video/avc + codecs = avc1.F4000A + maxInputSize = 86 + maxNumReorderSamples = 2 + width = 12 + height = 10 + colorInfo: + colorRange = 1 + lumaBitdepth = 8 + chromaBitdepth = 8 + metadata = entries=[mdta: key=auxiliary.tracks.length, value=400628, mdta: key=auxiliary.tracks.offset, value=400332, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] + initializationData: + data = length 28, hash 410B510 + data = length 9, hash FBADD682 + sample 0: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 1: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 2: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 3: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 4: + time = 0 + flags = 536870913 + data = length 56, hash C4551A2E +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks.mp4.reading_within_gop_sample_dependencies.3.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks.mp4.reading_within_gop_sample_dependencies.3.dump new file mode 100644 index 0000000000..0463d73c5b --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks.mp4.reading_within_gop_sample_dependencies.3.dump @@ -0,0 +1,50 @@ +seekMap: + isSeekable = true + duration = 0 + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400276]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] +numberOfTracks = 1 +track 0: + total output bytes = 280 + sample count = 5 + track duration = 0 + format 0: + id = 1 + containerMimeType = video/mp4 + sampleMimeType = video/avc + codecs = avc1.F4000A + maxInputSize = 86 + maxNumReorderSamples = 2 + width = 12 + height = 10 + colorInfo: + colorRange = 1 + lumaBitdepth = 8 + chromaBitdepth = 8 + metadata = entries=[mdta: key=auxiliary.tracks.length, value=400628, mdta: key=auxiliary.tracks.offset, value=400332, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] + initializationData: + data = length 28, hash 410B510 + data = length 9, hash FBADD682 + sample 0: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 1: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 2: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 3: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 4: + time = 0 + flags = 536870913 + data = length 56, hash C4551A2E +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks.mp4.reading_within_gop_sample_dependencies.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks.mp4.reading_within_gop_sample_dependencies.unknown_length.dump new file mode 100644 index 0000000000..0463d73c5b --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks.mp4.reading_within_gop_sample_dependencies.unknown_length.dump @@ -0,0 +1,50 @@ +seekMap: + isSeekable = true + duration = 0 + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400276]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] +numberOfTracks = 1 +track 0: + total output bytes = 280 + sample count = 5 + track duration = 0 + format 0: + id = 1 + containerMimeType = video/mp4 + sampleMimeType = video/avc + codecs = avc1.F4000A + maxInputSize = 86 + maxNumReorderSamples = 2 + width = 12 + height = 10 + colorInfo: + colorRange = 1 + lumaBitdepth = 8 + chromaBitdepth = 8 + metadata = entries=[mdta: key=auxiliary.tracks.length, value=400628, mdta: key=auxiliary.tracks.offset, value=400332, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] + initializationData: + data = length 28, hash 410B510 + data = length 9, hash FBADD682 + sample 0: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 1: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 2: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 3: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 4: + time = 0 + flags = 536870913 + data = length 56, hash C4551A2E +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks.mp4.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks.mp4.unknown_length.dump new file mode 100644 index 0000000000..0463d73c5b --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks.mp4.unknown_length.dump @@ -0,0 +1,50 @@ +seekMap: + isSeekable = true + duration = 0 + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400276]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] +numberOfTracks = 1 +track 0: + total output bytes = 280 + sample count = 5 + track duration = 0 + format 0: + id = 1 + containerMimeType = video/mp4 + sampleMimeType = video/avc + codecs = avc1.F4000A + maxInputSize = 86 + maxNumReorderSamples = 2 + width = 12 + height = 10 + colorInfo: + colorRange = 1 + lumaBitdepth = 8 + chromaBitdepth = 8 + metadata = entries=[mdta: key=auxiliary.tracks.length, value=400628, mdta: key=auxiliary.tracks.offset, value=400332, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] + initializationData: + data = length 28, hash 410B510 + data = length 9, hash FBADD682 + sample 0: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 1: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 2: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 3: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 4: + time = 0 + flags = 536870913 + data = length 56, hash C4551A2E +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks.mp4_with_flag_read_Editable_video_tracks b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks.mp4_with_flag_read_auxiliary_tracks similarity index 82% rename from libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks.mp4_with_flag_read_Editable_video_tracks rename to libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks.mp4_with_flag_read_auxiliary_tracks index 4ce38943d1..d334d563bc 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks.mp4_with_flag_read_Editable_video_tracks +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks.mp4_with_flag_read_auxiliary_tracks @@ -25,7 +25,7 @@ track 0: chromaBitdepth = 8 roleFlags = [auxiliary] auxiliaryTrackType = original - metadata = entries=[mdta: key=editable.tracks.map, value=track types = 0,1, mdta: key=editable.tracks.samples.location, value=0, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] + metadata = entries=[mdta: key=auxiliary.tracks.interleaved, value=0, mdta: key=auxiliary.tracks.map, value=track types = 0,1, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] initializationData: data = length 28, hash 410B510 data = length 9, hash FBADD682 @@ -68,7 +68,7 @@ track 1: chromaBitdepth = 8 roleFlags = [auxiliary] auxiliaryTrackType = depth-linear - metadata = entries=[mdta: key=editable.tracks.map, value=track types = 0,1, mdta: key=editable.tracks.samples.location, value=0, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] + metadata = entries=[mdta: key=auxiliary.tracks.interleaved, value=0, mdta: key=auxiliary.tracks.map, value=track types = 0,1, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] initializationData: data = length 28, hash 410B510 data = length 9, hash FBADD682 diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks.mp4.0.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks_interleaved_with_primary_video_tracks.mp4.0.dump similarity index 90% rename from libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks.mp4.0.dump rename to libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks_interleaved_with_primary_video_tracks.mp4.0.dump index 50671d1674..451d68da3f 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks.mp4.0.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks_interleaved_with_primary_video_tracks.mp4.0.dump @@ -23,7 +23,7 @@ track 0: colorRange = 1 lumaBitdepth = 8 chromaBitdepth = 8 - metadata = entries=[mdta: key=editable.tracks.offset, value=400332, mdta: key=editable.tracks.length, value=400628, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] + metadata = entries=[mdta: key=auxiliary.tracks.length, value=1490, mdta: key=auxiliary.tracks.offset, value=400892, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] initializationData: data = length 28, hash 410B510 data = length 9, hash FBADD682 diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks.mp4.1.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks_interleaved_with_primary_video_tracks.mp4.1.dump similarity index 90% rename from libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks.mp4.1.dump rename to libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks_interleaved_with_primary_video_tracks.mp4.1.dump index 50671d1674..451d68da3f 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks.mp4.1.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks_interleaved_with_primary_video_tracks.mp4.1.dump @@ -23,7 +23,7 @@ track 0: colorRange = 1 lumaBitdepth = 8 chromaBitdepth = 8 - metadata = entries=[mdta: key=editable.tracks.offset, value=400332, mdta: key=editable.tracks.length, value=400628, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] + metadata = entries=[mdta: key=auxiliary.tracks.length, value=1490, mdta: key=auxiliary.tracks.offset, value=400892, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] initializationData: data = length 28, hash 410B510 data = length 9, hash FBADD682 diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks.mp4.2.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks_interleaved_with_primary_video_tracks.mp4.2.dump similarity index 90% rename from libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks.mp4.2.dump rename to libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks_interleaved_with_primary_video_tracks.mp4.2.dump index 50671d1674..451d68da3f 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks.mp4.2.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks_interleaved_with_primary_video_tracks.mp4.2.dump @@ -23,7 +23,7 @@ track 0: colorRange = 1 lumaBitdepth = 8 chromaBitdepth = 8 - metadata = entries=[mdta: key=editable.tracks.offset, value=400332, mdta: key=editable.tracks.length, value=400628, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] + metadata = entries=[mdta: key=auxiliary.tracks.length, value=1490, mdta: key=auxiliary.tracks.offset, value=400892, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] initializationData: data = length 28, hash 410B510 data = length 9, hash FBADD682 diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks.mp4.3.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks_interleaved_with_primary_video_tracks.mp4.3.dump similarity index 90% rename from libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks.mp4.3.dump rename to libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks_interleaved_with_primary_video_tracks.mp4.3.dump index 50671d1674..451d68da3f 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks.mp4.3.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks_interleaved_with_primary_video_tracks.mp4.3.dump @@ -23,7 +23,7 @@ track 0: colorRange = 1 lumaBitdepth = 8 chromaBitdepth = 8 - metadata = entries=[mdta: key=editable.tracks.offset, value=400332, mdta: key=editable.tracks.length, value=400628, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] + metadata = entries=[mdta: key=auxiliary.tracks.length, value=1490, mdta: key=auxiliary.tracks.offset, value=400892, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] initializationData: data = length 28, hash 410B510 data = length 9, hash FBADD682 diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks_interleaved_with_primary_video_tracks.mp4.reading_within_gop_sample_dependencies.0.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks_interleaved_with_primary_video_tracks.mp4.reading_within_gop_sample_dependencies.0.dump new file mode 100644 index 0000000000..451d68da3f --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks_interleaved_with_primary_video_tracks.mp4.reading_within_gop_sample_dependencies.0.dump @@ -0,0 +1,50 @@ +seekMap: + isSeekable = true + duration = 0 + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400276]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] +numberOfTracks = 1 +track 0: + total output bytes = 280 + sample count = 5 + track duration = 0 + format 0: + id = 1 + containerMimeType = video/mp4 + sampleMimeType = video/avc + codecs = avc1.F4000A + maxInputSize = 86 + maxNumReorderSamples = 2 + width = 12 + height = 10 + colorInfo: + colorRange = 1 + lumaBitdepth = 8 + chromaBitdepth = 8 + metadata = entries=[mdta: key=auxiliary.tracks.length, value=1490, mdta: key=auxiliary.tracks.offset, value=400892, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] + initializationData: + data = length 28, hash 410B510 + data = length 9, hash FBADD682 + sample 0: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 1: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 2: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 3: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 4: + time = 0 + flags = 536870913 + data = length 56, hash C4551A2E +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks_interleaved_with_primary_video_tracks.mp4.reading_within_gop_sample_dependencies.1.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks_interleaved_with_primary_video_tracks.mp4.reading_within_gop_sample_dependencies.1.dump new file mode 100644 index 0000000000..451d68da3f --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks_interleaved_with_primary_video_tracks.mp4.reading_within_gop_sample_dependencies.1.dump @@ -0,0 +1,50 @@ +seekMap: + isSeekable = true + duration = 0 + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400276]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] +numberOfTracks = 1 +track 0: + total output bytes = 280 + sample count = 5 + track duration = 0 + format 0: + id = 1 + containerMimeType = video/mp4 + sampleMimeType = video/avc + codecs = avc1.F4000A + maxInputSize = 86 + maxNumReorderSamples = 2 + width = 12 + height = 10 + colorInfo: + colorRange = 1 + lumaBitdepth = 8 + chromaBitdepth = 8 + metadata = entries=[mdta: key=auxiliary.tracks.length, value=1490, mdta: key=auxiliary.tracks.offset, value=400892, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] + initializationData: + data = length 28, hash 410B510 + data = length 9, hash FBADD682 + sample 0: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 1: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 2: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 3: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 4: + time = 0 + flags = 536870913 + data = length 56, hash C4551A2E +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks_interleaved_with_primary_video_tracks.mp4.reading_within_gop_sample_dependencies.2.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks_interleaved_with_primary_video_tracks.mp4.reading_within_gop_sample_dependencies.2.dump new file mode 100644 index 0000000000..451d68da3f --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks_interleaved_with_primary_video_tracks.mp4.reading_within_gop_sample_dependencies.2.dump @@ -0,0 +1,50 @@ +seekMap: + isSeekable = true + duration = 0 + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400276]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] +numberOfTracks = 1 +track 0: + total output bytes = 280 + sample count = 5 + track duration = 0 + format 0: + id = 1 + containerMimeType = video/mp4 + sampleMimeType = video/avc + codecs = avc1.F4000A + maxInputSize = 86 + maxNumReorderSamples = 2 + width = 12 + height = 10 + colorInfo: + colorRange = 1 + lumaBitdepth = 8 + chromaBitdepth = 8 + metadata = entries=[mdta: key=auxiliary.tracks.length, value=1490, mdta: key=auxiliary.tracks.offset, value=400892, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] + initializationData: + data = length 28, hash 410B510 + data = length 9, hash FBADD682 + sample 0: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 1: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 2: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 3: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 4: + time = 0 + flags = 536870913 + data = length 56, hash C4551A2E +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks_interleaved_with_primary_video_tracks.mp4.reading_within_gop_sample_dependencies.3.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks_interleaved_with_primary_video_tracks.mp4.reading_within_gop_sample_dependencies.3.dump new file mode 100644 index 0000000000..451d68da3f --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks_interleaved_with_primary_video_tracks.mp4.reading_within_gop_sample_dependencies.3.dump @@ -0,0 +1,50 @@ +seekMap: + isSeekable = true + duration = 0 + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400276]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] +numberOfTracks = 1 +track 0: + total output bytes = 280 + sample count = 5 + track duration = 0 + format 0: + id = 1 + containerMimeType = video/mp4 + sampleMimeType = video/avc + codecs = avc1.F4000A + maxInputSize = 86 + maxNumReorderSamples = 2 + width = 12 + height = 10 + colorInfo: + colorRange = 1 + lumaBitdepth = 8 + chromaBitdepth = 8 + metadata = entries=[mdta: key=auxiliary.tracks.length, value=1490, mdta: key=auxiliary.tracks.offset, value=400892, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] + initializationData: + data = length 28, hash 410B510 + data = length 9, hash FBADD682 + sample 0: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 1: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 2: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 3: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 4: + time = 0 + flags = 536870913 + data = length 56, hash C4551A2E +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks_interleaved_with_primary_video_tracks.mp4.reading_within_gop_sample_dependencies.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks_interleaved_with_primary_video_tracks.mp4.reading_within_gop_sample_dependencies.unknown_length.dump new file mode 100644 index 0000000000..451d68da3f --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks_interleaved_with_primary_video_tracks.mp4.reading_within_gop_sample_dependencies.unknown_length.dump @@ -0,0 +1,50 @@ +seekMap: + isSeekable = true + duration = 0 + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400276]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] +numberOfTracks = 1 +track 0: + total output bytes = 280 + sample count = 5 + track duration = 0 + format 0: + id = 1 + containerMimeType = video/mp4 + sampleMimeType = video/avc + codecs = avc1.F4000A + maxInputSize = 86 + maxNumReorderSamples = 2 + width = 12 + height = 10 + colorInfo: + colorRange = 1 + lumaBitdepth = 8 + chromaBitdepth = 8 + metadata = entries=[mdta: key=auxiliary.tracks.length, value=1490, mdta: key=auxiliary.tracks.offset, value=400892, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] + initializationData: + data = length 28, hash 410B510 + data = length 9, hash FBADD682 + sample 0: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 1: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 2: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 3: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 4: + time = 0 + flags = 536870913 + data = length 56, hash C4551A2E +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks_interleaved_with_primary_video_tracks.mp4.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks_interleaved_with_primary_video_tracks.mp4.unknown_length.dump new file mode 100644 index 0000000000..451d68da3f --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks_interleaved_with_primary_video_tracks.mp4.unknown_length.dump @@ -0,0 +1,50 @@ +seekMap: + isSeekable = true + duration = 0 + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400276]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] +numberOfTracks = 1 +track 0: + total output bytes = 280 + sample count = 5 + track duration = 0 + format 0: + id = 1 + containerMimeType = video/mp4 + sampleMimeType = video/avc + codecs = avc1.F4000A + maxInputSize = 86 + maxNumReorderSamples = 2 + width = 12 + height = 10 + colorInfo: + colorRange = 1 + lumaBitdepth = 8 + chromaBitdepth = 8 + metadata = entries=[mdta: key=auxiliary.tracks.length, value=1490, mdta: key=auxiliary.tracks.offset, value=400892, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] + initializationData: + data = length 28, hash 410B510 + data = length 9, hash FBADD682 + sample 0: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 1: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 2: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 3: + time = 0 + flags = 1 + data = length 56, hash C4551A2E + sample 4: + time = 0 + flags = 536870913 + data = length 56, hash C4551A2E +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks_interleaved_with_primary_video_tracks.mp4_with_flag_read_Editable_video_tracks b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks_interleaved_with_primary_video_tracks.mp4_with_flag_read_auxiliary_tracks similarity index 82% rename from libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks_interleaved_with_primary_video_tracks.mp4_with_flag_read_Editable_video_tracks rename to libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks_interleaved_with_primary_video_tracks.mp4_with_flag_read_auxiliary_tracks index a4a47a3e90..9925ba98eb 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks_interleaved_with_primary_video_tracks.mp4_with_flag_read_Editable_video_tracks +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_auxiliary_tracks_interleaved_with_primary_video_tracks.mp4_with_flag_read_auxiliary_tracks @@ -25,7 +25,7 @@ track 0: chromaBitdepth = 8 roleFlags = [auxiliary] auxiliaryTrackType = original - metadata = entries=[mdta: key=editable.tracks.map, value=track types = 0,1, mdta: key=editable.tracks.samples.location, value=1, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] + metadata = entries=[mdta: key=auxiliary.tracks.interleaved, value=1, mdta: key=auxiliary.tracks.map, value=track types = 0,1, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] initializationData: data = length 28, hash 410B510 data = length 9, hash FBADD682 @@ -68,7 +68,7 @@ track 1: chromaBitdepth = 8 roleFlags = [auxiliary] auxiliaryTrackType = depth-linear - metadata = entries=[mdta: key=editable.tracks.map, value=track types = 0,1, mdta: key=editable.tracks.samples.location, value=1, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] + metadata = entries=[mdta: key=auxiliary.tracks.interleaved, value=1, mdta: key=auxiliary.tracks.map, value=track types = 0,1, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] initializationData: data = length 28, hash 410B510 data = length 9, hash FBADD682 diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks.mp4.reading_within_gop_sample_dependencies.0.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks.mp4.reading_within_gop_sample_dependencies.0.dump deleted file mode 100644 index 50671d1674..0000000000 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks.mp4.reading_within_gop_sample_dependencies.0.dump +++ /dev/null @@ -1,50 +0,0 @@ -seekMap: - isSeekable = true - duration = 0 - getPosition(0) = [[timeUs=0, position=400052]] - getPosition(1) = [[timeUs=0, position=400276]] - getPosition(0) = [[timeUs=0, position=400052]] - getPosition(0) = [[timeUs=0, position=400052]] -numberOfTracks = 1 -track 0: - total output bytes = 280 - sample count = 5 - track duration = 0 - format 0: - id = 1 - containerMimeType = video/mp4 - sampleMimeType = video/avc - codecs = avc1.F4000A - maxInputSize = 86 - maxNumReorderSamples = 2 - width = 12 - height = 10 - colorInfo: - colorRange = 1 - lumaBitdepth = 8 - chromaBitdepth = 8 - metadata = entries=[mdta: key=editable.tracks.offset, value=400332, mdta: key=editable.tracks.length, value=400628, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] - initializationData: - data = length 28, hash 410B510 - data = length 9, hash FBADD682 - sample 0: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 1: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 2: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 3: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 4: - time = 0 - flags = 536870913 - data = length 56, hash C4551A2E -tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks.mp4.reading_within_gop_sample_dependencies.1.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks.mp4.reading_within_gop_sample_dependencies.1.dump deleted file mode 100644 index 50671d1674..0000000000 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks.mp4.reading_within_gop_sample_dependencies.1.dump +++ /dev/null @@ -1,50 +0,0 @@ -seekMap: - isSeekable = true - duration = 0 - getPosition(0) = [[timeUs=0, position=400052]] - getPosition(1) = [[timeUs=0, position=400276]] - getPosition(0) = [[timeUs=0, position=400052]] - getPosition(0) = [[timeUs=0, position=400052]] -numberOfTracks = 1 -track 0: - total output bytes = 280 - sample count = 5 - track duration = 0 - format 0: - id = 1 - containerMimeType = video/mp4 - sampleMimeType = video/avc - codecs = avc1.F4000A - maxInputSize = 86 - maxNumReorderSamples = 2 - width = 12 - height = 10 - colorInfo: - colorRange = 1 - lumaBitdepth = 8 - chromaBitdepth = 8 - metadata = entries=[mdta: key=editable.tracks.offset, value=400332, mdta: key=editable.tracks.length, value=400628, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] - initializationData: - data = length 28, hash 410B510 - data = length 9, hash FBADD682 - sample 0: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 1: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 2: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 3: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 4: - time = 0 - flags = 536870913 - data = length 56, hash C4551A2E -tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks.mp4.reading_within_gop_sample_dependencies.2.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks.mp4.reading_within_gop_sample_dependencies.2.dump deleted file mode 100644 index 50671d1674..0000000000 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks.mp4.reading_within_gop_sample_dependencies.2.dump +++ /dev/null @@ -1,50 +0,0 @@ -seekMap: - isSeekable = true - duration = 0 - getPosition(0) = [[timeUs=0, position=400052]] - getPosition(1) = [[timeUs=0, position=400276]] - getPosition(0) = [[timeUs=0, position=400052]] - getPosition(0) = [[timeUs=0, position=400052]] -numberOfTracks = 1 -track 0: - total output bytes = 280 - sample count = 5 - track duration = 0 - format 0: - id = 1 - containerMimeType = video/mp4 - sampleMimeType = video/avc - codecs = avc1.F4000A - maxInputSize = 86 - maxNumReorderSamples = 2 - width = 12 - height = 10 - colorInfo: - colorRange = 1 - lumaBitdepth = 8 - chromaBitdepth = 8 - metadata = entries=[mdta: key=editable.tracks.offset, value=400332, mdta: key=editable.tracks.length, value=400628, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] - initializationData: - data = length 28, hash 410B510 - data = length 9, hash FBADD682 - sample 0: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 1: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 2: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 3: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 4: - time = 0 - flags = 536870913 - data = length 56, hash C4551A2E -tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks.mp4.reading_within_gop_sample_dependencies.3.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks.mp4.reading_within_gop_sample_dependencies.3.dump deleted file mode 100644 index 50671d1674..0000000000 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks.mp4.reading_within_gop_sample_dependencies.3.dump +++ /dev/null @@ -1,50 +0,0 @@ -seekMap: - isSeekable = true - duration = 0 - getPosition(0) = [[timeUs=0, position=400052]] - getPosition(1) = [[timeUs=0, position=400276]] - getPosition(0) = [[timeUs=0, position=400052]] - getPosition(0) = [[timeUs=0, position=400052]] -numberOfTracks = 1 -track 0: - total output bytes = 280 - sample count = 5 - track duration = 0 - format 0: - id = 1 - containerMimeType = video/mp4 - sampleMimeType = video/avc - codecs = avc1.F4000A - maxInputSize = 86 - maxNumReorderSamples = 2 - width = 12 - height = 10 - colorInfo: - colorRange = 1 - lumaBitdepth = 8 - chromaBitdepth = 8 - metadata = entries=[mdta: key=editable.tracks.offset, value=400332, mdta: key=editable.tracks.length, value=400628, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] - initializationData: - data = length 28, hash 410B510 - data = length 9, hash FBADD682 - sample 0: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 1: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 2: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 3: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 4: - time = 0 - flags = 536870913 - data = length 56, hash C4551A2E -tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks.mp4.reading_within_gop_sample_dependencies.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks.mp4.reading_within_gop_sample_dependencies.unknown_length.dump deleted file mode 100644 index 50671d1674..0000000000 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks.mp4.reading_within_gop_sample_dependencies.unknown_length.dump +++ /dev/null @@ -1,50 +0,0 @@ -seekMap: - isSeekable = true - duration = 0 - getPosition(0) = [[timeUs=0, position=400052]] - getPosition(1) = [[timeUs=0, position=400276]] - getPosition(0) = [[timeUs=0, position=400052]] - getPosition(0) = [[timeUs=0, position=400052]] -numberOfTracks = 1 -track 0: - total output bytes = 280 - sample count = 5 - track duration = 0 - format 0: - id = 1 - containerMimeType = video/mp4 - sampleMimeType = video/avc - codecs = avc1.F4000A - maxInputSize = 86 - maxNumReorderSamples = 2 - width = 12 - height = 10 - colorInfo: - colorRange = 1 - lumaBitdepth = 8 - chromaBitdepth = 8 - metadata = entries=[mdta: key=editable.tracks.offset, value=400332, mdta: key=editable.tracks.length, value=400628, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] - initializationData: - data = length 28, hash 410B510 - data = length 9, hash FBADD682 - sample 0: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 1: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 2: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 3: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 4: - time = 0 - flags = 536870913 - data = length 56, hash C4551A2E -tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks.mp4.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks.mp4.unknown_length.dump deleted file mode 100644 index 50671d1674..0000000000 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks.mp4.unknown_length.dump +++ /dev/null @@ -1,50 +0,0 @@ -seekMap: - isSeekable = true - duration = 0 - getPosition(0) = [[timeUs=0, position=400052]] - getPosition(1) = [[timeUs=0, position=400276]] - getPosition(0) = [[timeUs=0, position=400052]] - getPosition(0) = [[timeUs=0, position=400052]] -numberOfTracks = 1 -track 0: - total output bytes = 280 - sample count = 5 - track duration = 0 - format 0: - id = 1 - containerMimeType = video/mp4 - sampleMimeType = video/avc - codecs = avc1.F4000A - maxInputSize = 86 - maxNumReorderSamples = 2 - width = 12 - height = 10 - colorInfo: - colorRange = 1 - lumaBitdepth = 8 - chromaBitdepth = 8 - metadata = entries=[mdta: key=editable.tracks.offset, value=400332, mdta: key=editable.tracks.length, value=400628, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] - initializationData: - data = length 28, hash 410B510 - data = length 9, hash FBADD682 - sample 0: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 1: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 2: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 3: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 4: - time = 0 - flags = 536870913 - data = length 56, hash C4551A2E -tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks_interleaved_with_primary_video_tracks.mp4.0.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks_interleaved_with_primary_video_tracks.mp4.0.dump deleted file mode 100644 index 9dce77ecea..0000000000 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks_interleaved_with_primary_video_tracks.mp4.0.dump +++ /dev/null @@ -1,50 +0,0 @@ -seekMap: - isSeekable = true - duration = 0 - getPosition(0) = [[timeUs=0, position=400052]] - getPosition(1) = [[timeUs=0, position=400276]] - getPosition(0) = [[timeUs=0, position=400052]] - getPosition(0) = [[timeUs=0, position=400052]] -numberOfTracks = 1 -track 0: - total output bytes = 280 - sample count = 5 - track duration = 0 - format 0: - id = 1 - containerMimeType = video/mp4 - sampleMimeType = video/avc - codecs = avc1.F4000A - maxInputSize = 86 - maxNumReorderSamples = 2 - width = 12 - height = 10 - colorInfo: - colorRange = 1 - lumaBitdepth = 8 - chromaBitdepth = 8 - metadata = entries=[mdta: key=editable.tracks.length, value=1493, mdta: key=editable.tracks.offset, value=400892, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] - initializationData: - data = length 28, hash 410B510 - data = length 9, hash FBADD682 - sample 0: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 1: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 2: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 3: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 4: - time = 0 - flags = 536870913 - data = length 56, hash C4551A2E -tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks_interleaved_with_primary_video_tracks.mp4.1.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks_interleaved_with_primary_video_tracks.mp4.1.dump deleted file mode 100644 index 9dce77ecea..0000000000 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks_interleaved_with_primary_video_tracks.mp4.1.dump +++ /dev/null @@ -1,50 +0,0 @@ -seekMap: - isSeekable = true - duration = 0 - getPosition(0) = [[timeUs=0, position=400052]] - getPosition(1) = [[timeUs=0, position=400276]] - getPosition(0) = [[timeUs=0, position=400052]] - getPosition(0) = [[timeUs=0, position=400052]] -numberOfTracks = 1 -track 0: - total output bytes = 280 - sample count = 5 - track duration = 0 - format 0: - id = 1 - containerMimeType = video/mp4 - sampleMimeType = video/avc - codecs = avc1.F4000A - maxInputSize = 86 - maxNumReorderSamples = 2 - width = 12 - height = 10 - colorInfo: - colorRange = 1 - lumaBitdepth = 8 - chromaBitdepth = 8 - metadata = entries=[mdta: key=editable.tracks.length, value=1493, mdta: key=editable.tracks.offset, value=400892, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] - initializationData: - data = length 28, hash 410B510 - data = length 9, hash FBADD682 - sample 0: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 1: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 2: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 3: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 4: - time = 0 - flags = 536870913 - data = length 56, hash C4551A2E -tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks_interleaved_with_primary_video_tracks.mp4.2.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks_interleaved_with_primary_video_tracks.mp4.2.dump deleted file mode 100644 index 9dce77ecea..0000000000 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks_interleaved_with_primary_video_tracks.mp4.2.dump +++ /dev/null @@ -1,50 +0,0 @@ -seekMap: - isSeekable = true - duration = 0 - getPosition(0) = [[timeUs=0, position=400052]] - getPosition(1) = [[timeUs=0, position=400276]] - getPosition(0) = [[timeUs=0, position=400052]] - getPosition(0) = [[timeUs=0, position=400052]] -numberOfTracks = 1 -track 0: - total output bytes = 280 - sample count = 5 - track duration = 0 - format 0: - id = 1 - containerMimeType = video/mp4 - sampleMimeType = video/avc - codecs = avc1.F4000A - maxInputSize = 86 - maxNumReorderSamples = 2 - width = 12 - height = 10 - colorInfo: - colorRange = 1 - lumaBitdepth = 8 - chromaBitdepth = 8 - metadata = entries=[mdta: key=editable.tracks.length, value=1493, mdta: key=editable.tracks.offset, value=400892, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] - initializationData: - data = length 28, hash 410B510 - data = length 9, hash FBADD682 - sample 0: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 1: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 2: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 3: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 4: - time = 0 - flags = 536870913 - data = length 56, hash C4551A2E -tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks_interleaved_with_primary_video_tracks.mp4.3.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks_interleaved_with_primary_video_tracks.mp4.3.dump deleted file mode 100644 index 9dce77ecea..0000000000 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks_interleaved_with_primary_video_tracks.mp4.3.dump +++ /dev/null @@ -1,50 +0,0 @@ -seekMap: - isSeekable = true - duration = 0 - getPosition(0) = [[timeUs=0, position=400052]] - getPosition(1) = [[timeUs=0, position=400276]] - getPosition(0) = [[timeUs=0, position=400052]] - getPosition(0) = [[timeUs=0, position=400052]] -numberOfTracks = 1 -track 0: - total output bytes = 280 - sample count = 5 - track duration = 0 - format 0: - id = 1 - containerMimeType = video/mp4 - sampleMimeType = video/avc - codecs = avc1.F4000A - maxInputSize = 86 - maxNumReorderSamples = 2 - width = 12 - height = 10 - colorInfo: - colorRange = 1 - lumaBitdepth = 8 - chromaBitdepth = 8 - metadata = entries=[mdta: key=editable.tracks.length, value=1493, mdta: key=editable.tracks.offset, value=400892, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] - initializationData: - data = length 28, hash 410B510 - data = length 9, hash FBADD682 - sample 0: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 1: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 2: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 3: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 4: - time = 0 - flags = 536870913 - data = length 56, hash C4551A2E -tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks_interleaved_with_primary_video_tracks.mp4.reading_within_gop_sample_dependencies.0.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks_interleaved_with_primary_video_tracks.mp4.reading_within_gop_sample_dependencies.0.dump deleted file mode 100644 index 9dce77ecea..0000000000 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks_interleaved_with_primary_video_tracks.mp4.reading_within_gop_sample_dependencies.0.dump +++ /dev/null @@ -1,50 +0,0 @@ -seekMap: - isSeekable = true - duration = 0 - getPosition(0) = [[timeUs=0, position=400052]] - getPosition(1) = [[timeUs=0, position=400276]] - getPosition(0) = [[timeUs=0, position=400052]] - getPosition(0) = [[timeUs=0, position=400052]] -numberOfTracks = 1 -track 0: - total output bytes = 280 - sample count = 5 - track duration = 0 - format 0: - id = 1 - containerMimeType = video/mp4 - sampleMimeType = video/avc - codecs = avc1.F4000A - maxInputSize = 86 - maxNumReorderSamples = 2 - width = 12 - height = 10 - colorInfo: - colorRange = 1 - lumaBitdepth = 8 - chromaBitdepth = 8 - metadata = entries=[mdta: key=editable.tracks.length, value=1493, mdta: key=editable.tracks.offset, value=400892, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] - initializationData: - data = length 28, hash 410B510 - data = length 9, hash FBADD682 - sample 0: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 1: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 2: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 3: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 4: - time = 0 - flags = 536870913 - data = length 56, hash C4551A2E -tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks_interleaved_with_primary_video_tracks.mp4.reading_within_gop_sample_dependencies.1.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks_interleaved_with_primary_video_tracks.mp4.reading_within_gop_sample_dependencies.1.dump deleted file mode 100644 index 9dce77ecea..0000000000 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks_interleaved_with_primary_video_tracks.mp4.reading_within_gop_sample_dependencies.1.dump +++ /dev/null @@ -1,50 +0,0 @@ -seekMap: - isSeekable = true - duration = 0 - getPosition(0) = [[timeUs=0, position=400052]] - getPosition(1) = [[timeUs=0, position=400276]] - getPosition(0) = [[timeUs=0, position=400052]] - getPosition(0) = [[timeUs=0, position=400052]] -numberOfTracks = 1 -track 0: - total output bytes = 280 - sample count = 5 - track duration = 0 - format 0: - id = 1 - containerMimeType = video/mp4 - sampleMimeType = video/avc - codecs = avc1.F4000A - maxInputSize = 86 - maxNumReorderSamples = 2 - width = 12 - height = 10 - colorInfo: - colorRange = 1 - lumaBitdepth = 8 - chromaBitdepth = 8 - metadata = entries=[mdta: key=editable.tracks.length, value=1493, mdta: key=editable.tracks.offset, value=400892, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] - initializationData: - data = length 28, hash 410B510 - data = length 9, hash FBADD682 - sample 0: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 1: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 2: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 3: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 4: - time = 0 - flags = 536870913 - data = length 56, hash C4551A2E -tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks_interleaved_with_primary_video_tracks.mp4.reading_within_gop_sample_dependencies.2.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks_interleaved_with_primary_video_tracks.mp4.reading_within_gop_sample_dependencies.2.dump deleted file mode 100644 index 9dce77ecea..0000000000 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks_interleaved_with_primary_video_tracks.mp4.reading_within_gop_sample_dependencies.2.dump +++ /dev/null @@ -1,50 +0,0 @@ -seekMap: - isSeekable = true - duration = 0 - getPosition(0) = [[timeUs=0, position=400052]] - getPosition(1) = [[timeUs=0, position=400276]] - getPosition(0) = [[timeUs=0, position=400052]] - getPosition(0) = [[timeUs=0, position=400052]] -numberOfTracks = 1 -track 0: - total output bytes = 280 - sample count = 5 - track duration = 0 - format 0: - id = 1 - containerMimeType = video/mp4 - sampleMimeType = video/avc - codecs = avc1.F4000A - maxInputSize = 86 - maxNumReorderSamples = 2 - width = 12 - height = 10 - colorInfo: - colorRange = 1 - lumaBitdepth = 8 - chromaBitdepth = 8 - metadata = entries=[mdta: key=editable.tracks.length, value=1493, mdta: key=editable.tracks.offset, value=400892, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] - initializationData: - data = length 28, hash 410B510 - data = length 9, hash FBADD682 - sample 0: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 1: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 2: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 3: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 4: - time = 0 - flags = 536870913 - data = length 56, hash C4551A2E -tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks_interleaved_with_primary_video_tracks.mp4.reading_within_gop_sample_dependencies.3.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks_interleaved_with_primary_video_tracks.mp4.reading_within_gop_sample_dependencies.3.dump deleted file mode 100644 index 9dce77ecea..0000000000 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks_interleaved_with_primary_video_tracks.mp4.reading_within_gop_sample_dependencies.3.dump +++ /dev/null @@ -1,50 +0,0 @@ -seekMap: - isSeekable = true - duration = 0 - getPosition(0) = [[timeUs=0, position=400052]] - getPosition(1) = [[timeUs=0, position=400276]] - getPosition(0) = [[timeUs=0, position=400052]] - getPosition(0) = [[timeUs=0, position=400052]] -numberOfTracks = 1 -track 0: - total output bytes = 280 - sample count = 5 - track duration = 0 - format 0: - id = 1 - containerMimeType = video/mp4 - sampleMimeType = video/avc - codecs = avc1.F4000A - maxInputSize = 86 - maxNumReorderSamples = 2 - width = 12 - height = 10 - colorInfo: - colorRange = 1 - lumaBitdepth = 8 - chromaBitdepth = 8 - metadata = entries=[mdta: key=editable.tracks.length, value=1493, mdta: key=editable.tracks.offset, value=400892, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] - initializationData: - data = length 28, hash 410B510 - data = length 9, hash FBADD682 - sample 0: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 1: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 2: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 3: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 4: - time = 0 - flags = 536870913 - data = length 56, hash C4551A2E -tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks_interleaved_with_primary_video_tracks.mp4.reading_within_gop_sample_dependencies.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks_interleaved_with_primary_video_tracks.mp4.reading_within_gop_sample_dependencies.unknown_length.dump deleted file mode 100644 index 9dce77ecea..0000000000 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks_interleaved_with_primary_video_tracks.mp4.reading_within_gop_sample_dependencies.unknown_length.dump +++ /dev/null @@ -1,50 +0,0 @@ -seekMap: - isSeekable = true - duration = 0 - getPosition(0) = [[timeUs=0, position=400052]] - getPosition(1) = [[timeUs=0, position=400276]] - getPosition(0) = [[timeUs=0, position=400052]] - getPosition(0) = [[timeUs=0, position=400052]] -numberOfTracks = 1 -track 0: - total output bytes = 280 - sample count = 5 - track duration = 0 - format 0: - id = 1 - containerMimeType = video/mp4 - sampleMimeType = video/avc - codecs = avc1.F4000A - maxInputSize = 86 - maxNumReorderSamples = 2 - width = 12 - height = 10 - colorInfo: - colorRange = 1 - lumaBitdepth = 8 - chromaBitdepth = 8 - metadata = entries=[mdta: key=editable.tracks.length, value=1493, mdta: key=editable.tracks.offset, value=400892, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] - initializationData: - data = length 28, hash 410B510 - data = length 9, hash FBADD682 - sample 0: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 1: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 2: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 3: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 4: - time = 0 - flags = 536870913 - data = length 56, hash C4551A2E -tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks_interleaved_with_primary_video_tracks.mp4.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks_interleaved_with_primary_video_tracks.mp4.unknown_length.dump deleted file mode 100644 index 9dce77ecea..0000000000 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_fake_editable_video_tracks_interleaved_with_primary_video_tracks.mp4.unknown_length.dump +++ /dev/null @@ -1,50 +0,0 @@ -seekMap: - isSeekable = true - duration = 0 - getPosition(0) = [[timeUs=0, position=400052]] - getPosition(1) = [[timeUs=0, position=400276]] - getPosition(0) = [[timeUs=0, position=400052]] - getPosition(0) = [[timeUs=0, position=400052]] -numberOfTracks = 1 -track 0: - total output bytes = 280 - sample count = 5 - track duration = 0 - format 0: - id = 1 - containerMimeType = video/mp4 - sampleMimeType = video/avc - codecs = avc1.F4000A - maxInputSize = 86 - maxNumReorderSamples = 2 - width = 12 - height = 10 - colorInfo: - colorRange = 1 - lumaBitdepth = 8 - chromaBitdepth = 8 - metadata = entries=[mdta: key=editable.tracks.length, value=1493, mdta: key=editable.tracks.offset, value=400892, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] - initializationData: - data = length 28, hash 410B510 - data = length 9, hash FBADD682 - sample 0: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 1: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 2: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 3: - time = 0 - flags = 1 - data = length 56, hash C4551A2E - sample 4: - time = 0 - flags = 536870913 - data = length 56, hash C4551A2E -tracksEnded = true diff --git a/libraries/test_data/src/test/assets/media/mp4/sample_with_fake_editable_video_tracks.mp4 b/libraries/test_data/src/test/assets/media/mp4/sample_with_fake_auxiliary_tracks.mp4 similarity index 99% rename from libraries/test_data/src/test/assets/media/mp4/sample_with_fake_editable_video_tracks.mp4 rename to libraries/test_data/src/test/assets/media/mp4/sample_with_fake_auxiliary_tracks.mp4 index ea531b2789eb2d05d7c6f51c2b4a2c5fcf743c37..2acd96695257ca0578cf6a5b7b5721c0d7eb8309 100644 GIT binary patch delta 372 zcmX@`(cr*Gg9-ACg%cHu8TU^wkYUsC_RCJKEM|ZJCLkrBn^KaPSXz;plbKjlsaH~z zn4Dd#my?>8UXp=RIzKI~IJIOlE2A2d%$Lc!jB-rUXEysXIx;beH}^BQ_cJpBF%uAj z*epQIy1k#7O-y|Iaw#@VMxMlql2ot@*kry;kYi$9Hc=s;l^H0q4eZAH05mtMV0B|= zUP)?EPHJLVY6?)R3|2L{i3LD8+svHe5+E%J#Ed{Jn37nM2&BD%7z|{9Bq%UMz!KaL hK?X)921cN-?3uQw$g?>xF+RfMw}&Fzo6UG^nE(%mWFPvkYUsC^vO=GEM|ZJCLkr3n^KaPnvz+Pn3R*MS5lOi zoL#J!pO#jfT7pY9Cp9mjtDN6x6f=%Yj1UV+wl@k^6S($+%JHgIO2u5?J zG&X1ECKdp7Xke2nPRuRHNiEjP$xlu!$;{6KszAEcSD&ov9uyHCo{3AQm>>a zF*&m`1`EglX^^i)z!KabVIW{+Vqo0t%P7ILJy($} Gg$V$HQc@NG delta 289 zcmX?iT;k$!i3#$I`4bh28TU?KAjhU*?US8aSD&oH6^noF)1fiucRn3 zIlEXdCp9m CONTAINER_BOXES = ImmutableSet.of( - "moov", "trak", "mdia", "minf", "stbl", "edts", "meta", "mvex", "moof", "traf", "edvd"); + "moov", "trak", "mdia", "minf", "stbl", "edts", "meta", "mvex", "moof", "traf", "axte"); private final ParsableByteArray box; /***