Chromium Code Reviews| Index: content/renderer/media/audio_message_filter.cc |
| diff --git a/content/renderer/media/audio_message_filter.cc b/content/renderer/media/audio_message_filter.cc |
| index 22915c521c53264ededd36610bf119e14089c95c..4397720c4e89268b4c747fa14044788145d94a7b 100644 |
| --- a/content/renderer/media/audio_message_filter.cc |
| +++ b/content/renderer/media/audio_message_filter.cc |
| @@ -23,21 +23,22 @@ AudioMessageFilter* AudioMessageFilter::Get() { |
| AudioMessageFilter::AudioMessageFilter() |
| : next_stream_id_(1), |
| - channel_(NULL) { |
| + channel_(NULL), |
| + audio_hardware_config_(NULL) { |
| DVLOG(1) << "AudioMessageFilter::AudioMessageFilter()"; |
| DCHECK(!filter_); |
| filter_ = this; |
| } |
| int AudioMessageFilter::AddDelegate(media::AudioOutputIPCDelegate* delegate) { |
| - base::AutoLock guard(delegates_lock_); |
| + base::AutoLock auto_lock(lock_); |
| const int id = next_stream_id_++; |
| delegates_.insert(std::make_pair(id, delegate)); |
| return id; |
| } |
| void AudioMessageFilter::RemoveDelegate(int id) { |
| - base::AutoLock guard(delegates_lock_); |
| + base::AutoLock auto_lock(lock_); |
| delegates_.erase(id); |
| } |
| @@ -96,6 +97,7 @@ bool AudioMessageFilter::OnMessageReceived(const IPC::Message& message) { |
| IPC_BEGIN_MESSAGE_MAP(AudioMessageFilter, message) |
| IPC_MESSAGE_HANDLER(AudioMsg_NotifyStreamCreated, OnStreamCreated) |
| IPC_MESSAGE_HANDLER(AudioMsg_NotifyStreamStateChanged, OnStreamStateChanged) |
| + IPC_MESSAGE_HANDLER(AudioMsg_NotifyDeviceChanged, OnOutputDeviceChanged) |
| IPC_MESSAGE_UNHANDLED(handled = false) |
| IPC_END_MESSAGE_MAP() |
| return handled; |
| @@ -115,7 +117,7 @@ void AudioMessageFilter::OnChannelClosing() { |
| DelegateMap zombies; |
| { |
| - base::AutoLock guard(delegates_lock_); |
| + base::AutoLock auto_lock(lock_); |
| delegates_.swap(zombies); |
| } |
| @@ -153,7 +155,7 @@ void AudioMessageFilter::OnStreamCreated( |
| #endif |
| { |
| - base::AutoLock guard(delegates_lock_); |
| + base::AutoLock auto_lock(lock_); |
| DelegateMap::const_iterator it = delegates_.find(stream_id); |
| if (it != delegates_.end()) { |
| it->second->OnStreamCreated(handle, socket_handle, length); |
| @@ -169,7 +171,7 @@ void AudioMessageFilter::OnStreamCreated( |
| void AudioMessageFilter::OnStreamStateChanged( |
| int stream_id, media::AudioOutputIPCDelegate::State state) { |
| - base::AutoLock guard(delegates_lock_); |
| + base::AutoLock auto_lock(lock_); |
| DelegateMap::const_iterator it = delegates_.find(stream_id); |
| DLOG_IF(WARNING, it == delegates_.end()) |
| << "No delegate found for state change. " << state; |
| @@ -177,4 +179,22 @@ void AudioMessageFilter::OnStreamStateChanged( |
| it->second->OnStateChanged(state); |
| } |
| +void AudioMessageFilter::OnOutputDeviceChanged(int stream_id, |
| + int new_buffer_size, |
| + int new_sample_rate) { |
| + base::AutoLock auto_lock(lock_); |
| + |
| + // If an audio hardware config hasn't been created, ignore the message. |
|
scherkus (not reviewing)
2013/01/31 02:33:33
nit: a more informative comment would suggest when
DaleCurtis
2013/01/31 19:50:00
Not until we remove the high latency audio path an
|
| + if (!audio_hardware_config_) |
| + return; |
| + |
| + audio_hardware_config_->UpdateOutputConfig(new_buffer_size, new_sample_rate); |
| +} |
| + |
| +void AudioMessageFilter::SetAudioHardwareConfig( |
| + media::AudioHardwareConfig* config) { |
| + base::AutoLock auto_lock(lock_); |
| + audio_hardware_config_ = config; |
| +} |
| + |
| } // namespace content |