diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 718bb35eb0..e222a267b2 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -11,6 +11,8 @@ * Add `reset` to `BasePreloadManager` to release all the holding sources while keep the preload manager instance. * Transformer: + * Work around a decoder bug where the number of audio channels was capped + at stereo when handling PCM input. * Track Selection: * Extractors: * Audio: diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/ExoAssetLoaderBaseRenderer.java b/libraries/transformer/src/main/java/androidx/media3/transformer/ExoAssetLoaderBaseRenderer.java index 9d9d99c692..ee8f67e18b 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/ExoAssetLoaderBaseRenderer.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/ExoAssetLoaderBaseRenderer.java @@ -262,6 +262,14 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; if (decoderOutputFormat == null) { return false; } + + // TODO: b/332708880 - The raw decoder caps number of audio channels to stereo. Remove this + // workaround and bypass MediaCodec for raw audio instead. + if (checkNotNull(inputFormat.sampleMimeType).equals(MimeTypes.AUDIO_RAW)) { + decoderOutputFormat = + decoderOutputFormat.buildUpon().setChannelCount(inputFormat.channelCount).build(); + } + outputFormat = overrideOutputFormat(decoderOutputFormat); } else { // TODO(b/278259383): Move surface creation out of video sampleConsumer. Init decoder and