Index: webrtc/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioTrack.java |
diff --git a/webrtc/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioTrack.java b/webrtc/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioTrack.java |
index 0602e44c2376ba0daa0359ed506d1ab67bab09fa..11eb51383d80730bf552adf543d5083c518f27ce 100644 |
--- a/webrtc/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioTrack.java |
+++ b/webrtc/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioTrack.java |
@@ -13,6 +13,7 @@ package org.webrtc.voiceengine; |
import java.lang.Thread; |
import java.nio.ByteBuffer; |
+import android.annotation.TargetApi; |
import android.content.Context; |
import android.media.AudioFormat; |
import android.media.AudioManager; |
@@ -90,13 +91,9 @@ class WebRtcAudioTrack { |
assertTrue(sizeInBytes <= byteBuffer.remaining()); |
int bytesWritten = 0; |
if (WebRtcAudioUtils.runningOnLollipopOrHigher()) { |
- bytesWritten = audioTrack.write(byteBuffer, |
- sizeInBytes, |
- AudioTrack.WRITE_BLOCKING); |
+ bytesWritten = writeOnLollipop(audioTrack, byteBuffer, sizeInBytes); |
} else { |
- bytesWritten = audioTrack.write(byteBuffer.array(), |
- byteBuffer.arrayOffset(), |
- sizeInBytes); |
+ bytesWritten = writePreLollipop(audioTrack, byteBuffer, sizeInBytes); |
} |
if (bytesWritten != sizeInBytes) { |
Logging.e(TAG, "AudioTrack.write failed: " + bytesWritten); |
@@ -123,6 +120,15 @@ class WebRtcAudioTrack { |
audioTrack.flush(); |
} |
+ @TargetApi(21) |
+ private int writeOnLollipop(AudioTrack audioTrack, ByteBuffer byteBuffer, int sizeInBytes) { |
+ return audioTrack.write(byteBuffer, sizeInBytes, AudioTrack.WRITE_BLOCKING); |
+ } |
+ |
+ private int writePreLollipop(AudioTrack audioTrack, ByteBuffer byteBuffer, int sizeInBytes) { |
+ return audioTrack.write(byteBuffer.array(), byteBuffer.arrayOffset(), sizeInBytes); |
+ } |
+ |
public void joinThread() { |
keepAlive = false; |
while (isAlive()) { |
@@ -224,16 +230,21 @@ class WebRtcAudioTrack { |
private boolean setStreamVolume(int volume) { |
Logging.d(TAG, "setStreamVolume(" + volume + ")"); |
assertTrue(audioManager != null); |
- if (WebRtcAudioUtils.runningOnLollipopOrHigher()) { |
- if (audioManager.isVolumeFixed()) { |
- Logging.e(TAG, "The device implements a fixed volume policy."); |
- return false; |
- } |
+ if (isVolumeFixed()) { |
+ Logging.e(TAG, "The device implements a fixed volume policy."); |
+ return false; |
} |
audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL, volume, 0); |
return true; |
} |
+ @TargetApi(21) |
+ private boolean isVolumeFixed() { |
+ if (!WebRtcAudioUtils.runningOnLollipopOrHigher()) |
+ return false; |
+ return audioManager.isVolumeFixed(); |
+ } |
+ |
/** Get current volume level for a phone call audio stream. */ |
private int getStreamVolume() { |
Logging.d(TAG, "getStreamVolume"); |