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/media_stream_manager.h" | 5 #include "content/browser/renderer_host/media/media_stream_manager.h" |
| 6 | 6 |
| 7 #include <list> | 7 #include <list> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 339 BrowserThread::PostTask( | 339 BrowserThread::PostTask( |
| 340 BrowserThread::IO, FROM_HERE, | 340 BrowserThread::IO, FROM_HERE, |
| 341 base::Bind(&MediaStreamManager::InitializeDeviceManagersOnIOThread, | 341 base::Bind(&MediaStreamManager::InitializeDeviceManagersOnIOThread, |
| 342 base::Unretained(this))); | 342 base::Unretained(this))); |
| 343 } | 343 } |
| 344 } | 344 } |
| 345 | 345 |
| 346 MediaStreamManager::~MediaStreamManager() { | 346 MediaStreamManager::~MediaStreamManager() { |
| 347 DVLOG(1) << "~MediaStreamManager"; | 347 DVLOG(1) << "~MediaStreamManager"; |
| 348 DCHECK(requests_.empty()); | 348 DCHECK(requests_.empty()); |
| 349 DCHECK(!device_thread_.get()); | 349 DCHECK(!device_task_runner_); |
| 350 } | 350 } |
| 351 | 351 |
| 352 VideoCaptureManager* MediaStreamManager::video_capture_manager() { | 352 VideoCaptureManager* MediaStreamManager::video_capture_manager() { |
| 353 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 353 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 354 DCHECK(video_capture_manager_.get()); | 354 DCHECK(video_capture_manager_.get()); |
| 355 return video_capture_manager_.get(); | 355 return video_capture_manager_.get(); |
| 356 } | 356 } |
| 357 | 357 |
| 358 AudioInputDeviceManager* MediaStreamManager::audio_input_device_manager() { | 358 AudioInputDeviceManager* MediaStreamManager::audio_input_device_manager() { |
| 359 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 359 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| (...skipping 986 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1346 const MediaStreamDevices& devices) { | 1346 const MediaStreamDevices& devices) { |
| 1347 if (!request->callback.is_null()) | 1347 if (!request->callback.is_null()) |
| 1348 request->callback.Run(devices, request->ui_proxy.Pass()); | 1348 request->callback.Run(devices, request->ui_proxy.Pass()); |
| 1349 | 1349 |
| 1350 // Delete the request since it is done. | 1350 // Delete the request since it is done. |
| 1351 DeleteRequest(label); | 1351 DeleteRequest(label); |
| 1352 } | 1352 } |
| 1353 | 1353 |
| 1354 void MediaStreamManager::InitializeDeviceManagersOnIOThread() { | 1354 void MediaStreamManager::InitializeDeviceManagersOnIOThread() { |
| 1355 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 1355 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 1356 if (device_thread_) | 1356 if (device_task_runner_) |
| 1357 return; | 1357 return; |
| 1358 | 1358 |
| 1359 device_thread_.reset(new base::Thread("MediaStreamDeviceThread")); | 1359 device_task_runner_ = audio_manager_->GetWorkerTaskRunner(); |
|
henrika (OOO until Aug 14)
2014/02/05 08:42:03
It is actually not clear to me when to use GetWork
DaleCurtis
2014/02/05 21:47:11
See the documentation for AudioManager::GetWorkerT
henrika (OOO until Aug 14)
2014/02/05 21:52:22
Thanks. The OS X part was not clear to me before.
| |
| 1360 #if defined(OS_WIN) | |
| 1361 device_thread_->init_com_with_mta(true); | |
| 1362 #endif | |
| 1363 CHECK(device_thread_->Start()); | |
| 1364 | 1360 |
| 1365 audio_input_device_manager_ = new AudioInputDeviceManager(audio_manager_); | 1361 audio_input_device_manager_ = new AudioInputDeviceManager(audio_manager_); |
| 1366 audio_input_device_manager_->Register( | 1362 audio_input_device_manager_->Register(this, device_task_runner_); |
| 1367 this, device_thread_->message_loop_proxy().get()); | |
| 1368 | 1363 |
| 1369 video_capture_manager_ = new VideoCaptureManager(); | 1364 video_capture_manager_ = new VideoCaptureManager(); |
| 1370 video_capture_manager_->Register(this, | 1365 video_capture_manager_->Register(this, device_task_runner_); |
| 1371 device_thread_->message_loop_proxy().get()); | |
| 1372 | 1366 |
| 1373 // We want to be notified of IO message loop destruction to delete the thread | 1367 // We want to be notified of IO message loop destruction to delete the thread |
| 1374 // and the device managers. | 1368 // and the device managers. |
| 1375 io_loop_ = base::MessageLoop::current(); | 1369 io_loop_ = base::MessageLoop::current(); |
| 1376 io_loop_->AddDestructionObserver(this); | 1370 io_loop_->AddDestructionObserver(this); |
| 1377 | 1371 |
| 1378 if (CommandLine::ForCurrentProcess()->HasSwitch( | 1372 if (CommandLine::ForCurrentProcess()->HasSwitch( |
| 1379 switches::kUseFakeDeviceForMediaStream)) { | 1373 switches::kUseFakeDeviceForMediaStream)) { |
| 1380 DVLOG(1) << "Using fake device"; | 1374 DVLOG(1) << "Using fake device"; |
| 1381 UseFakeDevice(); | 1375 UseFakeDevice(); |
| (...skipping 346 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1728 void MediaStreamManager::UseFakeUI(scoped_ptr<FakeMediaStreamUIProxy> fake_ui) { | 1722 void MediaStreamManager::UseFakeUI(scoped_ptr<FakeMediaStreamUIProxy> fake_ui) { |
| 1729 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 1723 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 1730 use_fake_ui_ = true; | 1724 use_fake_ui_ = true; |
| 1731 fake_ui_ = fake_ui.Pass(); | 1725 fake_ui_ = fake_ui.Pass(); |
| 1732 } | 1726 } |
| 1733 | 1727 |
| 1734 void MediaStreamManager::WillDestroyCurrentMessageLoop() { | 1728 void MediaStreamManager::WillDestroyCurrentMessageLoop() { |
| 1735 DVLOG(3) << "MediaStreamManager::WillDestroyCurrentMessageLoop()"; | 1729 DVLOG(3) << "MediaStreamManager::WillDestroyCurrentMessageLoop()"; |
| 1736 DCHECK_EQ(base::MessageLoop::current(), io_loop_); | 1730 DCHECK_EQ(base::MessageLoop::current(), io_loop_); |
| 1737 DCHECK(requests_.empty()); | 1731 DCHECK(requests_.empty()); |
| 1738 if (device_thread_) { | 1732 if (device_task_runner_) { |
| 1739 StopMonitoring(); | 1733 StopMonitoring(); |
| 1740 | 1734 |
| 1741 video_capture_manager_->Unregister(); | 1735 video_capture_manager_->Unregister(); |
| 1742 audio_input_device_manager_->Unregister(); | 1736 audio_input_device_manager_->Unregister(); |
| 1743 device_thread_.reset(); | 1737 device_task_runner_ = NULL; |
| 1744 } | 1738 } |
| 1745 | 1739 |
| 1746 audio_input_device_manager_ = NULL; | 1740 audio_input_device_manager_ = NULL; |
| 1747 video_capture_manager_ = NULL; | 1741 video_capture_manager_ = NULL; |
| 1748 } | 1742 } |
| 1749 | 1743 |
| 1750 void MediaStreamManager::NotifyDevicesChanged( | 1744 void MediaStreamManager::NotifyDevicesChanged( |
| 1751 MediaStreamType stream_type, | 1745 MediaStreamType stream_type, |
| 1752 const StreamDeviceInfoArray& devices) { | 1746 const StreamDeviceInfoArray& devices) { |
| 1753 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 1747 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1823 } | 1817 } |
| 1824 | 1818 |
| 1825 // Always do enumeration even though some enumeration is in progress, | 1819 // Always do enumeration even though some enumeration is in progress, |
| 1826 // because those enumeration commands could be sent before these devices | 1820 // because those enumeration commands could be sent before these devices |
| 1827 // change. | 1821 // change. |
| 1828 ++active_enumeration_ref_count_[stream_type]; | 1822 ++active_enumeration_ref_count_[stream_type]; |
| 1829 GetDeviceManager(stream_type)->EnumerateDevices(stream_type); | 1823 GetDeviceManager(stream_type)->EnumerateDevices(stream_type); |
| 1830 } | 1824 } |
| 1831 | 1825 |
| 1832 } // namespace content | 1826 } // namespace content |
| OLD | NEW |