From f9145f5186bcfc92c818b94021c6f8154a07d601 Mon Sep 17 00:00:00 2001 From: Santiago Seifert Date: Mon, 20 Apr 2020 16:33:55 +0100 Subject: Derive PCM encoding from ExoPlayer's format Bug: 154120292 Test: atest CtsMediaParserTestCases Change-Id: I90091810a09bfddaaf02257e3ad4a9458eda91d7 --- .../framework/java/android/media/MediaParser.java | 29 ++++++++++++++++++---- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/apex/media/framework/java/android/media/MediaParser.java b/apex/media/framework/java/android/media/MediaParser.java index d1e9e4e4289b..50f4ddd5e2e3 100644 --- a/apex/media/framework/java/android/media/MediaParser.java +++ b/apex/media/framework/java/android/media/MediaParser.java @@ -1412,14 +1412,12 @@ public final class MediaParser { setOptionalMediaFormatInt(result, MediaFormat.KEY_HEIGHT, format.height); List initData = format.initializationData; - if (initData != null) { - for (int i = 0; i < initData.size(); i++) { - result.setByteBuffer("csd-" + i, ByteBuffer.wrap(initData.get(i))); - } + for (int i = 0; i < initData.size(); i++) { + result.setByteBuffer("csd-" + i, ByteBuffer.wrap(initData.get(i))); } + setPcmEncoding(format, result); setOptionalMediaFormatString(result, MediaFormat.KEY_LANGUAGE, format.language); setOptionalMediaFormatInt(result, MediaFormat.KEY_MAX_INPUT_SIZE, format.maxInputSize); - setOptionalMediaFormatInt(result, MediaFormat.KEY_PCM_ENCODING, format.pcmEncoding); setOptionalMediaFormatInt(result, MediaFormat.KEY_ROTATION, format.rotationDegrees); setOptionalMediaFormatInt(result, MediaFormat.KEY_SAMPLE_RATE, format.sampleRate); setOptionalMediaFormatInt( @@ -1462,6 +1460,27 @@ public final class MediaParser { return result; } + private static void setPcmEncoding(Format format, MediaFormat result) { + int exoPcmEncoding = format.pcmEncoding; + setOptionalMediaFormatInt(result, "exo-pcm-encoding", format.pcmEncoding); + int mediaFormatPcmEncoding; + switch (exoPcmEncoding) { + case C.ENCODING_PCM_8BIT: + mediaFormatPcmEncoding = AudioFormat.ENCODING_PCM_8BIT; + break; + case C.ENCODING_PCM_16BIT: + mediaFormatPcmEncoding = AudioFormat.ENCODING_PCM_16BIT; + break; + case C.ENCODING_PCM_FLOAT: + mediaFormatPcmEncoding = AudioFormat.ENCODING_PCM_FLOAT; + break; + default: + // No matching value. Do nothing. + return; + } + result.setInteger(MediaFormat.KEY_PCM_ENCODING, mediaFormatPcmEncoding); + } + private static void setOptionalMediaFormatInt(MediaFormat mediaFormat, String key, int value) { if (value != Format.NO_VALUE) { mediaFormat.setInteger(key, value); -- cgit v1.2.3-59-g8ed1b