From 72ab282c0d0b12743182c20f861d80cf81a3680a Mon Sep 17 00:00:00 2001 From: rohks Date: Tue, 8 Oct 2024 09:15:37 -0700 Subject: [PATCH] Ignore `channelCount` and `sampleRate` values read from `iamf` box As per the IAMF spec (https://aomediacodec.github.io/iamf/#iasampleentry-section), `channelCount` and `sampleRate` SHALL be set to `0` and ignored. #cherrypick PiperOrigin-RevId: 683648991 --- .../java/androidx/media3/extractor/mp4/BoxParser.java | 8 ++++++++ .../extractordumps/mp4/sample_fragmented_iamf.mp4.0.dump | 2 -- .../extractordumps/mp4/sample_fragmented_iamf.mp4.1.dump | 2 -- .../extractordumps/mp4/sample_fragmented_iamf.mp4.2.dump | 2 -- .../extractordumps/mp4/sample_fragmented_iamf.mp4.3.dump | 2 -- ...iamf.mp4.reading_within_gop_sample_dependencies.0.dump | 2 -- ...iamf.mp4.reading_within_gop_sample_dependencies.1.dump | 2 -- ...iamf.mp4.reading_within_gop_sample_dependencies.2.dump | 2 -- ...iamf.mp4.reading_within_gop_sample_dependencies.3.dump | 2 -- ...ing_within_gop_sample_dependencies.unknown_length.dump | 2 -- .../mp4/sample_fragmented_iamf.mp4.unknown_length.dump | 2 -- .../test/assets/extractordumps/mp4/sample_iamf.mp4.0.dump | 2 -- .../test/assets/extractordumps/mp4/sample_iamf.mp4.1.dump | 2 -- .../test/assets/extractordumps/mp4/sample_iamf.mp4.2.dump | 2 -- .../test/assets/extractordumps/mp4/sample_iamf.mp4.3.dump | 2 -- ...iamf.mp4.reading_within_gop_sample_dependencies.0.dump | 2 -- ...iamf.mp4.reading_within_gop_sample_dependencies.1.dump | 2 -- ...iamf.mp4.reading_within_gop_sample_dependencies.2.dump | 2 -- ...iamf.mp4.reading_within_gop_sample_dependencies.3.dump | 2 -- ...ing_within_gop_sample_dependencies.unknown_length.dump | 2 -- .../mp4/sample_iamf.mp4.unknown_length.dump | 2 -- 21 files changed, 8 insertions(+), 40 deletions(-) diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/BoxParser.java b/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/BoxParser.java index 5bd693f2f5..88cfa3a8b5 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/BoxParser.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/BoxParser.java @@ -1759,6 +1759,14 @@ public final class BoxParser { return; } + // As per the IAMF spec (https://aomediacodec.github.io/iamf/#iasampleentry-section), + // channelCount and sampleRate SHALL be set to 0 and ignored. We ignore it by using + // Format.NO_VALUE instead of 0. + if (atomType == Mp4Box.TYPE_iamf) { + channelCount = Format.NO_VALUE; + sampleRate = Format.NO_VALUE; + } + int childPosition = parent.getPosition(); if (atomType == Mp4Box.TYPE_enca) { @Nullable diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.0.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.0.dump index 671dbafd4c..e8b970e66f 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.0.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.0.dump @@ -12,8 +12,6 @@ track 0: format 0: id = 1 sampleMimeType = audio/iamf - channelCount = 0 - sampleRate = 0 language = und initializationData: data = length 119, hash 99A80807 diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.1.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.1.dump index 29b4ee4191..8b2fc883e1 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.1.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.1.dump @@ -12,8 +12,6 @@ track 0: format 0: id = 1 sampleMimeType = audio/iamf - channelCount = 0 - sampleRate = 0 language = und initializationData: data = length 119, hash 99A80807 diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.2.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.2.dump index c218c98661..c60469bf41 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.2.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.2.dump @@ -12,8 +12,6 @@ track 0: format 0: id = 1 sampleMimeType = audio/iamf - channelCount = 0 - sampleRate = 0 language = und initializationData: data = length 119, hash 99A80807 diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.3.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.3.dump index 3e3ef6ebfa..b6604d6df8 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.3.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.3.dump @@ -12,8 +12,6 @@ track 0: format 0: id = 1 sampleMimeType = audio/iamf - channelCount = 0 - sampleRate = 0 language = und initializationData: data = length 119, hash 99A80807 diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.reading_within_gop_sample_dependencies.0.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.reading_within_gop_sample_dependencies.0.dump index 671dbafd4c..e8b970e66f 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.reading_within_gop_sample_dependencies.0.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.reading_within_gop_sample_dependencies.0.dump @@ -12,8 +12,6 @@ track 0: format 0: id = 1 sampleMimeType = audio/iamf - channelCount = 0 - sampleRate = 0 language = und initializationData: data = length 119, hash 99A80807 diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.reading_within_gop_sample_dependencies.1.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.reading_within_gop_sample_dependencies.1.dump index 29b4ee4191..8b2fc883e1 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.reading_within_gop_sample_dependencies.1.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.reading_within_gop_sample_dependencies.1.dump @@ -12,8 +12,6 @@ track 0: format 0: id = 1 sampleMimeType = audio/iamf - channelCount = 0 - sampleRate = 0 language = und initializationData: data = length 119, hash 99A80807 diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.reading_within_gop_sample_dependencies.2.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.reading_within_gop_sample_dependencies.2.dump index c218c98661..c60469bf41 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.reading_within_gop_sample_dependencies.2.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.reading_within_gop_sample_dependencies.2.dump @@ -12,8 +12,6 @@ track 0: format 0: id = 1 sampleMimeType = audio/iamf - channelCount = 0 - sampleRate = 0 language = und initializationData: data = length 119, hash 99A80807 diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.reading_within_gop_sample_dependencies.3.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.reading_within_gop_sample_dependencies.3.dump index 3e3ef6ebfa..b6604d6df8 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.reading_within_gop_sample_dependencies.3.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.reading_within_gop_sample_dependencies.3.dump @@ -12,8 +12,6 @@ track 0: format 0: id = 1 sampleMimeType = audio/iamf - channelCount = 0 - sampleRate = 0 language = und initializationData: data = length 119, hash 99A80807 diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.reading_within_gop_sample_dependencies.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.reading_within_gop_sample_dependencies.unknown_length.dump index 671dbafd4c..e8b970e66f 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.reading_within_gop_sample_dependencies.unknown_length.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.reading_within_gop_sample_dependencies.unknown_length.dump @@ -12,8 +12,6 @@ track 0: format 0: id = 1 sampleMimeType = audio/iamf - channelCount = 0 - sampleRate = 0 language = und initializationData: data = length 119, hash 99A80807 diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.unknown_length.dump index 671dbafd4c..e8b970e66f 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.unknown_length.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.unknown_length.dump @@ -12,8 +12,6 @@ track 0: format 0: id = 1 sampleMimeType = audio/iamf - channelCount = 0 - sampleRate = 0 language = und initializationData: data = length 119, hash 99A80807 diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.0.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.0.dump index 9d9021d5ae..674a90ce14 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.0.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.0.dump @@ -13,8 +13,6 @@ track 0: id = 1 sampleMimeType = audio/iamf maxInputSize = 299 - channelCount = 0 - sampleRate = 0 language = und metadata = entries=[Mp4Timestamp: creation time=3764707200, modification time=3764707200, timescale=16000] initializationData: diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.1.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.1.dump index 2f1c693d6c..d456b40337 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.1.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.1.dump @@ -13,8 +13,6 @@ track 0: id = 1 sampleMimeType = audio/iamf maxInputSize = 299 - channelCount = 0 - sampleRate = 0 language = und metadata = entries=[Mp4Timestamp: creation time=3764707200, modification time=3764707200, timescale=16000] initializationData: diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.2.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.2.dump index 2aad3a411d..6bea9f7e3c 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.2.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.2.dump @@ -13,8 +13,6 @@ track 0: id = 1 sampleMimeType = audio/iamf maxInputSize = 299 - channelCount = 0 - sampleRate = 0 language = und metadata = entries=[Mp4Timestamp: creation time=3764707200, modification time=3764707200, timescale=16000] initializationData: diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.3.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.3.dump index 35a62aa63f..1e59aca14a 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.3.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.3.dump @@ -13,8 +13,6 @@ track 0: id = 1 sampleMimeType = audio/iamf maxInputSize = 299 - channelCount = 0 - sampleRate = 0 language = und metadata = entries=[Mp4Timestamp: creation time=3764707200, modification time=3764707200, timescale=16000] initializationData: diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.reading_within_gop_sample_dependencies.0.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.reading_within_gop_sample_dependencies.0.dump index 9d9021d5ae..674a90ce14 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.reading_within_gop_sample_dependencies.0.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.reading_within_gop_sample_dependencies.0.dump @@ -13,8 +13,6 @@ track 0: id = 1 sampleMimeType = audio/iamf maxInputSize = 299 - channelCount = 0 - sampleRate = 0 language = und metadata = entries=[Mp4Timestamp: creation time=3764707200, modification time=3764707200, timescale=16000] initializationData: diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.reading_within_gop_sample_dependencies.1.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.reading_within_gop_sample_dependencies.1.dump index 2f1c693d6c..d456b40337 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.reading_within_gop_sample_dependencies.1.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.reading_within_gop_sample_dependencies.1.dump @@ -13,8 +13,6 @@ track 0: id = 1 sampleMimeType = audio/iamf maxInputSize = 299 - channelCount = 0 - sampleRate = 0 language = und metadata = entries=[Mp4Timestamp: creation time=3764707200, modification time=3764707200, timescale=16000] initializationData: diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.reading_within_gop_sample_dependencies.2.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.reading_within_gop_sample_dependencies.2.dump index 2aad3a411d..6bea9f7e3c 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.reading_within_gop_sample_dependencies.2.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.reading_within_gop_sample_dependencies.2.dump @@ -13,8 +13,6 @@ track 0: id = 1 sampleMimeType = audio/iamf maxInputSize = 299 - channelCount = 0 - sampleRate = 0 language = und metadata = entries=[Mp4Timestamp: creation time=3764707200, modification time=3764707200, timescale=16000] initializationData: diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.reading_within_gop_sample_dependencies.3.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.reading_within_gop_sample_dependencies.3.dump index 35a62aa63f..1e59aca14a 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.reading_within_gop_sample_dependencies.3.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.reading_within_gop_sample_dependencies.3.dump @@ -13,8 +13,6 @@ track 0: id = 1 sampleMimeType = audio/iamf maxInputSize = 299 - channelCount = 0 - sampleRate = 0 language = und metadata = entries=[Mp4Timestamp: creation time=3764707200, modification time=3764707200, timescale=16000] initializationData: diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.reading_within_gop_sample_dependencies.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.reading_within_gop_sample_dependencies.unknown_length.dump index 9d9021d5ae..674a90ce14 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.reading_within_gop_sample_dependencies.unknown_length.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.reading_within_gop_sample_dependencies.unknown_length.dump @@ -13,8 +13,6 @@ track 0: id = 1 sampleMimeType = audio/iamf maxInputSize = 299 - channelCount = 0 - sampleRate = 0 language = und metadata = entries=[Mp4Timestamp: creation time=3764707200, modification time=3764707200, timescale=16000] initializationData: diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.unknown_length.dump index 9d9021d5ae..674a90ce14 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.unknown_length.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.unknown_length.dump @@ -13,8 +13,6 @@ track 0: id = 1 sampleMimeType = audio/iamf maxInputSize = 299 - channelCount = 0 - sampleRate = 0 language = und metadata = entries=[Mp4Timestamp: creation time=3764707200, modification time=3764707200, timescale=16000] initializationData: