diff --git a/library/core/src/main/java/com/google/android/exoplayer2/audio/MediaCodecAudioRenderer.java b/library/core/src/main/java/com/google/android/exoplayer2/audio/MediaCodecAudioRenderer.java index 2b745b47fb..6ef4a192fa 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/audio/MediaCodecAudioRenderer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/audio/MediaCodecAudioRenderer.java @@ -398,16 +398,18 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media audioSinkInputFormat = getFormatWithEncodingForPassthrough(outputFormat); } else { MediaFormat mediaFormat = getCodec().getOutputFormat(); - @C.Encoding int encoding; + @C.PcmEncoding int pcmEncoding; if (mediaFormat.containsKey(VIVO_BITS_PER_SAMPLE_KEY)) { - encoding = Util.getPcmEncoding(mediaFormat.getInteger(VIVO_BITS_PER_SAMPLE_KEY)); + pcmEncoding = Util.getPcmEncoding(mediaFormat.getInteger(VIVO_BITS_PER_SAMPLE_KEY)); } else { - encoding = getPcmEncoding(outputFormat); + pcmEncoding = getPcmEncoding(outputFormat); } audioSinkInputFormat = - outputFormat - .buildUpon() - .setEncoding(encoding) + new Format.Builder() + .setSampleMimeType(MimeTypes.AUDIO_RAW) + .setEncoding(pcmEncoding) + .setEncoderDelay(outputFormat.encoderDelay) + .setEncoderPadding(outputFormat.encoderPadding) .setChannelCount(mediaFormat.getInteger(MediaFormat.KEY_CHANNEL_COUNT)) .setSampleRate(mediaFormat.getInteger(MediaFormat.KEY_SAMPLE_RATE)) .build(); diff --git a/library/core/src/test/java/com/google/android/exoplayer2/audio/MediaCodecAudioRendererTest.java b/library/core/src/test/java/com/google/android/exoplayer2/audio/MediaCodecAudioRendererTest.java index 4306628d72..cf18ffef54 100644 --- a/library/core/src/test/java/com/google/android/exoplayer2/audio/MediaCodecAudioRendererTest.java +++ b/library/core/src/test/java/com/google/android/exoplayer2/audio/MediaCodecAudioRendererTest.java @@ -147,10 +147,16 @@ public class MediaCodecAudioRendererTest { } while (!mediaCodecAudioRenderer.isEnded()); verify(audioSink) - .configure(AUDIO_AAC, /* specifiedBufferSize= */ 0, /* outputChannels= */ null); + .configure( + getAudioSinkFormat(AUDIO_AAC), + /* specifiedBufferSize= */ 0, + /* outputChannels= */ null); verify(audioSink) - .configure(changedFormat, /* specifiedBufferSize= */ 0, /* outputChannels= */ null); + .configure( + getAudioSinkFormat(changedFormat), + /* specifiedBufferSize= */ 0, + /* outputChannels= */ null); } @Test @@ -195,10 +201,16 @@ public class MediaCodecAudioRendererTest { } while (!mediaCodecAudioRenderer.isEnded()); verify(audioSink) - .configure(AUDIO_AAC, /* specifiedBufferSize= */ 0, /* outputChannels= */ null); + .configure( + getAudioSinkFormat(AUDIO_AAC), + /* specifiedBufferSize= */ 0, + /* outputChannels= */ null); verify(audioSink) - .configure(changedFormat, /* specifiedBufferSize= */ 0, /* outputChannels= */ null); + .configure( + getAudioSinkFormat(changedFormat), + /* specifiedBufferSize= */ 0, + /* outputChannels= */ null); } @Test @@ -261,4 +273,15 @@ public class MediaCodecAudioRendererTest { // render. exceptionThrowingRenderer.render(/* positionUs= */ 750, SystemClock.elapsedRealtime() * 1000); } + + private static Format getAudioSinkFormat(Format inputFormat) { + return new Format.Builder() + .setSampleMimeType(MimeTypes.AUDIO_RAW) + .setEncoding(C.ENCODING_PCM_16BIT) + .setChannelCount(inputFormat.channelCount) + .setSampleRate(inputFormat.sampleRate) + .setEncoderDelay(inputFormat.encoderDelay) + .setEncoderPadding(inputFormat.encoderPadding) + .build(); + } }