From e7a5567954e43d1560e07770155c6ed66c6b9df2 Mon Sep 17 00:00:00 2001 From: henrika Date: Mon, 18 Dec 2017 16:00:45 +0100 Subject: [PATCH] Now uses AudioRecord.Builder on Android again. I tried to land the same change by reverting https://webrtc-review.googlesource.com/c/src/+/34443 but the revert failed and I therefore land it manually here instead. TBR=glaznev@webrtc.org Bug: b/32742417 Change-Id: Ied8ed3e7c7d67c51f781e39cbea952a2303278d9 Reviewed-on: https://webrtc-review.googlesource.com/34442 Reviewed-by: Henrik Andreassson Commit-Queue: Henrik Andreassson Cr-Commit-Position: refs/heads/master@{#21351} --- .../webrtc/voiceengine/WebRtcAudioRecord.java | 28 +++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioRecord.java b/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioRecord.java index 73cf35d7cd..a11f56dd44 100644 --- a/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioRecord.java +++ b/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioRecord.java @@ -201,8 +201,16 @@ public class WebRtcAudioRecord { int bufferSizeInBytes = Math.max(BUFFER_SIZE_FACTOR * minBufferSize, byteBuffer.capacity()); Logging.d(TAG, "bufferSizeInBytes: " + bufferSizeInBytes); try { - audioRecord = new AudioRecord(audioSource, sampleRate, channelConfig, - AudioFormat.ENCODING_PCM_16BIT, bufferSizeInBytes); + if (WebRtcAudioUtils.runningOnMarshmallowOrHigher()) { + // Use AudioRecord.Builder to create the AudioRecord instance if we are + // on API level 23 or higher. + audioRecord = createAudioRecordOnMarshmallowOrHigher( + sampleRate, channelConfig, bufferSizeInBytes); + } else { + // Use default constructor for API levels below 23. + audioRecord = new AudioRecord(audioSource, sampleRate, channelConfig, + AudioFormat.ENCODING_PCM_16BIT, bufferSizeInBytes); + } } catch (IllegalArgumentException e) { reportWebRtcAudioRecordInitError("AudioRecord ctor error: " + e.getMessage()); releaseAudioResources(); @@ -276,6 +284,22 @@ public class WebRtcAudioRecord { } } + // Creates an AudioRecord instance using AudioRecord.Builder. + @TargetApi(23) + private AudioRecord createAudioRecordOnMarshmallowOrHigher( + int sampleRateInHz, int channelConfig, int bufferSizeInBytes) { + Logging.d(TAG, "createAudioRecordOnMarshmallowOrHigher"); + return new AudioRecord.Builder() + .setAudioSource(audioSource) + .setAudioFormat(new AudioFormat.Builder() + .setEncoding(AudioFormat.ENCODING_PCM_16BIT) + .setSampleRate(sampleRateInHz) + .setChannelMask(channelConfig) + .build()) + .setBufferSizeInBytes(bufferSizeInBytes) + .build(); + } + // Helper method which throws an exception when an assertion has failed. private static void assertTrue(boolean condition) { if (!condition) {