diff options
author | Santiago Seifert <aquilescanta@google.com> | 2020-04-20 16:33:55 +0100 |
---|---|---|
committer | Santiago Seifert <aquilescanta@google.com> | 2020-04-20 16:36:38 +0100 |
commit | f9145f5186bcfc92c818b94021c6f8154a07d601 (patch) | |
tree | 21add328bb64197e6adf66f45223a8e3157b5c19 | |
parent | 711d0a9a76dddc197a124f3cc484eac0e9bacd8d (diff) |
Derive PCM encoding from ExoPlayer's format
Bug: 154120292
Test: atest CtsMediaParserTestCases
Change-Id: I90091810a09bfddaaf02257e3ad4a9458eda91d7
-rw-r--r-- | apex/media/framework/java/android/media/MediaParser.java | 29 |
1 files 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<byte[]> 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); |