| 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/audio_manager_base.h" | 5 #include "media/audio/audio_manager_base.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/message_loop_proxy.h" | 10 #include "base/message_loop_proxy.h" |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 116 params.format() == AudioParameters::AUDIO_FAKE || | 116 params.format() == AudioParameters::AUDIO_FAKE || |
| 117 !HasAudioOutputDevices(); | 117 !HasAudioOutputDevices(); |
| 118 | 118 |
| 119 AudioOutputStream* stream = NULL; | 119 AudioOutputStream* stream = NULL; |
| 120 if (virtual_audio_input_stream_) { | 120 if (virtual_audio_input_stream_) { |
| 121 #if defined(OS_IOS) | 121 #if defined(OS_IOS) |
| 122 // We do not currently support iOS. It does not link. | 122 // We do not currently support iOS. It does not link. |
| 123 NOTIMPLEMENTED(); | 123 NOTIMPLEMENTED(); |
| 124 return NULL; | 124 return NULL; |
| 125 #else | 125 #else |
| 126 LOG(ERROR) << "CREATED VIRTUAL OUTPUT STREAM"; |
| 126 stream = new VirtualAudioOutputStream( | 127 stream = new VirtualAudioOutputStream( |
| 127 params, message_loop_, virtual_audio_input_stream_, | 128 params, message_loop_, virtual_audio_input_stream_, |
| 128 base::Bind(&AudioManagerBase::ReleaseVirtualOutputStream, | 129 base::Bind(&AudioManagerBase::ReleaseVirtualOutputStream, |
| 129 base::Unretained(this))); | 130 base::Unretained(this))); |
| 130 #endif | 131 #endif |
| 131 } else if (audio_output_disabled) { | 132 } else if (audio_output_disabled) { |
| 132 stream = FakeAudioOutputStream::MakeFakeStream(this, params); | 133 stream = FakeAudioOutputStream::MakeFakeStream(this, params); |
| 133 } else if (params.format() == AudioParameters::AUDIO_PCM_LINEAR) { | 134 } else if (params.format() == AudioParameters::AUDIO_PCM_LINEAR) { |
| 134 stream = MakeLinearOutputStream(params); | 135 stream = MakeLinearOutputStream(params); |
| 135 } else if (params.format() == AudioParameters::AUDIO_PCM_LOW_LATENCY) { | 136 } else if (params.format() == AudioParameters::AUDIO_PCM_LOW_LATENCY) { |
| (...skipping 19 matching lines...) Expand all Loading... |
| 155 } | 156 } |
| 156 | 157 |
| 157 if (num_input_streams_ >= max_num_input_streams_) { | 158 if (num_input_streams_ >= max_num_input_streams_) { |
| 158 DLOG(ERROR) << "Number of opened input audio streams " | 159 DLOG(ERROR) << "Number of opened input audio streams " |
| 159 << num_input_streams_ | 160 << num_input_streams_ |
| 160 << " exceed the max allowed number " << max_num_input_streams_; | 161 << " exceed the max allowed number " << max_num_input_streams_; |
| 161 return NULL; | 162 return NULL; |
| 162 } | 163 } |
| 163 | 164 |
| 164 AudioInputStream* stream = NULL; | 165 AudioInputStream* stream = NULL; |
| 165 if (params.format() == AudioParameters::AUDIO_VIRTUAL) { | 166 if (CommandLine::ForCurrentProcess()->HasSwitch( |
| 167 switches::kForceAudioMirroring) || |
| 168 params.format() == AudioParameters::AUDIO_VIRTUAL) { |
| 166 #if defined(OS_IOS) | 169 #if defined(OS_IOS) |
| 167 // We do not currently support iOS. | 170 // We do not currently support iOS. |
| 168 NOTIMPLEMENTED(); | 171 NOTIMPLEMENTED(); |
| 169 return NULL; | 172 return NULL; |
| 170 #else | 173 #else |
| 171 // TODO(justinlin): Currently, audio mirroring will only work for the first | 174 // TODO(justinlin): Currently, audio mirroring will only work for the first |
| 172 // request. Subsequent requests will not get audio. | 175 // request. Subsequent requests will not get audio. |
| 173 if (!virtual_audio_input_stream_) { | 176 if (!virtual_audio_input_stream_) { |
| 177 |
| 178 LOG(ERROR) << "CREATED VIRTUAL INPUT STREAM"; |
| 174 virtual_audio_input_stream_ = new VirtualAudioInputStream( | 179 virtual_audio_input_stream_ = new VirtualAudioInputStream( |
| 175 params, message_loop_, | 180 params, message_loop_, |
| 176 base::Bind(&AudioManagerBase::ReleaseVirtualInputStream, | 181 base::Bind(&AudioManagerBase::ReleaseVirtualInputStream, |
| 177 base::Unretained(this))); | 182 base::Unretained(this))); |
| 178 stream = virtual_audio_input_stream_; | 183 stream = virtual_audio_input_stream_; |
| 179 DVLOG(1) << "Virtual audio input stream created."; | 184 DVLOG(1) << "Virtual audio input stream created."; |
| 180 | 185 |
| 181 // Make all current output streams recreate themselves as | 186 // Make all current output streams recreate themselves as |
| 182 // VirtualAudioOutputStreams that will attach to the above | 187 // VirtualAudioOutputStreams that will attach to the above |
| 183 // VirtualAudioInputStream. | 188 // VirtualAudioInputStream. |
| (...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 398 | 403 |
| 399 AudioParameters AudioManagerBase::GetPreferredLowLatencyOutputStreamParameters( | 404 AudioParameters AudioManagerBase::GetPreferredLowLatencyOutputStreamParameters( |
| 400 const AudioParameters& input_params) { | 405 const AudioParameters& input_params) { |
| 401 #if defined(OS_IOS) | 406 #if defined(OS_IOS) |
| 402 // IOS implements audio input only. | 407 // IOS implements audio input only. |
| 403 NOTIMPLEMENTED(); | 408 NOTIMPLEMENTED(); |
| 404 return AudioParameters(); | 409 return AudioParameters(); |
| 405 #else | 410 #else |
| 406 // TODO(dalecurtis): This should include bits per channel and channel layout | 411 // TODO(dalecurtis): This should include bits per channel and channel layout |
| 407 // eventually. | 412 // eventually. |
| 413 // TODO(dalecurtis): GetAudio*() methods should be cached by each platform |
| 414 // specific audio manager to avoid system calls to retrieve the values, the |
| 415 // cache should be updated on device changes. |
| 408 return AudioParameters( | 416 return AudioParameters( |
| 409 AudioParameters::AUDIO_PCM_LOW_LATENCY, input_params.channel_layout(), | 417 AudioParameters::AUDIO_PCM_LOW_LATENCY, input_params.channel_layout(), |
| 410 GetAudioHardwareSampleRate(), 16, GetAudioHardwareBufferSize()); | 418 GetAudioHardwareSampleRate(), 16, GetAudioHardwareBufferSize()); |
| 411 #endif // defined(OS_IOS) | 419 #endif // defined(OS_IOS) |
| 412 } | 420 } |
| 413 | 421 |
| 414 void AudioManagerBase::AddOutputDeviceChangeListener( | 422 void AudioManagerBase::AddOutputDeviceChangeListener( |
| 415 AudioDeviceListener* listener) { | 423 AudioDeviceListener* listener) { |
| 416 DCHECK(message_loop_->BelongsToCurrentThread()); | 424 DCHECK(message_loop_->BelongsToCurrentThread()); |
| 417 output_listeners_.AddObserver(listener); | 425 output_listeners_.AddObserver(listener); |
| 418 } | 426 } |
| 419 | 427 |
| 420 void AudioManagerBase::RemoveOutputDeviceChangeListener( | 428 void AudioManagerBase::RemoveOutputDeviceChangeListener( |
| 421 AudioDeviceListener* listener) { | 429 AudioDeviceListener* listener) { |
| 422 DCHECK(message_loop_->BelongsToCurrentThread()); | 430 DCHECK(message_loop_->BelongsToCurrentThread()); |
| 423 output_listeners_.RemoveObserver(listener); | 431 output_listeners_.RemoveObserver(listener); |
| 424 } | 432 } |
| 425 | 433 |
| 426 void AudioManagerBase::NotifyAllOutputDeviceChangeListeners() { | 434 void AudioManagerBase::NotifyAllOutputDeviceChangeListeners() { |
| 427 DCHECK(message_loop_->BelongsToCurrentThread()); | 435 DCHECK(message_loop_->BelongsToCurrentThread()); |
| 428 DVLOG(1) << "Firing OnDeviceChange() notifications."; | 436 DVLOG(1) << "Firing OnDeviceChange() notifications."; |
| 429 FOR_EACH_OBSERVER(AudioDeviceListener, output_listeners_, OnDeviceChange()); | 437 FOR_EACH_OBSERVER(AudioDeviceListener, output_listeners_, OnDeviceChange()); |
| 430 } | 438 } |
| 431 | 439 |
| 432 } // namespace media | 440 } // namespace media |
| OLD | NEW |