Chromium Code Reviews| 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/browser/renderer_host/media/audio_input_renderer_host.h" | 5 #include "content/browser/renderer_host/media/audio_input_renderer_host.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/metrics/histogram.h" | 8 #include "base/metrics/histogram.h" |
| 9 #include "base/process.h" | 9 #include "base/process.h" |
| 10 #include "base/shared_memory.h" | 10 #include "base/shared_memory.h" |
| (...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 169 bool AudioInputRendererHost::OnMessageReceived(const IPC::Message& message, | 169 bool AudioInputRendererHost::OnMessageReceived(const IPC::Message& message, |
| 170 bool* message_was_ok) { | 170 bool* message_was_ok) { |
| 171 bool handled = true; | 171 bool handled = true; |
| 172 IPC_BEGIN_MESSAGE_MAP_EX(AudioInputRendererHost, message, *message_was_ok) | 172 IPC_BEGIN_MESSAGE_MAP_EX(AudioInputRendererHost, message, *message_was_ok) |
| 173 IPC_MESSAGE_HANDLER(AudioInputHostMsg_StartDevice, OnStartDevice) | 173 IPC_MESSAGE_HANDLER(AudioInputHostMsg_StartDevice, OnStartDevice) |
| 174 IPC_MESSAGE_HANDLER(AudioInputHostMsg_CreateStream, OnCreateStream) | 174 IPC_MESSAGE_HANDLER(AudioInputHostMsg_CreateStream, OnCreateStream) |
| 175 IPC_MESSAGE_HANDLER(AudioInputHostMsg_RecordStream, OnRecordStream) | 175 IPC_MESSAGE_HANDLER(AudioInputHostMsg_RecordStream, OnRecordStream) |
| 176 IPC_MESSAGE_HANDLER(AudioInputHostMsg_CloseStream, OnCloseStream) | 176 IPC_MESSAGE_HANDLER(AudioInputHostMsg_CloseStream, OnCloseStream) |
| 177 IPC_MESSAGE_HANDLER(AudioInputHostMsg_GetVolume, OnGetVolume) | 177 IPC_MESSAGE_HANDLER(AudioInputHostMsg_GetVolume, OnGetVolume) |
| 178 IPC_MESSAGE_HANDLER(AudioInputHostMsg_SetVolume, OnSetVolume) | 178 IPC_MESSAGE_HANDLER(AudioInputHostMsg_SetVolume, OnSetVolume) |
| 179 IPC_MESSAGE_HANDLER(AudioInputHostMsg_SetAutomaticGainControl, | |
| 180 OnSetAutomaticGainControl) | |
| 179 IPC_MESSAGE_UNHANDLED(handled = false) | 181 IPC_MESSAGE_UNHANDLED(handled = false) |
| 180 IPC_END_MESSAGE_MAP_EX() | 182 IPC_END_MESSAGE_MAP_EX() |
| 181 | 183 |
| 182 return handled; | 184 return handled; |
| 183 } | 185 } |
| 184 void AudioInputRendererHost::OnStartDevice(int stream_id, int session_id) { | 186 void AudioInputRendererHost::OnStartDevice(int stream_id, int session_id) { |
| 185 VLOG(1) << "AudioInputRendererHost::OnStartDevice(stream_id=" | 187 VLOG(1) << "AudioInputRendererHost::OnStartDevice(stream_id=" |
| 186 << stream_id << ", session_id = " << session_id << ")"; | 188 << stream_id << ", session_id = " << session_id << ")"; |
| 187 | 189 |
| 188 // Get access to the AudioInputDeviceManager to start the device. | 190 // Get access to the AudioInputDeviceManager to start the device. |
| 189 media_stream::AudioInputDeviceManager* audio_input_man = | 191 media_stream::AudioInputDeviceManager* audio_input_man = |
| 190 media_stream::MediaStreamManager::GetForResourceContext( | 192 media_stream::MediaStreamManager::GetForResourceContext( |
| 191 resource_context_, audio_manager_)->audio_input_device_manager(); | 193 resource_context_, audio_manager_)->audio_input_device_manager(); |
| 192 | 194 |
| 193 // Add the session entry to the map. | 195 // Add the session entry to the map. |
| 194 session_entries_[session_id] = stream_id; | 196 session_entries_[session_id] = stream_id; |
| 195 | 197 |
| 196 // Start the device with the session_id. If the device is started | 198 // Start the device with the session_id. If the device is started |
| 197 // successfully, OnDeviceStarted() callback will be triggered. | 199 // successfully, OnDeviceStarted() callback will be triggered. |
| 198 audio_input_man->Start(session_id, this); | 200 audio_input_man->Start(session_id, this); |
| 199 } | 201 } |
| 200 | 202 |
| 201 void AudioInputRendererHost::OnCreateStream(int stream_id, | 203 void AudioInputRendererHost::OnCreateStream(int stream_id, |
| 202 const AudioParameters& params, | 204 const AudioParameters& params, |
| 203 const std::string& device_id) { | 205 const std::string& device_id, |
| 206 bool automatic_gain_control) { | |
| 204 VLOG(1) << "AudioInputRendererHost::OnCreateStream(stream_id=" | 207 VLOG(1) << "AudioInputRendererHost::OnCreateStream(stream_id=" |
| 205 << stream_id << ")"; | 208 << stream_id << ")"; |
| 206 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 209 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 207 DCHECK(LookupById(stream_id) == NULL); | 210 DCHECK(LookupById(stream_id) == NULL); |
| 208 | 211 |
| 209 AudioParameters audio_params(params); | 212 AudioParameters audio_params(params); |
| 210 | 213 |
| 211 DCHECK_GT(audio_params.samples_per_packet, 0); | 214 DCHECK_GT(audio_params.samples_per_packet, 0); |
| 212 uint32 packet_size = audio_params.GetPacketSize(); | 215 uint32 packet_size = audio_params.GetPacketSize(); |
| 213 | 216 |
| 214 // Create a new AudioEntry structure. | 217 // Create a new AudioEntry structure. |
| 215 scoped_ptr<AudioEntry> entry(new AudioEntry()); | 218 scoped_ptr<AudioEntry> entry(new AudioEntry()); |
| 216 | 219 |
| 220 uint32 mem_size = AudioInputBuffer::kSizeOfStructMinusArr + packet_size; | |
|
tommi (sloooow) - chröme
2012/03/16 13:31:05
nit: change kSizeOfStructMinusArr -> kSizeOfStruct
henrika (OOO until Aug 14)
2012/03/21 10:16:04
Done.
| |
| 221 | |
| 217 // Create the shared memory and share it with the renderer process | 222 // Create the shared memory and share it with the renderer process |
| 218 // using a new SyncWriter object. | 223 // using a new SyncWriter object. |
| 219 if (!entry->shared_memory.CreateAndMapAnonymous(packet_size)) { | 224 if (!entry->shared_memory.CreateAndMapAnonymous(mem_size)) { |
| 220 // If creation of shared memory failed then send an error message. | 225 // If creation of shared memory failed then send an error message. |
| 221 SendErrorMessage(stream_id); | 226 SendErrorMessage(stream_id); |
| 222 return; | 227 return; |
| 223 } | 228 } |
| 224 | 229 |
| 225 scoped_ptr<AudioInputSyncWriter> writer( | 230 scoped_ptr<AudioInputSyncWriter> writer( |
| 226 new AudioInputSyncWriter(&entry->shared_memory)); | 231 new AudioInputSyncWriter(&entry->shared_memory)); |
| 227 | 232 |
| 228 if (!writer->Init()) { | 233 if (!writer->Init()) { |
| 229 SendErrorMessage(stream_id); | 234 SendErrorMessage(stream_id); |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 241 this, | 246 this, |
| 242 audio_params, | 247 audio_params, |
| 243 device_id, | 248 device_id, |
| 244 entry->writer.get()); | 249 entry->writer.get()); |
| 245 | 250 |
| 246 if (!entry->controller) { | 251 if (!entry->controller) { |
| 247 SendErrorMessage(stream_id); | 252 SendErrorMessage(stream_id); |
| 248 return; | 253 return; |
| 249 } | 254 } |
| 250 | 255 |
| 256 // Set the initial AGC state for the audio input stream. | |
| 257 entry->controller->SetAutomaticGainControl(automatic_gain_control); | |
| 258 | |
| 251 // If we have created the controller successfully create a entry and add it | 259 // If we have created the controller successfully create a entry and add it |
| 252 // to the map. | 260 // to the map. |
| 253 entry->stream_id = stream_id; | 261 entry->stream_id = stream_id; |
| 254 | 262 |
| 255 audio_entries_.insert(std::make_pair(stream_id, entry.release())); | 263 audio_entries_.insert(std::make_pair(stream_id, entry.release())); |
| 256 } | 264 } |
| 257 | 265 |
| 258 void AudioInputRendererHost::OnRecordStream(int stream_id) { | 266 void AudioInputRendererHost::OnRecordStream(int stream_id) { |
| 259 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 267 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 260 | 268 |
| (...skipping 22 matching lines...) Expand all Loading... | |
| 283 | 291 |
| 284 void AudioInputRendererHost::OnSetVolume(int stream_id, double volume) { | 292 void AudioInputRendererHost::OnSetVolume(int stream_id, double volume) { |
| 285 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 293 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 286 | 294 |
| 287 AudioEntry* entry = LookupById(stream_id); | 295 AudioEntry* entry = LookupById(stream_id); |
| 288 if (!entry) { | 296 if (!entry) { |
| 289 SendErrorMessage(stream_id); | 297 SendErrorMessage(stream_id); |
| 290 return; | 298 return; |
| 291 } | 299 } |
| 292 | 300 |
| 293 // TODO(henrika): TBI. | 301 entry->controller->SetVolume(volume); |
| 302 } | |
| 303 | |
| 304 void AudioInputRendererHost::OnGetVolume(int stream_id) { | |
| 294 NOTIMPLEMENTED(); | 305 NOTIMPLEMENTED(); |
|
tommi (sloooow) - chröme
2012/03/16 13:31:05
Do we need to implement this at some point or neve
scherkus (not reviewing)
2012/03/20 13:49:41
AFAIK GetVolume() is completely unused
henrika (OOO until Aug 14)
2012/03/21 10:16:04
Yeah, you are correct. I might as well drop it act
| |
| 295 } | 306 } |
| 296 | 307 |
| 297 void AudioInputRendererHost::OnGetVolume(int stream_id) { | 308 void AudioInputRendererHost::OnSetAutomaticGainControl(int stream_id, |
| 309 bool enabled) { | |
| 298 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 310 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 299 | 311 |
| 300 AudioEntry* entry = LookupById(stream_id); | 312 AudioEntry* entry = LookupById(stream_id); |
| 301 if (!entry) { | 313 if (!entry) { |
| 302 SendErrorMessage(stream_id); | 314 SendErrorMessage(stream_id); |
| 303 return; | 315 return; |
| 304 } | 316 } |
| 305 | 317 |
| 306 // TODO(henrika): TBI. | 318 entry->controller->SetAutomaticGainControl(enabled); |
| 307 NOTIMPLEMENTED(); | |
| 308 } | 319 } |
| 309 | 320 |
| 310 void AudioInputRendererHost::SendErrorMessage(int stream_id) { | 321 void AudioInputRendererHost::SendErrorMessage(int stream_id) { |
| 311 Send(new AudioInputMsg_NotifyStreamStateChanged(stream_id, | 322 Send(new AudioInputMsg_NotifyStreamStateChanged(stream_id, |
| 312 kAudioStreamError)); | 323 kAudioStreamError)); |
| 313 } | 324 } |
| 314 | 325 |
| 315 void AudioInputRendererHost::DeleteEntries() { | 326 void AudioInputRendererHost::DeleteEntries() { |
| 316 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 327 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 317 | 328 |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 437 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 448 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 438 | 449 |
| 439 for (SessionEntryMap::iterator it = session_entries_.begin(); | 450 for (SessionEntryMap::iterator it = session_entries_.begin(); |
| 440 it != session_entries_.end(); ++it) { | 451 it != session_entries_.end(); ++it) { |
| 441 if (stream_id == it->second) { | 452 if (stream_id == it->second) { |
| 442 return it->first; | 453 return it->first; |
| 443 } | 454 } |
| 444 } | 455 } |
| 445 return 0; | 456 return 0; |
| 446 } | 457 } |
| OLD | NEW |