| Index: webrtc/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioRecord.java
|
| diff --git a/webrtc/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioRecord.java b/webrtc/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioRecord.java
|
| index 66c1483851ba38ec9da98c64e54cb136a4c3b04e..729ff37622834875197e3c7ac950c2a32eb75862 100644
|
| --- a/webrtc/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioRecord.java
|
| +++ b/webrtc/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioRecord.java
|
| @@ -215,8 +215,16 @@ public class WebRtcAudioRecord {
|
| int bufferSizeInBytes = Math.max(BUFFER_SIZE_FACTOR * minBufferSize, byteBuffer.capacity());
|
| Logging.d(TAG, "bufferSizeInBytes: " + bufferSizeInBytes);
|
| try {
|
| - audioRecord = new AudioRecord(AudioSource.VOICE_COMMUNICATION, 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.VOICE_COMMUNICATION, sampleRate,
|
| + channelConfig, AudioFormat.ENCODING_PCM_16BIT, bufferSizeInBytes);
|
| + }
|
| } catch (IllegalArgumentException e) {
|
| reportWebRtcAudioRecordInitError("AudioRecord ctor error: " + e.getMessage());
|
| releaseAudioResources();
|
| @@ -305,6 +313,22 @@ public class WebRtcAudioRecord {
|
| }
|
| }
|
|
|
| + // Creates an AudioRecord instance using AudioRecord.Builder which was added in API level 23.
|
| + @TargetApi(23)
|
| + private AudioRecord createAudioRecordOnMarshmallowOrHigher(
|
| + int sampleRateInHz, int channelConfig, int bufferSizeInBytes) {
|
| + Logging.d(TAG, "createAudioRecordOnMarshmallowOrHigher");
|
| + return new AudioRecord.Builder()
|
| + .setAudioSource(AudioSource.VOICE_COMMUNICATION)
|
| + .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) {
|
|
|