From bd399eb60152d0d2c16ffa100124bb202716b4e3 Mon Sep 17 00:00:00 2001 From: sheenachhabra Date: Thu, 1 Aug 2024 05:53:44 -0700 Subject: [PATCH] Refactor get editable track types from map logic The new method will be reused when Mp4Extractor need to parse this metadata. PiperOrigin-RevId: 658372567 --- .../media3/container/MdtaMetadataEntry.java | 23 ++++++++++++------- .../mp4_with_editable_video_tracks.mp4.dump | 4 ++-- 2 files changed, 17 insertions(+), 10 deletions(-) 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 510e58d6dc..6daf669c5e 100644 --- a/libraries/container/src/main/java/androidx/media3/container/MdtaMetadataEntry.java +++ b/libraries/container/src/main/java/androidx/media3/container/MdtaMetadataEntry.java @@ -24,8 +24,11 @@ import androidx.media3.common.Metadata; import androidx.media3.common.util.ParsableByteArray; import androidx.media3.common.util.UnstableApi; import androidx.media3.common.util.Util; +import com.google.common.base.Joiner; import com.google.common.primitives.Ints; +import java.util.ArrayList; import java.util.Arrays; +import java.util.List; /** * Stores extensible metadata with handler type 'mdta'. See also the QuickTime File Format @@ -202,16 +205,20 @@ public final class MdtaMetadataEntry implements Metadata.Entry { }; private static String getFormattedValueForEditableTracksMap(byte[] value) { - // Value has 1 byte version, 1 byte track count, n bytes track types. - int numberOfTracks = value[1]; StringBuilder sb = new StringBuilder(); sb.append("track types = "); - for (int i = 0; i < numberOfTracks; i++) { - sb.append(value[i + 2]); - if (i < numberOfTracks - 1) { - sb.append(", "); - } - } + List trackTypes = getEditableTrackTypesFromMap(value); + Joiner.on(',').appendTo(sb, trackTypes); return sb.toString(); } + + private static List getEditableTrackTypesFromMap(byte[] value) { + // Value has 1 byte version, 1 byte track count, n bytes track types. + int numberOfTracks = value[1]; + List trackTypes = new ArrayList<>(); + for (int i = 0; i < numberOfTracks; i++) { + trackTypes.add((int) value[i + 2]); + } + return trackTypes; + } } diff --git a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_editable_video_tracks.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_editable_video_tracks.mp4.dump index 4f402ff103..dea103df36 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_editable_video_tracks.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_editable_video_tracks.mp4.dump @@ -21,7 +21,7 @@ track 0: colorRange = 1 lumaBitdepth = 8 chromaBitdepth = 8 - metadata = entries=[mdta: key=editable.tracks.map, value=track types = 0, 1, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] + metadata = entries=[mdta: key=editable.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 @@ -60,7 +60,7 @@ track 1: colorRange = 1 lumaBitdepth = 8 chromaBitdepth = 8 - metadata = entries=[mdta: key=editable.tracks.map, value=track types = 0, 1, Mp4Timestamp: creation time=1000000, modification time=5000000, timescale=10000] + metadata = entries=[mdta: key=editable.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