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 "content/renderer/media/audio_message_filter.h" | 5 #include "content/renderer/media/audio_message_filter.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/message_loop/message_loop_proxy.h" | 8 #include "base/message_loop/message_loop_proxy.h" |
9 #include "base/strings/stringprintf.h" | 9 #include "base/strings/stringprintf.h" |
10 #include "content/common/media/audio_messages.h" | 10 #include "content/common/media/audio_messages.h" |
(...skipping 28 matching lines...) Expand all Loading... |
39 const scoped_refptr<AudioMessageFilter> filter_; | 39 const scoped_refptr<AudioMessageFilter> filter_; |
40 const int render_view_id_; | 40 const int render_view_id_; |
41 const int render_frame_id_; | 41 const int render_frame_id_; |
42 int stream_id_; | 42 int stream_id_; |
43 }; | 43 }; |
44 | 44 |
45 AudioMessageFilter* AudioMessageFilter::g_filter = NULL; | 45 AudioMessageFilter* AudioMessageFilter::g_filter = NULL; |
46 | 46 |
47 AudioMessageFilter::AudioMessageFilter( | 47 AudioMessageFilter::AudioMessageFilter( |
48 const scoped_refptr<base::MessageLoopProxy>& io_message_loop) | 48 const scoped_refptr<base::MessageLoopProxy>& io_message_loop) |
49 : channel_(NULL), | 49 : sender_(NULL), |
50 audio_hardware_config_(NULL), | 50 audio_hardware_config_(NULL), |
51 io_message_loop_(io_message_loop) { | 51 io_message_loop_(io_message_loop) { |
52 DCHECK(!g_filter); | 52 DCHECK(!g_filter); |
53 g_filter = this; | 53 g_filter = this; |
54 } | 54 } |
55 | 55 |
56 AudioMessageFilter::~AudioMessageFilter() { | 56 AudioMessageFilter::~AudioMessageFilter() { |
57 DCHECK_EQ(g_filter, this); | 57 DCHECK_EQ(g_filter, this); |
58 g_filter = NULL; | 58 g_filter = NULL; |
59 } | 59 } |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
111 stream_id_ = kStreamIDNotSet; | 111 stream_id_ = kStreamIDNotSet; |
112 } | 112 } |
113 | 113 |
114 void AudioMessageFilter::AudioOutputIPCImpl::SetVolume(double volume) { | 114 void AudioMessageFilter::AudioOutputIPCImpl::SetVolume(double volume) { |
115 DCHECK_NE(stream_id_, kStreamIDNotSet); | 115 DCHECK_NE(stream_id_, kStreamIDNotSet); |
116 filter_->Send(new AudioHostMsg_SetVolume(stream_id_, volume)); | 116 filter_->Send(new AudioHostMsg_SetVolume(stream_id_, volume)); |
117 } | 117 } |
118 | 118 |
119 void AudioMessageFilter::Send(IPC::Message* message) { | 119 void AudioMessageFilter::Send(IPC::Message* message) { |
120 DCHECK(io_message_loop_->BelongsToCurrentThread()); | 120 DCHECK(io_message_loop_->BelongsToCurrentThread()); |
121 if (!channel_) { | 121 if (!sender_) { |
122 delete message; | 122 delete message; |
123 } else { | 123 } else { |
124 channel_->Send(message); | 124 sender_->Send(message); |
125 } | 125 } |
126 } | 126 } |
127 | 127 |
128 bool AudioMessageFilter::OnMessageReceived(const IPC::Message& message) { | 128 bool AudioMessageFilter::OnMessageReceived(const IPC::Message& message) { |
129 DCHECK(io_message_loop_->BelongsToCurrentThread()); | 129 DCHECK(io_message_loop_->BelongsToCurrentThread()); |
130 bool handled = true; | 130 bool handled = true; |
131 IPC_BEGIN_MESSAGE_MAP(AudioMessageFilter, message) | 131 IPC_BEGIN_MESSAGE_MAP(AudioMessageFilter, message) |
132 IPC_MESSAGE_HANDLER(AudioMsg_NotifyStreamCreated, OnStreamCreated) | 132 IPC_MESSAGE_HANDLER(AudioMsg_NotifyStreamCreated, OnStreamCreated) |
133 IPC_MESSAGE_HANDLER(AudioMsg_NotifyStreamStateChanged, OnStreamStateChanged) | 133 IPC_MESSAGE_HANDLER(AudioMsg_NotifyStreamStateChanged, OnStreamStateChanged) |
134 IPC_MESSAGE_HANDLER(AudioMsg_NotifyDeviceChanged, OnOutputDeviceChanged) | 134 IPC_MESSAGE_HANDLER(AudioMsg_NotifyDeviceChanged, OnOutputDeviceChanged) |
135 IPC_MESSAGE_UNHANDLED(handled = false) | 135 IPC_MESSAGE_UNHANDLED(handled = false) |
136 IPC_END_MESSAGE_MAP() | 136 IPC_END_MESSAGE_MAP() |
137 return handled; | 137 return handled; |
138 } | 138 } |
139 | 139 |
140 void AudioMessageFilter::OnFilterAdded(IPC::Channel* channel) { | 140 void AudioMessageFilter::OnFilterAdded(IPC::Sender* sender) { |
141 DCHECK(io_message_loop_->BelongsToCurrentThread()); | 141 DCHECK(io_message_loop_->BelongsToCurrentThread()); |
142 channel_ = channel; | 142 sender_ = sender; |
143 } | 143 } |
144 | 144 |
145 void AudioMessageFilter::OnFilterRemoved() { | 145 void AudioMessageFilter::OnFilterRemoved() { |
146 DCHECK(io_message_loop_->BelongsToCurrentThread()); | 146 DCHECK(io_message_loop_->BelongsToCurrentThread()); |
147 | 147 |
148 // Once removed, a filter will not be used again. At this time all | 148 // Once removed, a filter will not be used again. At this time all |
149 // delegates must be notified so they release their reference. | 149 // delegates must be notified so they release their reference. |
150 OnChannelClosing(); | 150 OnChannelClosing(); |
151 } | 151 } |
152 | 152 |
153 void AudioMessageFilter::OnChannelClosing() { | 153 void AudioMessageFilter::OnChannelClosing() { |
154 DCHECK(io_message_loop_->BelongsToCurrentThread()); | 154 DCHECK(io_message_loop_->BelongsToCurrentThread()); |
155 channel_ = NULL; | 155 sender_ = NULL; |
156 | 156 |
157 DLOG_IF(WARNING, !delegates_.IsEmpty()) | 157 DLOG_IF(WARNING, !delegates_.IsEmpty()) |
158 << "Not all audio devices have been closed."; | 158 << "Not all audio devices have been closed."; |
159 | 159 |
160 IDMap<media::AudioOutputIPCDelegate>::iterator it(&delegates_); | 160 IDMap<media::AudioOutputIPCDelegate>::iterator it(&delegates_); |
161 while (!it.IsAtEnd()) { | 161 while (!it.IsAtEnd()) { |
162 it.GetCurrentValue()->OnIPCClosed(); | 162 it.GetCurrentValue()->OnIPCClosed(); |
163 delegates_.Remove(it.GetCurrentKey()); | 163 delegates_.Remove(it.GetCurrentKey()); |
164 it.Advance(); | 164 it.Advance(); |
165 } | 165 } |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
242 audio_hardware_config_->UpdateOutputConfig(output_params); | 242 audio_hardware_config_->UpdateOutputConfig(output_params); |
243 } | 243 } |
244 | 244 |
245 void AudioMessageFilter::SetAudioHardwareConfig( | 245 void AudioMessageFilter::SetAudioHardwareConfig( |
246 media::AudioHardwareConfig* config) { | 246 media::AudioHardwareConfig* config) { |
247 base::AutoLock auto_lock(lock_); | 247 base::AutoLock auto_lock(lock_); |
248 audio_hardware_config_ = config; | 248 audio_hardware_config_ = config; |
249 } | 249 } |
250 | 250 |
251 } // namespace content | 251 } // namespace content |
OLD | NEW |