From e194225b329b47cacbffee43e442a7b65feb4b49 Mon Sep 17 00:00:00 2001 From: ibaker Date: Fri, 26 Apr 2024 03:27:31 -0700 Subject: [PATCH] Fix parsing some MP4 metadata fields we wrongly assumed were 1 byte This fixes parsing the `gnre` and `tmpo` values, as seen in the test dump changes in this CL. Issue: androidx/media#1305 PiperOrigin-RevId: 628352773 --- RELEASENOTES.md | 2 + .../media3/extractor/mp4/MetadataUtil.java | 47 ++++++++++++------- .../mp4/sample_with_metadata.mp4.0.dump | 4 +- .../mp4/sample_with_metadata.mp4.1.dump | 4 +- .../mp4/sample_with_metadata.mp4.2.dump | 4 +- .../mp4/sample_with_metadata.mp4.3.dump | 4 +- ...mple_with_metadata.mp4.unknown_length.dump | 4 +- .../mp4/sample_with_numeric_genre.mp4.0.dump | 4 +- .../mp4/sample_with_numeric_genre.mp4.1.dump | 4 +- .../mp4/sample_with_numeric_genre.mp4.2.dump | 4 +- .../mp4/sample_with_numeric_genre.mp4.3.dump | 4 +- ...with_numeric_genre.mp4.unknown_length.dump | 4 +- 12 files changed, 51 insertions(+), 38 deletions(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 149da72d7f..baa8004f24 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -25,6 +25,8 @@ (`soal`), 'artist sort' (`soar`) and 'album artist sort' (`soaa`) MP4 tags were wrongly mapped to the `TSO2`, `TSOA` and `TSOP` ID3 tags ([#1302](https://github.com/androidx/media/issues/1302)). + * Fix reading of MP4 (/iTunes) numeric `gnre` (genre) and `tmpo` (tempo) + tags when the value is more than one byte long. * Image: * DRM: * Allow setting a `LoadErrorHandlingPolicy` on diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/MetadataUtil.java b/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/MetadataUtil.java index 6ec81e6840..9216081464 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/MetadataUtil.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/MetadataUtil.java @@ -377,9 +377,9 @@ import com.google.common.collect.ImmutableList; } else if (type == TYPE_TRACK_NUMBER) { return parseIndexAndCountAttribute(type, "TRCK", ilst); } else if (type == TYPE_TEMPO) { - return parseUint8Attribute(type, "TBPM", ilst, true, false); + return parseIntegerAttribute(type, "TBPM", ilst, true, false); } else if (type == TYPE_COMPILATION) { - return parseUint8Attribute(type, "TCMP", ilst, true, true); + return parseIntegerAttribute(type, "TCMP", ilst, true, true); } else if (type == TYPE_COVER_ART) { return parseCoverArt(ilst); } else if (type == TYPE_ALBUM_ARTIST) { @@ -395,9 +395,9 @@ import com.google.common.collect.ImmutableList; } else if (type == TYPE_SORT_COMPOSER) { return parseTextAttribute(type, "TSOC", ilst); } else if (type == TYPE_RATING) { - return parseUint8Attribute(type, "ITUNESADVISORY", ilst, false, false); + return parseIntegerAttribute(type, "ITUNESADVISORY", ilst, false, false); } else if (type == TYPE_GAPLESS_ALBUM) { - return parseUint8Attribute(type, "ITUNESGAPLESS", ilst, false, true); + return parseIntegerAttribute(type, "ITUNESGAPLESS", ilst, false, true); } else if (type == TYPE_TV_SORT_SHOW) { return parseTextAttribute(type, "TVSHOWSORT", ilst); } else if (type == TYPE_TV_SHOW) { @@ -468,13 +468,13 @@ import com.google.common.collect.ImmutableList; } @Nullable - private static Id3Frame parseUint8Attribute( + private static Id3Frame parseIntegerAttribute( int type, String id, ParsableByteArray data, boolean isTextInformationFrame, boolean isBoolean) { - int value = parseUint8AttributeValue(data); + int value = parseIntegerAttribute(data); if (isBoolean) { value = min(1, value); } @@ -488,6 +488,28 @@ import com.google.common.collect.ImmutableList; return null; } + private static int parseIntegerAttribute(ParsableByteArray data) { + int atomSize = data.readInt(); + int atomType = data.readInt(); + if (atomType == Atom.TYPE_data) { + data.skipBytes(8); // version (1), flags (3), empty (4) + switch (atomSize - 16) { + case 1: + return data.readUnsignedByte(); + case 2: + return data.readUnsignedShort(); + case 3: + return data.readUnsignedInt24(); + case 4: + if ((data.peekUnsignedByte() & 0x80) == 0) { + return data.readUnsignedIntToInt(); + } + } + } + Log.w(TAG, "Failed to parse data atom to int"); + return -1; + } + @Nullable private static TextInformationFrame parseIndexAndCountAttribute( int type, String attributeName, ParsableByteArray data) { @@ -512,7 +534,7 @@ import com.google.common.collect.ImmutableList; @Nullable private static TextInformationFrame parseStandardGenreAttribute(ParsableByteArray data) { - int genreCode = parseUint8AttributeValue(data); + int genreCode = parseIntegerAttribute(data); @Nullable String genreString = (0 < genreCode && genreCode <= STANDARD_GENRES.length) @@ -582,15 +604,4 @@ import com.google.common.collect.ImmutableList; String value = data.readNullTerminatedString(dataAtomSize - 16); return new InternalFrame(domain, name, value); } - - private static int parseUint8AttributeValue(ParsableByteArray data) { - data.skipBytes(4); // atomSize - int atomType = data.readInt(); - if (atomType == Atom.TYPE_data) { - data.skipBytes(8); // version (1), flags (3), empty (4) - return data.readUnsignedByte(); - } - Log.w(TAG, "Failed to parse uint8 attribute value"); - return -1; - } } diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_metadata.mp4.0.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_metadata.mp4.0.dump index 5e1d059ba7..0845437fd1 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_metadata.mp4.0.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_metadata.mp4.0.dump @@ -20,7 +20,7 @@ track 0: colorInfo: lumaBitdepth = 8 chromaBitdepth = 8 - metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], TPE1: description=null: values=[Test Artist], TALB: description=null: values=[Test Album], TRCK: description=null: values=[2/12], TPOS: description=null: values=[2/3], TDRC: description=null: values=[2024], TCON: description=null: values=[Gorpcore], TBPM: description=null: values=[0], TCMP: description=null: values=[1], COMM: language=und, description=ITUNESADVISORY, text=2, COMM: language=und, description=ITUNESGAPLESS, text=1, TSOP: description=null: values=[Sorting Artist], TSOA: description=null: values=[Sorting Album], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3796909510, timescale=1000] + metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], TPE1: description=null: values=[Test Artist], TALB: description=null: values=[Test Album], TRCK: description=null: values=[2/12], TPOS: description=null: values=[2/3], TDRC: description=null: values=[2024], TCON: description=null: values=[Gorpcore], TBPM: description=null: values=[120], TCMP: description=null: values=[1], COMM: language=und, description=ITUNESADVISORY, text=2, COMM: language=und, description=ITUNESGAPLESS, text=1, TSOP: description=null: values=[Sorting Artist], TSOA: description=null: values=[Sorting Album], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3796909510, timescale=1000] initializationData: data = length 29, hash 4746B5D9 data = length 10, hash 7A0D0F2B @@ -156,7 +156,7 @@ track 1: channelCount = 1 sampleRate = 44100 language = und - metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], TPE1: description=null: values=[Test Artist], TALB: description=null: values=[Test Album], TRCK: description=null: values=[2/12], TPOS: description=null: values=[2/3], TDRC: description=null: values=[2024], TCON: description=null: values=[Gorpcore], TBPM: description=null: values=[0], TCMP: description=null: values=[1], COMM: language=und, description=ITUNESADVISORY, text=2, COMM: language=und, description=ITUNESGAPLESS, text=1, TSOP: description=null: values=[Sorting Artist], TSOA: description=null: values=[Sorting Album], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3796909510, timescale=1000] + metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], TPE1: description=null: values=[Test Artist], TALB: description=null: values=[Test Album], TRCK: description=null: values=[2/12], TPOS: description=null: values=[2/3], TDRC: description=null: values=[2024], TCON: description=null: values=[Gorpcore], TBPM: description=null: values=[120], TCMP: description=null: values=[1], COMM: language=und, description=ITUNESADVISORY, text=2, COMM: language=und, description=ITUNESGAPLESS, text=1, TSOP: description=null: values=[Sorting Artist], TSOA: description=null: values=[Sorting Album], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3796909510, timescale=1000] initializationData: data = length 2, hash 5F7 sample 0: diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_metadata.mp4.1.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_metadata.mp4.1.dump index aa8b83d4b0..8a5d8cd1e0 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_metadata.mp4.1.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_metadata.mp4.1.dump @@ -20,7 +20,7 @@ track 0: colorInfo: lumaBitdepth = 8 chromaBitdepth = 8 - metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], TPE1: description=null: values=[Test Artist], TALB: description=null: values=[Test Album], TRCK: description=null: values=[2/12], TPOS: description=null: values=[2/3], TDRC: description=null: values=[2024], TCON: description=null: values=[Gorpcore], TBPM: description=null: values=[0], TCMP: description=null: values=[1], COMM: language=und, description=ITUNESADVISORY, text=2, COMM: language=und, description=ITUNESGAPLESS, text=1, TSOP: description=null: values=[Sorting Artist], TSOA: description=null: values=[Sorting Album], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3796909510, timescale=1000] + metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], TPE1: description=null: values=[Test Artist], TALB: description=null: values=[Test Album], TRCK: description=null: values=[2/12], TPOS: description=null: values=[2/3], TDRC: description=null: values=[2024], TCON: description=null: values=[Gorpcore], TBPM: description=null: values=[120], TCMP: description=null: values=[1], COMM: language=und, description=ITUNESADVISORY, text=2, COMM: language=und, description=ITUNESGAPLESS, text=1, TSOP: description=null: values=[Sorting Artist], TSOA: description=null: values=[Sorting Album], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3796909510, timescale=1000] initializationData: data = length 29, hash 4746B5D9 data = length 10, hash 7A0D0F2B @@ -156,7 +156,7 @@ track 1: channelCount = 1 sampleRate = 44100 language = und - metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], TPE1: description=null: values=[Test Artist], TALB: description=null: values=[Test Album], TRCK: description=null: values=[2/12], TPOS: description=null: values=[2/3], TDRC: description=null: values=[2024], TCON: description=null: values=[Gorpcore], TBPM: description=null: values=[0], TCMP: description=null: values=[1], COMM: language=und, description=ITUNESADVISORY, text=2, COMM: language=und, description=ITUNESGAPLESS, text=1, TSOP: description=null: values=[Sorting Artist], TSOA: description=null: values=[Sorting Album], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3796909510, timescale=1000] + metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], TPE1: description=null: values=[Test Artist], TALB: description=null: values=[Test Album], TRCK: description=null: values=[2/12], TPOS: description=null: values=[2/3], TDRC: description=null: values=[2024], TCON: description=null: values=[Gorpcore], TBPM: description=null: values=[120], TCMP: description=null: values=[1], COMM: language=und, description=ITUNESADVISORY, text=2, COMM: language=und, description=ITUNESGAPLESS, text=1, TSOP: description=null: values=[Sorting Artist], TSOA: description=null: values=[Sorting Album], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3796909510, timescale=1000] initializationData: data = length 2, hash 5F7 sample 0: diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_metadata.mp4.2.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_metadata.mp4.2.dump index a5e63c24e5..b61bd49869 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_metadata.mp4.2.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_metadata.mp4.2.dump @@ -20,7 +20,7 @@ track 0: colorInfo: lumaBitdepth = 8 chromaBitdepth = 8 - metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], TPE1: description=null: values=[Test Artist], TALB: description=null: values=[Test Album], TRCK: description=null: values=[2/12], TPOS: description=null: values=[2/3], TDRC: description=null: values=[2024], TCON: description=null: values=[Gorpcore], TBPM: description=null: values=[0], TCMP: description=null: values=[1], COMM: language=und, description=ITUNESADVISORY, text=2, COMM: language=und, description=ITUNESGAPLESS, text=1, TSOP: description=null: values=[Sorting Artist], TSOA: description=null: values=[Sorting Album], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3796909510, timescale=1000] + metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], TPE1: description=null: values=[Test Artist], TALB: description=null: values=[Test Album], TRCK: description=null: values=[2/12], TPOS: description=null: values=[2/3], TDRC: description=null: values=[2024], TCON: description=null: values=[Gorpcore], TBPM: description=null: values=[120], TCMP: description=null: values=[1], COMM: language=und, description=ITUNESADVISORY, text=2, COMM: language=und, description=ITUNESGAPLESS, text=1, TSOP: description=null: values=[Sorting Artist], TSOA: description=null: values=[Sorting Album], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3796909510, timescale=1000] initializationData: data = length 29, hash 4746B5D9 data = length 10, hash 7A0D0F2B @@ -156,7 +156,7 @@ track 1: channelCount = 1 sampleRate = 44100 language = und - metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], TPE1: description=null: values=[Test Artist], TALB: description=null: values=[Test Album], TRCK: description=null: values=[2/12], TPOS: description=null: values=[2/3], TDRC: description=null: values=[2024], TCON: description=null: values=[Gorpcore], TBPM: description=null: values=[0], TCMP: description=null: values=[1], COMM: language=und, description=ITUNESADVISORY, text=2, COMM: language=und, description=ITUNESGAPLESS, text=1, TSOP: description=null: values=[Sorting Artist], TSOA: description=null: values=[Sorting Album], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3796909510, timescale=1000] + metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], TPE1: description=null: values=[Test Artist], TALB: description=null: values=[Test Album], TRCK: description=null: values=[2/12], TPOS: description=null: values=[2/3], TDRC: description=null: values=[2024], TCON: description=null: values=[Gorpcore], TBPM: description=null: values=[120], TCMP: description=null: values=[1], COMM: language=und, description=ITUNESADVISORY, text=2, COMM: language=und, description=ITUNESGAPLESS, text=1, TSOP: description=null: values=[Sorting Artist], TSOA: description=null: values=[Sorting Album], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3796909510, timescale=1000] initializationData: data = length 2, hash 5F7 sample 0: diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_metadata.mp4.3.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_metadata.mp4.3.dump index d32357f643..418b0ce43c 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_metadata.mp4.3.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_metadata.mp4.3.dump @@ -20,7 +20,7 @@ track 0: colorInfo: lumaBitdepth = 8 chromaBitdepth = 8 - metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], TPE1: description=null: values=[Test Artist], TALB: description=null: values=[Test Album], TRCK: description=null: values=[2/12], TPOS: description=null: values=[2/3], TDRC: description=null: values=[2024], TCON: description=null: values=[Gorpcore], TBPM: description=null: values=[0], TCMP: description=null: values=[1], COMM: language=und, description=ITUNESADVISORY, text=2, COMM: language=und, description=ITUNESGAPLESS, text=1, TSOP: description=null: values=[Sorting Artist], TSOA: description=null: values=[Sorting Album], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3796909510, timescale=1000] + metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], TPE1: description=null: values=[Test Artist], TALB: description=null: values=[Test Album], TRCK: description=null: values=[2/12], TPOS: description=null: values=[2/3], TDRC: description=null: values=[2024], TCON: description=null: values=[Gorpcore], TBPM: description=null: values=[120], TCMP: description=null: values=[1], COMM: language=und, description=ITUNESADVISORY, text=2, COMM: language=und, description=ITUNESGAPLESS, text=1, TSOP: description=null: values=[Sorting Artist], TSOA: description=null: values=[Sorting Album], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3796909510, timescale=1000] initializationData: data = length 29, hash 4746B5D9 data = length 10, hash 7A0D0F2B @@ -156,7 +156,7 @@ track 1: channelCount = 1 sampleRate = 44100 language = und - metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], TPE1: description=null: values=[Test Artist], TALB: description=null: values=[Test Album], TRCK: description=null: values=[2/12], TPOS: description=null: values=[2/3], TDRC: description=null: values=[2024], TCON: description=null: values=[Gorpcore], TBPM: description=null: values=[0], TCMP: description=null: values=[1], COMM: language=und, description=ITUNESADVISORY, text=2, COMM: language=und, description=ITUNESGAPLESS, text=1, TSOP: description=null: values=[Sorting Artist], TSOA: description=null: values=[Sorting Album], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3796909510, timescale=1000] + metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], TPE1: description=null: values=[Test Artist], TALB: description=null: values=[Test Album], TRCK: description=null: values=[2/12], TPOS: description=null: values=[2/3], TDRC: description=null: values=[2024], TCON: description=null: values=[Gorpcore], TBPM: description=null: values=[120], TCMP: description=null: values=[1], COMM: language=und, description=ITUNESADVISORY, text=2, COMM: language=und, description=ITUNESGAPLESS, text=1, TSOP: description=null: values=[Sorting Artist], TSOA: description=null: values=[Sorting Album], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3796909510, timescale=1000] initializationData: data = length 2, hash 5F7 sample 0: diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_metadata.mp4.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_metadata.mp4.unknown_length.dump index 5e1d059ba7..0845437fd1 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_metadata.mp4.unknown_length.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_metadata.mp4.unknown_length.dump @@ -20,7 +20,7 @@ track 0: colorInfo: lumaBitdepth = 8 chromaBitdepth = 8 - metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], TPE1: description=null: values=[Test Artist], TALB: description=null: values=[Test Album], TRCK: description=null: values=[2/12], TPOS: description=null: values=[2/3], TDRC: description=null: values=[2024], TCON: description=null: values=[Gorpcore], TBPM: description=null: values=[0], TCMP: description=null: values=[1], COMM: language=und, description=ITUNESADVISORY, text=2, COMM: language=und, description=ITUNESGAPLESS, text=1, TSOP: description=null: values=[Sorting Artist], TSOA: description=null: values=[Sorting Album], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3796909510, timescale=1000] + metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], TPE1: description=null: values=[Test Artist], TALB: description=null: values=[Test Album], TRCK: description=null: values=[2/12], TPOS: description=null: values=[2/3], TDRC: description=null: values=[2024], TCON: description=null: values=[Gorpcore], TBPM: description=null: values=[120], TCMP: description=null: values=[1], COMM: language=und, description=ITUNESADVISORY, text=2, COMM: language=und, description=ITUNESGAPLESS, text=1, TSOP: description=null: values=[Sorting Artist], TSOA: description=null: values=[Sorting Album], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3796909510, timescale=1000] initializationData: data = length 29, hash 4746B5D9 data = length 10, hash 7A0D0F2B @@ -156,7 +156,7 @@ track 1: channelCount = 1 sampleRate = 44100 language = und - metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], TPE1: description=null: values=[Test Artist], TALB: description=null: values=[Test Album], TRCK: description=null: values=[2/12], TPOS: description=null: values=[2/3], TDRC: description=null: values=[2024], TCON: description=null: values=[Gorpcore], TBPM: description=null: values=[0], TCMP: description=null: values=[1], COMM: language=und, description=ITUNESADVISORY, text=2, COMM: language=und, description=ITUNESGAPLESS, text=1, TSOP: description=null: values=[Sorting Artist], TSOA: description=null: values=[Sorting Album], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3796909510, timescale=1000] + metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], TPE1: description=null: values=[Test Artist], TALB: description=null: values=[Test Album], TRCK: description=null: values=[2/12], TPOS: description=null: values=[2/3], TDRC: description=null: values=[2024], TCON: description=null: values=[Gorpcore], TBPM: description=null: values=[120], TCMP: description=null: values=[1], COMM: language=und, description=ITUNESADVISORY, text=2, COMM: language=und, description=ITUNESGAPLESS, text=1, TSOP: description=null: values=[Sorting Artist], TSOA: description=null: values=[Sorting Album], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3796909510, timescale=1000] initializationData: data = length 2, hash 5F7 sample 0: diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_numeric_genre.mp4.0.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_numeric_genre.mp4.0.dump index 33f14975bf..6e8acb88f1 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_numeric_genre.mp4.0.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_numeric_genre.mp4.0.dump @@ -20,7 +20,7 @@ track 0: colorInfo: lumaBitdepth = 8 chromaBitdepth = 8 - metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3796908763, timescale=1000] + metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], TCON: description=null: values=[Metal], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3796908763, timescale=1000] initializationData: data = length 29, hash 4746B5D9 data = length 10, hash 7A0D0F2B @@ -156,7 +156,7 @@ track 1: channelCount = 1 sampleRate = 44100 language = und - metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3796908763, timescale=1000] + metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], TCON: description=null: values=[Metal], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3796908763, timescale=1000] initializationData: data = length 2, hash 5F7 sample 0: diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_numeric_genre.mp4.1.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_numeric_genre.mp4.1.dump index b8fe18965c..3d0a9a718c 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_numeric_genre.mp4.1.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_numeric_genre.mp4.1.dump @@ -20,7 +20,7 @@ track 0: colorInfo: lumaBitdepth = 8 chromaBitdepth = 8 - metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3796908763, timescale=1000] + metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], TCON: description=null: values=[Metal], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3796908763, timescale=1000] initializationData: data = length 29, hash 4746B5D9 data = length 10, hash 7A0D0F2B @@ -156,7 +156,7 @@ track 1: channelCount = 1 sampleRate = 44100 language = und - metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3796908763, timescale=1000] + metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], TCON: description=null: values=[Metal], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3796908763, timescale=1000] initializationData: data = length 2, hash 5F7 sample 0: diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_numeric_genre.mp4.2.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_numeric_genre.mp4.2.dump index 76eeaff973..30a3e5faae 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_numeric_genre.mp4.2.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_numeric_genre.mp4.2.dump @@ -20,7 +20,7 @@ track 0: colorInfo: lumaBitdepth = 8 chromaBitdepth = 8 - metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3796908763, timescale=1000] + metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], TCON: description=null: values=[Metal], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3796908763, timescale=1000] initializationData: data = length 29, hash 4746B5D9 data = length 10, hash 7A0D0F2B @@ -156,7 +156,7 @@ track 1: channelCount = 1 sampleRate = 44100 language = und - metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3796908763, timescale=1000] + metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], TCON: description=null: values=[Metal], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3796908763, timescale=1000] initializationData: data = length 2, hash 5F7 sample 0: diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_numeric_genre.mp4.3.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_numeric_genre.mp4.3.dump index cb37e37b0b..1805cfec3b 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_numeric_genre.mp4.3.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_numeric_genre.mp4.3.dump @@ -20,7 +20,7 @@ track 0: colorInfo: lumaBitdepth = 8 chromaBitdepth = 8 - metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3796908763, timescale=1000] + metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], TCON: description=null: values=[Metal], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3796908763, timescale=1000] initializationData: data = length 29, hash 4746B5D9 data = length 10, hash 7A0D0F2B @@ -156,7 +156,7 @@ track 1: channelCount = 1 sampleRate = 44100 language = und - metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3796908763, timescale=1000] + metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], TCON: description=null: values=[Metal], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3796908763, timescale=1000] initializationData: data = length 2, hash 5F7 sample 0: diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_numeric_genre.mp4.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_numeric_genre.mp4.unknown_length.dump index 33f14975bf..6e8acb88f1 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_numeric_genre.mp4.unknown_length.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_numeric_genre.mp4.unknown_length.dump @@ -20,7 +20,7 @@ track 0: colorInfo: lumaBitdepth = 8 chromaBitdepth = 8 - metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3796908763, timescale=1000] + metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], TCON: description=null: values=[Metal], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3796908763, timescale=1000] initializationData: data = length 29, hash 4746B5D9 data = length 10, hash 7A0D0F2B @@ -156,7 +156,7 @@ track 1: channelCount = 1 sampleRate = 44100 language = und - metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3796908763, timescale=1000] + metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], TCON: description=null: values=[Metal], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3796908763, timescale=1000] initializationData: data = length 2, hash 5F7 sample 0: