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 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
131 buffer_size = buffer_size <= 0 ? kDefaultInputBufferSize : buffer_size; | 131 buffer_size = buffer_size <= 0 ? kDefaultInputBufferSize : buffer_size; |
132 int effects = AudioParameters::NO_EFFECTS; | 132 int effects = AudioParameters::NO_EFFECTS; |
133 effects |= Java_AudioManagerAndroid_shouldUseAcousticEchoCanceler(env) ? | 133 effects |= Java_AudioManagerAndroid_shouldUseAcousticEchoCanceler(env) ? |
134 AudioParameters::ECHO_CANCELLER : AudioParameters::NO_EFFECTS; | 134 AudioParameters::ECHO_CANCELLER : AudioParameters::NO_EFFECTS; |
135 | 135 |
136 int user_buffer_size = GetUserBufferSize(); | 136 int user_buffer_size = GetUserBufferSize(); |
137 if (user_buffer_size) | 137 if (user_buffer_size) |
138 buffer_size = user_buffer_size; | 138 buffer_size = user_buffer_size; |
139 | 139 |
140 AudioParameters params( | 140 AudioParameters params( |
141 AudioParameters::AUDIO_PCM_LOW_LATENCY, channel_layout, | 141 AudioParameters::AUDIO_PCM_LOW_LATENCY, channel_layout, 0, |
142 GetNativeOutputSampleRate(), 16, buffer_size, effects); | 142 GetNativeOutputSampleRate(), 16, buffer_size, effects); |
143 return params; | 143 return params; |
144 } | 144 } |
145 | 145 |
146 AudioOutputStream* AudioManagerAndroid::MakeAudioOutputStream( | 146 AudioOutputStream* AudioManagerAndroid::MakeAudioOutputStream( |
147 const AudioParameters& params, | 147 const AudioParameters& params, |
148 const std::string& device_id) { | 148 const std::string& device_id) { |
149 DCHECK(GetTaskRunner()->BelongsToCurrentThread()); | 149 DCHECK(GetTaskRunner()->BelongsToCurrentThread()); |
150 AudioOutputStream* stream = | 150 AudioOutputStream* stream = |
151 AudioManagerBase::MakeAudioOutputStream(params, std::string()); | 151 AudioManagerBase::MakeAudioOutputStream(params, std::string()); |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
267 AudioParameters AudioManagerAndroid::GetPreferredOutputStreamParameters( | 267 AudioParameters AudioManagerAndroid::GetPreferredOutputStreamParameters( |
268 const std::string& output_device_id, | 268 const std::string& output_device_id, |
269 const AudioParameters& input_params) { | 269 const AudioParameters& input_params) { |
270 // TODO(tommi): Support |output_device_id|. | 270 // TODO(tommi): Support |output_device_id|. |
271 DCHECK(GetTaskRunner()->BelongsToCurrentThread()); | 271 DCHECK(GetTaskRunner()->BelongsToCurrentThread()); |
272 DLOG_IF(ERROR, !output_device_id.empty()) << "Not implemented!"; | 272 DLOG_IF(ERROR, !output_device_id.empty()) << "Not implemented!"; |
273 ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO; | 273 ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO; |
274 int sample_rate = GetNativeOutputSampleRate(); | 274 int sample_rate = GetNativeOutputSampleRate(); |
275 int buffer_size = GetOptimalOutputFrameSize(sample_rate, 2); | 275 int buffer_size = GetOptimalOutputFrameSize(sample_rate, 2); |
276 int bits_per_sample = 16; | 276 int bits_per_sample = 16; |
| 277 int input_channels = 0; |
277 if (input_params.IsValid()) { | 278 if (input_params.IsValid()) { |
278 // Use the client's input parameters if they are valid. | 279 // Use the client's input parameters if they are valid. |
279 sample_rate = input_params.sample_rate(); | 280 sample_rate = input_params.sample_rate(); |
280 bits_per_sample = input_params.bits_per_sample(); | 281 bits_per_sample = input_params.bits_per_sample(); |
281 channel_layout = input_params.channel_layout(); | 282 channel_layout = input_params.channel_layout(); |
| 283 input_channels = input_params.input_channels(); |
282 buffer_size = GetOptimalOutputFrameSize( | 284 buffer_size = GetOptimalOutputFrameSize( |
283 sample_rate, ChannelLayoutToChannelCount(channel_layout)); | 285 sample_rate, ChannelLayoutToChannelCount(channel_layout)); |
284 } | 286 } |
285 | 287 |
286 int user_buffer_size = GetUserBufferSize(); | 288 int user_buffer_size = GetUserBufferSize(); |
287 if (user_buffer_size) | 289 if (user_buffer_size) |
288 buffer_size = user_buffer_size; | 290 buffer_size = user_buffer_size; |
289 | 291 |
290 return AudioParameters( | 292 return AudioParameters( |
291 AudioParameters::AUDIO_PCM_LOW_LATENCY, channel_layout, | 293 AudioParameters::AUDIO_PCM_LOW_LATENCY, channel_layout, input_channels, |
292 sample_rate, bits_per_sample, buffer_size, AudioParameters::NO_EFFECTS); | 294 sample_rate, bits_per_sample, buffer_size, AudioParameters::NO_EFFECTS); |
293 } | 295 } |
294 | 296 |
295 bool AudioManagerAndroid::HasNoAudioInputStreams() { | 297 bool AudioManagerAndroid::HasNoAudioInputStreams() { |
296 return input_stream_count() == 0; | 298 return input_stream_count() == 0; |
297 } | 299 } |
298 | 300 |
299 void AudioManagerAndroid::InitializeOnAudioThread() { | 301 void AudioManagerAndroid::InitializeOnAudioThread() { |
300 DCHECK(GetTaskRunner()->BelongsToCurrentThread()); | 302 DCHECK(GetTaskRunner()->BelongsToCurrentThread()); |
301 | 303 |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
375 | 377 |
376 void AudioManagerAndroid::DoSetMuteOnAudioThread(bool muted) { | 378 void AudioManagerAndroid::DoSetMuteOnAudioThread(bool muted) { |
377 DCHECK(GetTaskRunner()->BelongsToCurrentThread()); | 379 DCHECK(GetTaskRunner()->BelongsToCurrentThread()); |
378 for (OutputStreams::iterator it = streams_.begin(); | 380 for (OutputStreams::iterator it = streams_.begin(); |
379 it != streams_.end(); ++it) { | 381 it != streams_.end(); ++it) { |
380 (*it)->SetMute(muted); | 382 (*it)->SetMute(muted); |
381 } | 383 } |
382 } | 384 } |
383 | 385 |
384 } // namespace media | 386 } // namespace media |
OLD | NEW |