Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(31)

Side by Side Diff: content/browser/renderer_host/media/audio_input_renderer_host.cc

Issue 10662049: Move the device enumerate/open/close work to device thread from IO thread (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: small changes to fix the trybots' failure Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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"
11 #include "content/browser/renderer_host/media/audio_input_device_manager.h" 11 #include "content/browser/renderer_host/media/audio_input_device_manager.h"
12 #include "content/browser/renderer_host/media/audio_input_sync_writer.h" 12 #include "content/browser/renderer_host/media/audio_input_sync_writer.h"
13 #include "content/browser/renderer_host/media/media_stream_manager.h" 13 #include "content/browser/renderer_host/media/media_stream_manager.h"
14 #include "content/common/media/audio_messages.h" 14 #include "content/common/media/audio_messages.h"
15 15
16 using content::BrowserMessageFilter; 16 using content::BrowserMessageFilter;
17 using content::BrowserThread; 17 using content::BrowserThread;
18 18
19 AudioInputRendererHost::AudioEntry::AudioEntry() 19 AudioInputRendererHost::AudioEntry::AudioEntry()
20 : stream_id(0), 20 : stream_id(0),
21 pending_close(false) { 21 pending_close(false) {
22 } 22 }
23 23
24 AudioInputRendererHost::AudioEntry::~AudioEntry() {} 24 AudioInputRendererHost::AudioEntry::~AudioEntry() {}
25 25
26 AudioInputRendererHost::AudioInputRendererHost( 26 AudioInputRendererHost::AudioInputRendererHost(
27 content::ResourceContext* resource_context, 27 media::AudioManager* audio_manager,
28 media::AudioManager* audio_manager) 28 media_stream::MediaStreamManager* media_stream_manager)
29 : resource_context_(resource_context), 29 : audio_manager_(audio_manager),
30 audio_manager_(audio_manager) { 30 media_stream_manager_(media_stream_manager) {
31 } 31 }
32 32
33 AudioInputRendererHost::~AudioInputRendererHost() { 33 AudioInputRendererHost::~AudioInputRendererHost() {
34 DCHECK(audio_entries_.empty()); 34 DCHECK(audio_entries_.empty());
35 } 35 }
36 36
37 void AudioInputRendererHost::OnChannelClosing() { 37 void AudioInputRendererHost::OnChannelClosing() {
38 BrowserMessageFilter::OnChannelClosing(); 38 BrowserMessageFilter::OnChannelClosing();
39 39
40 // Since the IPC channel is gone, close all requested audio streams. 40 // Since the IPC channel is gone, close all requested audio streams.
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
175 IPC_MESSAGE_HANDLER(AudioInputHostMsg_SetVolume, OnSetVolume) 175 IPC_MESSAGE_HANDLER(AudioInputHostMsg_SetVolume, OnSetVolume)
176 IPC_MESSAGE_UNHANDLED(handled = false) 176 IPC_MESSAGE_UNHANDLED(handled = false)
177 IPC_END_MESSAGE_MAP_EX() 177 IPC_END_MESSAGE_MAP_EX()
178 178
179 return handled; 179 return handled;
180 } 180 }
181 void AudioInputRendererHost::OnStartDevice(int stream_id, int session_id) { 181 void AudioInputRendererHost::OnStartDevice(int stream_id, int session_id) {
182 VLOG(1) << "AudioInputRendererHost::OnStartDevice(stream_id=" 182 VLOG(1) << "AudioInputRendererHost::OnStartDevice(stream_id="
183 << stream_id << ", session_id = " << session_id << ")"; 183 << stream_id << ", session_id = " << session_id << ")";
184 184
185 // Get access to the AudioInputDeviceManager to start the device.
186 media_stream::AudioInputDeviceManager* audio_input_man =
187 media_stream::MediaStreamManager::GetForResourceContext(
188 resource_context_, audio_manager_)->audio_input_device_manager();
189
190 // Add the session entry to the map. 185 // Add the session entry to the map.
191 session_entries_[session_id] = stream_id; 186 session_entries_[session_id] = stream_id;
192 187
193 // Start the device with the session_id. If the device is started 188 // Start the device with the session_id. If the device is started
194 // successfully, OnDeviceStarted() callback will be triggered. 189 // successfully, OnDeviceStarted() callback will be triggered.
195 audio_input_man->Start(session_id, this); 190 media_stream_manager_->audio_input_device_manager()->Start(session_id, this);
196 } 191 }
197 192
198 void AudioInputRendererHost::OnCreateStream( 193 void AudioInputRendererHost::OnCreateStream(
199 int stream_id, const media::AudioParameters& params, 194 int stream_id, const media::AudioParameters& params,
200 const std::string& device_id, bool automatic_gain_control) { 195 const std::string& device_id, bool automatic_gain_control) {
201 VLOG(1) << "AudioInputRendererHost::OnCreateStream(stream_id=" 196 VLOG(1) << "AudioInputRendererHost::OnCreateStream(stream_id="
202 << stream_id << ")"; 197 << stream_id << ")";
203 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 198 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
204 DCHECK(LookupById(stream_id) == NULL); 199 DCHECK(LookupById(stream_id) == NULL);
205 200
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
342 kAudioStreamPaused)); 337 kAudioStreamPaused));
343 } 338 }
344 339
345 // Delete the session entry. 340 // Delete the session entry.
346 session_entries_.erase(it); 341 session_entries_.erase(it);
347 } 342 }
348 343
349 void AudioInputRendererHost::StopAndDeleteDevice(int session_id) { 344 void AudioInputRendererHost::StopAndDeleteDevice(int session_id) {
350 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 345 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
351 346
352 media_stream::AudioInputDeviceManager* audio_input_man = 347 media_stream_manager_->audio_input_device_manager()->Stop(session_id);
353 media_stream::MediaStreamManager::GetForResourceContext(
354 resource_context_, audio_manager_)->audio_input_device_manager();
355 audio_input_man->Stop(session_id);
356 348
357 // Delete the session entry. 349 // Delete the session entry.
358 session_entries_.erase(session_id); 350 session_entries_.erase(session_id);
359 } 351 }
360 352
361 void AudioInputRendererHost::CloseAndDeleteStream(AudioEntry* entry) { 353 void AudioInputRendererHost::CloseAndDeleteStream(AudioEntry* entry) {
362 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 354 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
363 355
364 if (!entry->pending_close) { 356 if (!entry->pending_close) {
365 entry->controller->Close(base::Bind(&AudioInputRendererHost::DeleteEntry, 357 entry->controller->Close(base::Bind(&AudioInputRendererHost::DeleteEntry,
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
415 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 407 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
416 408
417 for (SessionEntryMap::iterator it = session_entries_.begin(); 409 for (SessionEntryMap::iterator it = session_entries_.begin();
418 it != session_entries_.end(); ++it) { 410 it != session_entries_.end(); ++it) {
419 if (stream_id == it->second) { 411 if (stream_id == it->second) {
420 return it->first; 412 return it->first;
421 } 413 }
422 } 414 }
423 return 0; 415 return 0;
424 } 416 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698