Index: media/audio/android/audio_manager_android.cc |
diff --git a/media/audio/android/audio_manager_android.cc b/media/audio/android/audio_manager_android.cc |
index 48f203ab74e8bb1d3bc4ab395fc301757db3a7a6..8c600691fc5dc382b72ff5394e9d49505c669f91 100644 |
--- a/media/audio/android/audio_manager_android.cc |
+++ b/media/audio/android/audio_manager_android.cc |
@@ -116,8 +116,9 @@ void AudioManagerAndroid::GetAudioOutputDeviceNames( |
AddDefaultDevice(device_names); |
} |
-AudioParameters AudioManagerAndroid::GetInputStreamParameters( |
- const std::string& device_id) { |
+AudioParameters AudioManagerAndroid::GetPreferredInputStreamParameters( |
+ const std::string& input_device_id, |
+ const AudioParameters& input_params) { |
DCHECK(GetTaskRunner()->BelongsToCurrentThread()); |
// Use mono as preferred number of input channels on Android to save |
@@ -125,6 +126,8 @@ AudioParameters AudioManagerAndroid::GetInputStreamParameters( |
// Galaxy S3 and S4 devices. See http://crbug.com/256851 for details. |
JNIEnv* env = AttachCurrentThread(); |
ChannelLayout channel_layout = CHANNEL_LAYOUT_MONO; |
+ int sample_rate = GetNativeOutputSampleRate(); |
+ int bits_per_sample = 16; |
int buffer_size = Java_AudioManagerAndroid_getMinInputFrameSize( |
env, GetNativeOutputSampleRate(), |
ChannelLayoutToChannelCount(channel_layout)); |
@@ -133,14 +136,23 @@ AudioParameters AudioManagerAndroid::GetInputStreamParameters( |
effects |= Java_AudioManagerAndroid_shouldUseAcousticEchoCanceler(env) ? |
AudioParameters::ECHO_CANCELLER : AudioParameters::NO_EFFECTS; |
+ if (input_params.IsValid()) { |
+ // Use the client's input parameters if they are valid. |
+ sample_rate = input_params.sample_rate(); |
+ bits_per_sample = input_params.bits_per_sample(); |
+ channel_layout = input_params.channel_layout(); |
+ buffer_size = GetOptimalOutputFrameSize( |
+ sample_rate, ChannelLayoutToChannelCount(channel_layout)); |
+ effects |= input_params.effects(); |
+ } |
+ |
int user_buffer_size = GetUserBufferSize(); |
if (user_buffer_size) |
buffer_size = user_buffer_size; |
- AudioParameters params( |
+ return AudioParameters( |
AudioParameters::AUDIO_PCM_LOW_LATENCY, channel_layout, 0, |
- GetNativeOutputSampleRate(), 16, buffer_size, effects); |
- return params; |
+ sample_rate, bits_per_sample, buffer_size, effects); |
} |
AudioOutputStream* AudioManagerAndroid::MakeAudioOutputStream( |