From 121b79ae96e334e79ec0f886fccf81357b9054d0 Mon Sep 17 00:00:00 2001 From: Copybara-Service Date: Tue, 3 Dec 2024 04:04:52 -0800 Subject: [PATCH] Merge pull request #1943 from DolbyLaboratories:dlb/ac4-ajoc/dev PiperOrigin-RevId: 702281314 (cherry picked from commit e4993779db61910aa31c23a6855667e8a6ea91d5) --- .../java/androidx/media3/extractor/Ac4Util.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/Ac4Util.java b/libraries/extractor/src/main/java/androidx/media3/extractor/Ac4Util.java index d895cae9847..6b519465906 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/Ac4Util.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/Ac4Util.java @@ -410,13 +410,22 @@ public static Format parseAc4AnnexEFormat( ac4Presentation.hasBackChannels, ac4Presentation.topChannelPairs); } else { - channelCount = ac4Presentation.numOfUmxObjects; + // The ETSI TS 103 190-2 V1.2.1 (2018-02) specification defines the parameter + // n_umx_objects_minus1 in Annex E (E.11.11) to specify the number of fullband objects. While + // the elementary stream specification (section 6.3.2.8.1 and 6.3.2.10.4) provides information + // about the presence of an LFE channel within the set of dynamic objects, this detail is not + // explicitly stated in the ISO Base Media File Format (Annex E). However, current + // implementation practices consistently include the LFE channel when creating an object-based + // substream. As a result, it has been decided that when interpreting the ISO Base Media File + // Format, the LFE channel should always be counted as part of the total channel count. + int lfeChannelCount = 1; + channelCount = ac4Presentation.numOfUmxObjects + lfeChannelCount; // TODO: There is a bug in ETSI TS 103 190-2 V1.2.1 (2018-02), E.11.11 // For AC-4 level 4 stream, the intention is to set 19 to n_umx_objects_minus1 but it is // equal to 15 based on current specification. Dolby has filed a bug report to ETSI. // The following sentence should be deleted after ETSI specification error is fixed. if (ac4Presentation.level == 4) { - channelCount = channelCount == 16 ? 21 : channelCount; + channelCount = channelCount == 17 ? 21 : channelCount; } }