OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "media/audio/android/audio_manager_android.h" | 5 #include "media/audio/android/audio_manager_android.h" |
6 | 6 |
7 #include "base/android/build_info.h" | 7 #include "base/android/build_info.h" |
8 #include "base/android/jni_array.h" | 8 #include "base/android/jni_array.h" |
9 #include "base/android/jni_string.h" | 9 #include "base/android/jni_string.h" |
10 #include "base/android/scoped_java_ref.h" | 10 #include "base/android/scoped_java_ref.h" |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
109 device_names->push_back(device); | 109 device_names->push_back(device); |
110 } | 110 } |
111 } | 111 } |
112 | 112 |
113 void AudioManagerAndroid::GetAudioOutputDeviceNames( | 113 void AudioManagerAndroid::GetAudioOutputDeviceNames( |
114 AudioDeviceNames* device_names) { | 114 AudioDeviceNames* device_names) { |
115 // TODO(henrika): enumerate using GetAudioInputDeviceNames(). | 115 // TODO(henrika): enumerate using GetAudioInputDeviceNames(). |
116 AddDefaultDevice(device_names); | 116 AddDefaultDevice(device_names); |
117 } | 117 } |
118 | 118 |
119 AudioParameters AudioManagerAndroid::GetInputStreamParameters( | 119 AudioParameters AudioManagerAndroid::GetPreferredInputStreamParameters( |
120 const std::string& device_id) { | 120 const std::string& input_device_id, |
| 121 const AudioParameters& input_params) { |
121 DCHECK(GetTaskRunner()->BelongsToCurrentThread()); | 122 DCHECK(GetTaskRunner()->BelongsToCurrentThread()); |
122 | 123 |
123 // Use mono as preferred number of input channels on Android to save | 124 // Use mono as preferred number of input channels on Android to save |
124 // resources. Using mono also avoids a driver issue seen on Samsung | 125 // resources. Using mono also avoids a driver issue seen on Samsung |
125 // Galaxy S3 and S4 devices. See http://crbug.com/256851 for details. | 126 // Galaxy S3 and S4 devices. See http://crbug.com/256851 for details. |
126 JNIEnv* env = AttachCurrentThread(); | 127 JNIEnv* env = AttachCurrentThread(); |
127 ChannelLayout channel_layout = CHANNEL_LAYOUT_MONO; | 128 ChannelLayout channel_layout = CHANNEL_LAYOUT_MONO; |
| 129 int sample_rate = GetNativeOutputSampleRate(); |
| 130 int bits_per_sample = 16; |
128 int buffer_size = Java_AudioManagerAndroid_getMinInputFrameSize( | 131 int buffer_size = Java_AudioManagerAndroid_getMinInputFrameSize( |
129 env, GetNativeOutputSampleRate(), | 132 env, GetNativeOutputSampleRate(), |
130 ChannelLayoutToChannelCount(channel_layout)); | 133 ChannelLayoutToChannelCount(channel_layout)); |
131 buffer_size = buffer_size <= 0 ? kDefaultInputBufferSize : buffer_size; | 134 buffer_size = buffer_size <= 0 ? kDefaultInputBufferSize : buffer_size; |
132 int effects = AudioParameters::NO_EFFECTS; | 135 int effects = AudioParameters::NO_EFFECTS; |
133 effects |= Java_AudioManagerAndroid_shouldUseAcousticEchoCanceler(env) ? | 136 effects |= Java_AudioManagerAndroid_shouldUseAcousticEchoCanceler(env) ? |
134 AudioParameters::ECHO_CANCELLER : AudioParameters::NO_EFFECTS; | 137 AudioParameters::ECHO_CANCELLER : AudioParameters::NO_EFFECTS; |
135 | 138 |
| 139 if (input_params.IsValid()) { |
| 140 // Use the client's input parameters if they are valid. |
| 141 sample_rate = input_params.sample_rate(); |
| 142 bits_per_sample = input_params.bits_per_sample(); |
| 143 channel_layout = input_params.channel_layout(); |
| 144 buffer_size = GetOptimalOutputFrameSize( |
| 145 sample_rate, ChannelLayoutToChannelCount(channel_layout)); |
| 146 effects |= input_params.effects(); |
| 147 } |
| 148 |
136 int user_buffer_size = GetUserBufferSize(); | 149 int user_buffer_size = GetUserBufferSize(); |
137 if (user_buffer_size) | 150 if (user_buffer_size) |
138 buffer_size = user_buffer_size; | 151 buffer_size = user_buffer_size; |
139 | 152 |
140 AudioParameters params( | 153 return AudioParameters( |
141 AudioParameters::AUDIO_PCM_LOW_LATENCY, channel_layout, 0, | 154 AudioParameters::AUDIO_PCM_LOW_LATENCY, channel_layout, 0, |
142 GetNativeOutputSampleRate(), 16, buffer_size, effects); | 155 sample_rate, bits_per_sample, buffer_size, effects); |
143 return params; | |
144 } | 156 } |
145 | 157 |
146 AudioOutputStream* AudioManagerAndroid::MakeAudioOutputStream( | 158 AudioOutputStream* AudioManagerAndroid::MakeAudioOutputStream( |
147 const AudioParameters& params, | 159 const AudioParameters& params, |
148 const std::string& device_id) { | 160 const std::string& device_id) { |
149 DCHECK(GetTaskRunner()->BelongsToCurrentThread()); | 161 DCHECK(GetTaskRunner()->BelongsToCurrentThread()); |
150 AudioOutputStream* stream = | 162 AudioOutputStream* stream = |
151 AudioManagerBase::MakeAudioOutputStream(params, std::string()); | 163 AudioManagerBase::MakeAudioOutputStream(params, std::string()); |
152 streams_.insert(static_cast<OpenSLESOutputStream*>(stream)); | 164 streams_.insert(static_cast<OpenSLESOutputStream*>(stream)); |
153 return stream; | 165 return stream; |
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
377 | 389 |
378 void AudioManagerAndroid::DoSetMuteOnAudioThread(bool muted) { | 390 void AudioManagerAndroid::DoSetMuteOnAudioThread(bool muted) { |
379 DCHECK(GetTaskRunner()->BelongsToCurrentThread()); | 391 DCHECK(GetTaskRunner()->BelongsToCurrentThread()); |
380 for (OutputStreams::iterator it = streams_.begin(); | 392 for (OutputStreams::iterator it = streams_.begin(); |
381 it != streams_.end(); ++it) { | 393 it != streams_.end(); ++it) { |
382 (*it)->SetMute(muted); | 394 (*it)->SetMute(muted); |
383 } | 395 } |
384 } | 396 } |
385 | 397 |
386 } // namespace media | 398 } // namespace media |
OLD | NEW |