| 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 <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <algorithm> | 10 #include <algorithm> |
| (...skipping 1209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1220 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 1220 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 1221 DCHECK(!device_task_runner_.get()); | 1221 DCHECK(!device_task_runner_.get()); |
| 1222 device_task_runner_ = audio_manager_->GetTaskRunner(); | 1222 device_task_runner_ = audio_manager_->GetTaskRunner(); |
| 1223 | 1223 |
| 1224 // TODO(dalecurtis): Remove ScopedTracker below once crbug.com/457525 is | 1224 // TODO(dalecurtis): Remove ScopedTracker below once crbug.com/457525 is |
| 1225 // fixed. | 1225 // fixed. |
| 1226 tracked_objects::ScopedTracker tracking_profile2( | 1226 tracked_objects::ScopedTracker tracking_profile2( |
| 1227 FROM_HERE_WITH_EXPLICIT_FUNCTION( | 1227 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 1228 "457525 MediaStreamManager::InitializeDeviceManagersOnIOThread 2")); | 1228 "457525 MediaStreamManager::InitializeDeviceManagersOnIOThread 2")); |
| 1229 audio_input_device_manager_ = new AudioInputDeviceManager(audio_manager_); | 1229 audio_input_device_manager_ = new AudioInputDeviceManager(audio_manager_); |
| 1230 audio_input_device_manager_->Register(this, device_task_runner_); | 1230 audio_input_device_manager_->RegisterListener(this); |
| 1231 | 1231 |
| 1232 // TODO(dalecurtis): Remove ScopedTracker below once crbug.com/457525 is | 1232 // TODO(dalecurtis): Remove ScopedTracker below once crbug.com/457525 is |
| 1233 // fixed. | 1233 // fixed. |
| 1234 tracked_objects::ScopedTracker tracking_profile3( | 1234 tracked_objects::ScopedTracker tracking_profile3( |
| 1235 FROM_HERE_WITH_EXPLICIT_FUNCTION( | 1235 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 1236 "457525 MediaStreamManager::InitializeDeviceManagersOnIOThread 3")); | 1236 "457525 MediaStreamManager::InitializeDeviceManagersOnIOThread 3")); |
| 1237 // We want to be notified of IO message loop destruction to delete the thread | 1237 // We want to be notified of IO message loop destruction to delete the thread |
| 1238 // and the device managers. | 1238 // and the device managers. |
| 1239 base::MessageLoop::current()->AddDestructionObserver(this); | 1239 base::MessageLoop::current()->AddDestructionObserver(this); |
| 1240 | 1240 |
| 1241 // TODO(dalecurtis): Remove ScopedTracker below once crbug.com/457525 is | 1241 // TODO(dalecurtis): Remove ScopedTracker below once crbug.com/457525 is |
| 1242 // fixed. | 1242 // fixed. |
| 1243 tracked_objects::ScopedTracker tracking_profile4( | 1243 tracked_objects::ScopedTracker tracking_profile4( |
| 1244 FROM_HERE_WITH_EXPLICIT_FUNCTION( | 1244 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 1245 "457525 MediaStreamManager::InitializeDeviceManagersOnIOThread 4")); | 1245 "457525 MediaStreamManager::InitializeDeviceManagersOnIOThread 4")); |
| 1246 video_capture_manager_ = | |
| 1247 new VideoCaptureManager(media::VideoCaptureDeviceFactory::CreateFactory( | |
| 1248 BrowserThread::GetTaskRunnerForThread(BrowserThread::UI))); | |
| 1249 #if defined(OS_WIN) | 1246 #if defined(OS_WIN) |
| 1250 // Use an STA Video Capture Thread to try to avoid crashes on enumeration of | 1247 // Use an STA Video Capture Thread to try to avoid crashes on enumeration of |
| 1251 // buggy third party Direct Show modules, http://crbug.com/428958. | 1248 // buggy third party Direct Show modules, http://crbug.com/428958. |
| 1252 video_capture_thread_.init_com_with_mta(false); | 1249 video_capture_thread_.init_com_with_mta(false); |
| 1253 CHECK(video_capture_thread_.Start()); | 1250 CHECK(video_capture_thread_.Start()); |
| 1254 video_capture_manager_->Register(this, video_capture_thread_.task_runner()); | 1251 video_capture_manager_ = new VideoCaptureManager( |
| 1252 media::VideoCaptureDeviceFactory::CreateFactory( |
| 1253 BrowserThread::GetTaskRunnerForThread(BrowserThread::UI)), |
| 1254 video_capture_thread_.task_runner()); |
| 1255 #else | 1255 #else |
| 1256 video_capture_manager_->Register(this, device_task_runner_); | 1256 video_capture_manager_ = new VideoCaptureManager( |
| 1257 media::VideoCaptureDeviceFactory::CreateFactory( |
| 1258 BrowserThread::GetTaskRunnerForThread(BrowserThread::UI)), |
| 1259 device_task_runner_); |
| 1257 #endif | 1260 #endif |
| 1258 | 1261 |
| 1262 video_capture_manager_->RegisterListener(this); |
| 1263 |
| 1259 media_devices_manager_.reset( | 1264 media_devices_manager_.reset( |
| 1260 new MediaDevicesManager(audio_manager_, video_capture_manager_, this)); | 1265 new MediaDevicesManager(audio_manager_, video_capture_manager_, this)); |
| 1261 } | 1266 } |
| 1262 | 1267 |
| 1263 void MediaStreamManager::Opened(MediaStreamType stream_type, | 1268 void MediaStreamManager::Opened(MediaStreamType stream_type, |
| 1264 int capture_session_id) { | 1269 int capture_session_id) { |
| 1265 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 1270 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 1266 DVLOG(1) << "Opened({stream_type = " << stream_type << "} " | 1271 DVLOG(1) << "Opened({stream_type = " << stream_type << "} " |
| 1267 << "{capture_session_id = " << capture_session_id << "})"; | 1272 << "{capture_session_id = " << capture_session_id << "})"; |
| 1268 // Find the request(s) containing this device and mark it as used. | 1273 // Find the request(s) containing this device and mark it as used. |
| (...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1536 } | 1541 } |
| 1537 } | 1542 } |
| 1538 | 1543 |
| 1539 CancelRequest(label); | 1544 CancelRequest(label); |
| 1540 } | 1545 } |
| 1541 | 1546 |
| 1542 void MediaStreamManager::WillDestroyCurrentMessageLoop() { | 1547 void MediaStreamManager::WillDestroyCurrentMessageLoop() { |
| 1543 DVLOG(3) << "MediaStreamManager::WillDestroyCurrentMessageLoop()"; | 1548 DVLOG(3) << "MediaStreamManager::WillDestroyCurrentMessageLoop()"; |
| 1544 DCHECK(CalledOnIOThread()); | 1549 DCHECK(CalledOnIOThread()); |
| 1545 DCHECK(requests_.empty()); | 1550 DCHECK(requests_.empty()); |
| 1546 if (device_task_runner_.get()) { | 1551 if (media_devices_manager_) |
| 1547 media_devices_manager_->StopMonitoring(); | 1552 media_devices_manager_->StopMonitoring(); |
| 1553 if (video_capture_manager_) |
| 1554 video_capture_manager_->UnregisterListener(); |
| 1555 if (audio_input_device_manager_) |
| 1556 audio_input_device_manager_->UnregisterListener(); |
| 1548 | 1557 |
| 1549 video_capture_manager_->Unregister(); | 1558 device_task_runner_ = nullptr; |
| 1550 audio_input_device_manager_->Unregister(); | 1559 audio_input_device_manager_ = nullptr; |
| 1551 device_task_runner_ = NULL; | 1560 video_capture_manager_ = nullptr; |
| 1552 } | 1561 media_devices_manager_ = nullptr; |
| 1553 | 1562 g_media_stream_manager_tls_ptr.Pointer()->Set(nullptr); |
| 1554 audio_input_device_manager_ = NULL; | |
| 1555 video_capture_manager_ = NULL; | |
| 1556 media_devices_manager_ = NULL; | |
| 1557 g_media_stream_manager_tls_ptr.Pointer()->Set(NULL); | |
| 1558 } | 1563 } |
| 1559 | 1564 |
| 1560 void MediaStreamManager::NotifyDevicesChanged( | 1565 void MediaStreamManager::NotifyDevicesChanged( |
| 1561 MediaDeviceType device_type, | 1566 MediaDeviceType device_type, |
| 1562 const MediaDeviceInfoArray& devices) { | 1567 const MediaDeviceInfoArray& devices) { |
| 1563 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 1568 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 1564 MediaObserver* media_observer = | 1569 MediaObserver* media_observer = |
| 1565 GetContentClient()->browser()->GetMediaObserver(); | 1570 GetContentClient()->browser()->GetMediaObserver(); |
| 1566 | 1571 |
| 1567 MediaStreamType stream_type = ConvertToMediaStreamType(device_type); | 1572 MediaStreamType stream_type = ConvertToMediaStreamType(device_type); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1606 return true; | 1611 return true; |
| 1607 } | 1612 } |
| 1608 | 1613 |
| 1609 MediaStreamProvider* MediaStreamManager::GetDeviceManager( | 1614 MediaStreamProvider* MediaStreamManager::GetDeviceManager( |
| 1610 MediaStreamType stream_type) { | 1615 MediaStreamType stream_type) { |
| 1611 if (IsVideoMediaType(stream_type)) | 1616 if (IsVideoMediaType(stream_type)) |
| 1612 return video_capture_manager(); | 1617 return video_capture_manager(); |
| 1613 else if (IsAudioInputMediaType(stream_type)) | 1618 else if (IsAudioInputMediaType(stream_type)) |
| 1614 return audio_input_device_manager(); | 1619 return audio_input_device_manager(); |
| 1615 NOTREACHED(); | 1620 NOTREACHED(); |
| 1616 return NULL; | 1621 return nullptr; |
| 1617 } | 1622 } |
| 1618 | 1623 |
| 1619 void MediaStreamManager::OnMediaStreamUIWindowId(MediaStreamType video_type, | 1624 void MediaStreamManager::OnMediaStreamUIWindowId(MediaStreamType video_type, |
| 1620 StreamDeviceInfoArray devices, | 1625 StreamDeviceInfoArray devices, |
| 1621 gfx::NativeViewId window_id) { | 1626 gfx::NativeViewId window_id) { |
| 1622 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 1627 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 1623 if (!window_id) | 1628 if (!window_id) |
| 1624 return; | 1629 return; |
| 1625 | 1630 |
| 1626 if (video_type != MEDIA_DESKTOP_VIDEO_CAPTURE) | 1631 if (video_type != MEDIA_DESKTOP_VIDEO_CAPTURE) |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1748 return devices; | 1753 return devices; |
| 1749 | 1754 |
| 1750 for (auto& device : devices) { | 1755 for (auto& device : devices) { |
| 1751 device.camera_calibration = | 1756 device.camera_calibration = |
| 1752 video_capture_manager()->GetCameraCalibration(device.id); | 1757 video_capture_manager()->GetCameraCalibration(device.id); |
| 1753 } | 1758 } |
| 1754 return devices; | 1759 return devices; |
| 1755 } | 1760 } |
| 1756 | 1761 |
| 1757 } // namespace content | 1762 } // namespace content |
| OLD | NEW |