From 1f6c795407d94e4c14f9c2c73f109e639949a155 Mon Sep 17 00:00:00 2001 From: andrewlewis Date: Mon, 9 Dec 2024 09:10:17 -0800 Subject: [PATCH] Read init data for AAC (and not other formats) in AVI files AAC is the only format where the codec data buffer is actually used. Invalid or obscure versions of the relevant syntax can break extraction when we try to read the codec data, so it's better to read it only when it's required. PiperOrigin-RevId: 704308925 --- .../androidx/media3/extractor/avi/StreamFormatChunk.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/avi/StreamFormatChunk.java b/libraries/extractor/src/main/java/androidx/media3/extractor/avi/StreamFormatChunk.java index 08e8a77476..d278f0c7df 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/avi/StreamFormatChunk.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/avi/StreamFormatChunk.java @@ -86,18 +86,17 @@ import com.google.common.collect.ImmutableList; int bitsPerSample = body.readLittleEndianUnsignedShort(); int pcmEncoding = Util.getPcmEncoding(bitsPerSample); int cbSize = body.bytesLeft() > 0 ? body.readLittleEndianUnsignedShort() : 0; - byte[] codecData = new byte[cbSize]; - body.readBytes(codecData, /* offset= */ 0, codecData.length); - Format.Builder formatBuilder = new Format.Builder(); formatBuilder .setSampleMimeType(mimeType) .setChannelCount(channelCount) .setSampleRate(samplesPerSecond); - if (MimeTypes.AUDIO_RAW.equals(mimeType) && pcmEncoding != C.ENCODING_INVALID) { + if (mimeType.equals(MimeTypes.AUDIO_RAW) && pcmEncoding != C.ENCODING_INVALID) { formatBuilder.setPcmEncoding(pcmEncoding); } - if (MimeTypes.AUDIO_AAC.equals(mimeType) && codecData.length > 0) { + if (mimeType.equals(MimeTypes.AUDIO_AAC) && cbSize > 0) { + byte[] codecData = new byte[cbSize]; + body.readBytes(codecData, /* offset= */ 0, codecData.length); formatBuilder.setInitializationData(ImmutableList.of(codecData)); } return new StreamFormatChunk(formatBuilder.build());