From ca61f3f8627abee3618e8903240613a1e56da2ad Mon Sep 17 00:00:00 2001 From: nift4 Date: Tue, 10 Feb 2026 20:43:57 +0100 Subject: [PATCH 1/2] Tidy up pcm format handling in some places - refactor a few usages that manually handle all pcm formats to the Util methods that already exist. --- .../common/audio/ToInt16PcmAudioProcessor.java | 10 +--------- .../media3/exoplayer/util/EventLogger.java | 4 ++++ .../media3/extractor/mkv/MatroskaExtractor.java | 11 ++--------- .../androidx/media3/extractor/mp4/BoxParser.java | 15 +++++---------- 4 files changed, 12 insertions(+), 28 deletions(-) diff --git a/libraries/common/src/main/java/androidx/media3/common/audio/ToInt16PcmAudioProcessor.java b/libraries/common/src/main/java/androidx/media3/common/audio/ToInt16PcmAudioProcessor.java index 789956d9ae8..c49476fe20c 100644 --- a/libraries/common/src/main/java/androidx/media3/common/audio/ToInt16PcmAudioProcessor.java +++ b/libraries/common/src/main/java/androidx/media3/common/audio/ToInt16PcmAudioProcessor.java @@ -44,15 +44,7 @@ public final class ToInt16PcmAudioProcessor extends BaseAudioProcessor { public AudioFormat onConfigure(AudioFormat inputAudioFormat) throws UnhandledAudioFormatException { @C.PcmEncoding int encoding = inputAudioFormat.encoding; - if (encoding != C.ENCODING_PCM_8BIT - && encoding != C.ENCODING_PCM_16BIT - && encoding != C.ENCODING_PCM_16BIT_BIG_ENDIAN - && encoding != C.ENCODING_PCM_24BIT - && encoding != C.ENCODING_PCM_24BIT_BIG_ENDIAN - && encoding != C.ENCODING_PCM_32BIT - && encoding != C.ENCODING_PCM_32BIT_BIG_ENDIAN - && encoding != C.ENCODING_PCM_FLOAT - && encoding != C.ENCODING_PCM_DOUBLE) { + if (!Util.isEncodingLinearPcm(encoding)) { throw new UnhandledAudioFormatException(inputAudioFormat); } return encoding != C.ENCODING_PCM_16BIT diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/util/EventLogger.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/util/EventLogger.java index f893b3fbe06..b5d842fce69 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/util/EventLogger.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/util/EventLogger.java @@ -807,6 +807,8 @@ private static String encodingAsString(@C.Encoding int encoding) { return "dts-hd"; case C.ENCODING_DTS_UHD_P2: return "dts-uhd-p2"; + case C.ENCODING_DSD: + return "dsd"; case C.ENCODING_E_AC3: return "eac3"; case C.ENCODING_E_AC3_JOC: @@ -829,6 +831,8 @@ private static String encodingAsString(@C.Encoding int encoding) { return "pcm-32"; case C.ENCODING_PCM_32BIT_BIG_ENDIAN: return "pcm-32be"; + case C.ENCODING_PCM_DOUBLE: + return "pcm-double"; case C.ENCODING_PCM_FLOAT: return "pcm-float"; case C.ENCODING_INVALID: diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/mkv/MatroskaExtractor.java b/libraries/extractor/src/main/java/androidx/media3/extractor/mkv/MatroskaExtractor.java index 4569259631e..b64967bb57c 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/mkv/MatroskaExtractor.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/mkv/MatroskaExtractor.java @@ -2437,15 +2437,8 @@ public void initializeFormat(int trackId) throws ParserException { break; case CODEC_ID_PCM_INT_BIG: mimeType = MimeTypes.AUDIO_RAW; - if (audioBitDepth == 8) { - pcmEncoding = C.ENCODING_PCM_8BIT; - } else if (audioBitDepth == 16) { - pcmEncoding = C.ENCODING_PCM_16BIT_BIG_ENDIAN; - } else if (audioBitDepth == 24) { - pcmEncoding = C.ENCODING_PCM_24BIT_BIG_ENDIAN; - } else if (audioBitDepth == 32) { - pcmEncoding = C.ENCODING_PCM_32BIT_BIG_ENDIAN; - } else { + pcmEncoding = Util.getPcmEncoding(audioBitDepth, ByteOrder.BIG_ENDIAN); + if (pcmEncoding == C.ENCODING_INVALID) { pcmEncoding = Format.NO_VALUE; mimeType = MimeTypes.AUDIO_UNKNOWN; Log.w( 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 0f750556e1a..31de9e8484c 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 @@ -2130,18 +2130,13 @@ private static void parseAudioSampleEntry( boolean isFloat = (formatSpecificFlags & 1) != 0; boolean isBigEndian = (formatSpecificFlags & (1 << 1)) != 0; if (!isFloat) { - if (bitsPerSample == 8) { - pcmEncoding = C.ENCODING_PCM_8BIT; - } else if (bitsPerSample == 16) { - pcmEncoding = isBigEndian ? C.ENCODING_PCM_16BIT_BIG_ENDIAN : C.ENCODING_PCM_16BIT; - } else if (bitsPerSample == 24) { - pcmEncoding = isBigEndian ? C.ENCODING_PCM_24BIT_BIG_ENDIAN : C.ENCODING_PCM_24BIT; - } else if (bitsPerSample == 32) { - pcmEncoding = isBigEndian ? C.ENCODING_PCM_32BIT_BIG_ENDIAN : C.ENCODING_PCM_32BIT; - } - } else if (bitsPerSample == 32) { + pcmEncoding = Util.getPcmEncoding(bitsPerSample, isBigEndian ? BIG_ENDIAN : LITTLE_ENDIAN); + } else if (!isBigEndian && bitsPerSample == 32) { pcmEncoding = C.ENCODING_PCM_FLOAT; } + if (pcmEncoding == C.ENCODING_INVALID) { + pcmEncoding = Format.NO_VALUE; + } parent.skipBytes(8); // constBytesPerAudioPacket, constLPCMFramesPerAudioPacket } else { // Unsupported version. From 01c269dbb8620ab61d5ea427da57258d813f5854 Mon Sep 17 00:00:00 2001 From: Rohit Singh Date: Wed, 25 Feb 2026 12:43:28 +0000 Subject: [PATCH 2/2] Remove bug fix change --- .../src/main/java/androidx/media3/extractor/mp4/BoxParser.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 31de9e8484c..c1932d21e19 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 @@ -2131,7 +2131,7 @@ private static void parseAudioSampleEntry( boolean isBigEndian = (formatSpecificFlags & (1 << 1)) != 0; if (!isFloat) { pcmEncoding = Util.getPcmEncoding(bitsPerSample, isBigEndian ? BIG_ENDIAN : LITTLE_ENDIAN); - } else if (!isBigEndian && bitsPerSample == 32) { + } else if (bitsPerSample == 32) { pcmEncoding = C.ENCODING_PCM_FLOAT; } if (pcmEncoding == C.ENCODING_INVALID) {