Chromium Code Reviews| Index: content/browser/renderer_host/media/audio_input_device_manager.cc |
| diff --git a/content/browser/renderer_host/media/audio_input_device_manager.cc b/content/browser/renderer_host/media/audio_input_device_manager.cc |
| index 00e37f9a5c5f8cec6f6950a7ff1cb1add97d0a5b..66f79afb8855fdb10a2c73d219702b2282ed0262 100644 |
| --- a/content/browser/renderer_host/media/audio_input_device_manager.cc |
| +++ b/content/browser/renderer_host/media/audio_input_device_manager.cc |
| @@ -31,10 +31,13 @@ AudioInputDeviceManager::AudioInputDeviceManager( |
| AudioInputDeviceManager::~AudioInputDeviceManager() { |
| } |
| -void AudioInputDeviceManager::Register(MediaStreamProviderListener* listener) { |
| +void AudioInputDeviceManager::Register(MediaStreamProviderListener* listener, |
| + base::MessageLoopProxy* message_loop) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| DCHECK(!listener_); |
| + DCHECK(!device_loop_); |
| listener_ = listener; |
| + device_loop_ = message_loop; |
| } |
| void AudioInputDeviceManager::Unregister() { |
| @@ -47,6 +50,36 @@ void AudioInputDeviceManager::EnumerateDevices() { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| DCHECK(listener_); |
| + device_loop_->PostTask( |
| + FROM_HERE, |
| + base::Bind(&AudioInputDeviceManager::EnumerateOnDeviceThread, this)); |
| +} |
| + |
| +int AudioInputDeviceManager::Open(const StreamDeviceInfo& device) { |
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| + // Generates a new id for this device. |
| + int session_id = next_capture_session_id_++; |
| + device_loop_->PostTask( |
| + FROM_HERE, |
| + base::Bind(&AudioInputDeviceManager::OpenOnDeviceThread, |
| + this, session_id, device)); |
| + |
| + return session_id; |
| +} |
| + |
| +void AudioInputDeviceManager::Close(int session_id) { |
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| + DCHECK(listener_); |
| + device_loop_->PostTask( |
| + FROM_HERE, |
| + base::Bind(&AudioInputDeviceManager::CloseOnDeviceThread, |
| + this, session_id)); |
| +} |
| + |
| +void AudioInputDeviceManager::EnumerateOnDeviceThread() { |
| + DCHECK(IsOnDeviceThread()); |
| + // AudioManager is deleted after FILE thread stops, so the device thread |
|
tommi (sloooow) - chröme
2012/07/04 13:46:48
do we still use the FILE thread for something or d
no longer working on chromium
2012/07/04 14:31:39
Wrong comment from some previous upload.
|
| + // should never outlive the AudioManager. |
| media::AudioDeviceNames device_names; |
| audio_manager_->GetAudioInputDeviceNames(&device_names); |
| @@ -69,19 +102,14 @@ void AudioInputDeviceManager::EnumerateDevices() { |
| devices)); |
| } |
| -int AudioInputDeviceManager::Open(const StreamDeviceInfo& device) { |
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| - |
| - // Generates a new id for this device. |
| - int session_id = next_capture_session_id_++; |
| +void AudioInputDeviceManager::OpenOnDeviceThread( |
| + int session_id, const StreamDeviceInfo& device) { |
| + DCHECK(IsOnDeviceThread()); |
| DCHECK(devices_.find(session_id) == devices_.end()); |
| - media::AudioDeviceName audio_input_device_name; |
| - audio_input_device_name.device_name = device.name; |
| - audio_input_device_name.unique_id = device.device_id; |
| - |
| // Adds the session_id and device to the list. |
| - devices_[session_id] = audio_input_device_name; |
| + media::AudioDeviceName target_device(device.name, device.device_id); |
| + devices_[session_id] = target_device; |
| // Returns the |session_id| through the listener by posting a task on |
| // IO thread since MediaStreamManager handles the callback asynchronously. |
| @@ -90,13 +118,10 @@ int AudioInputDeviceManager::Open(const StreamDeviceInfo& device) { |
| base::Bind(&AudioInputDeviceManager::OpenedOnIOThread, |
| this, |
| session_id)); |
| - |
| - return session_id; |
| } |
| -void AudioInputDeviceManager::Close(int session_id) { |
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| - DCHECK(listener_); |
| +void AudioInputDeviceManager::CloseOnDeviceThread(int session_id) { |
| + DCHECK(IsOnDeviceThread()); |
| if (devices_.find(session_id) != devices_.end()) |
| devices_.erase(session_id); |
| @@ -181,4 +206,8 @@ void AudioInputDeviceManager::ClosedOnIOThread(int session_id) { |
| session_id); |
| } |
| +bool AudioInputDeviceManager::IsOnDeviceThread() const { |
| + return device_loop_->BelongsToCurrentThread(); |
| +} |
| + |
| } // namespace media_stream |