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

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

Issue 154143002: Remove MediaStreamDeviceThread in favor of audio worker TaskRunner. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 10 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/video_capture_manager.h" 5 #include "content/browser/renderer_host/media/video_capture_manager.h"
6 6
7 #include <set> 7 #include <set>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 VideoCaptureManager::VideoCaptureManager() 58 VideoCaptureManager::VideoCaptureManager()
59 : listener_(NULL), 59 : listener_(NULL),
60 new_capture_session_id_(1), 60 new_capture_session_id_(1),
61 artificial_device_source_for_testing_(DISABLED) { 61 artificial_device_source_for_testing_(DISABLED) {
62 } 62 }
63 63
64 VideoCaptureManager::~VideoCaptureManager() { 64 VideoCaptureManager::~VideoCaptureManager() {
65 DCHECK(devices_.empty()); 65 DCHECK(devices_.empty());
66 } 66 }
67 67
68 void VideoCaptureManager::Register(MediaStreamProviderListener* listener, 68 void VideoCaptureManager::Register(
69 base::MessageLoopProxy* device_thread_loop) { 69 MediaStreamProviderListener* listener,
70 const scoped_refptr<base::SingleThreadTaskRunner>& device_task_runner) {
70 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 71 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
71 DCHECK(!listener_); 72 DCHECK(!listener_);
72 DCHECK(!device_loop_.get()); 73 DCHECK(!device_task_runner_.get());
73 listener_ = listener; 74 listener_ = listener;
74 device_loop_ = device_thread_loop; 75 device_task_runner_ = device_task_runner;
75 } 76 }
76 77
77 void VideoCaptureManager::Unregister() { 78 void VideoCaptureManager::Unregister() {
78 DCHECK(listener_); 79 DCHECK(listener_);
79 listener_ = NULL; 80 listener_ = NULL;
80 } 81 }
81 82
82 void VideoCaptureManager::EnumerateDevices(MediaStreamType stream_type) { 83 void VideoCaptureManager::EnumerateDevices(MediaStreamType stream_type) {
83 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 84 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
84 DVLOG(1) << "VideoCaptureManager::EnumerateDevices, type " << stream_type; 85 DVLOG(1) << "VideoCaptureManager::EnumerateDevices, type " << stream_type;
85 DCHECK(listener_); 86 DCHECK(listener_);
86 base::PostTaskAndReplyWithResult( 87 base::PostTaskAndReplyWithResult(
87 device_loop_, FROM_HERE, 88 device_task_runner_, FROM_HERE,
88 base::Bind(&VideoCaptureManager::GetAvailableDevicesInfoOnDeviceThread, 89 base::Bind(&VideoCaptureManager::GetAvailableDevicesInfoOnDeviceThread,
89 this, stream_type, devices_info_cache_), 90 this, stream_type, devices_info_cache_),
90 base::Bind(&VideoCaptureManager::OnDevicesInfoEnumerated, this, 91 base::Bind(&VideoCaptureManager::OnDevicesInfoEnumerated, this,
91 stream_type)); 92 stream_type));
92 } 93 }
93 94
94 int VideoCaptureManager::Open(const StreamDeviceInfo& device_info) { 95 int VideoCaptureManager::Open(const StreamDeviceInfo& device_info) {
95 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 96 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
96 DCHECK(listener_); 97 DCHECK(listener_);
97 98
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
239 return; 240 return;
240 } 241 }
241 242
242 DCHECK(entry->video_capture_controller); 243 DCHECK(entry->video_capture_controller);
243 244
244 // First client starts the device. 245 // First client starts the device.
245 if (entry->video_capture_controller->GetClientCount() == 0) { 246 if (entry->video_capture_controller->GetClientCount() == 0) {
246 DVLOG(1) << "VideoCaptureManager starting device (type = " 247 DVLOG(1) << "VideoCaptureManager starting device (type = "
247 << entry->stream_type << ", id = " << entry->id << ")"; 248 << entry->stream_type << ", id = " << entry->id << ")";
248 249
249 device_loop_->PostTask( 250 device_task_runner_->PostTask(
250 FROM_HERE, 251 FROM_HERE,
251 base::Bind( 252 base::Bind(
252 &VideoCaptureManager::DoStartDeviceOnDeviceThread, 253 &VideoCaptureManager::DoStartDeviceOnDeviceThread,
253 this, 254 this,
254 entry, 255 entry,
255 params, 256 params,
256 base::Passed(entry->video_capture_controller->NewDeviceClient()))); 257 base::Passed(entry->video_capture_controller->NewDeviceClient())));
257 } 258 }
258 // Run the callback first, as AddClient() may trigger OnFrameInfo(). 259 // Run the callback first, as AddClient() may trigger OnFrameInfo().
259 done_cb.Run(entry->video_capture_controller->GetWeakPtr()); 260 done_cb.Run(entry->video_capture_controller->GetWeakPtr());
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
373 StreamDeviceInfoArray devices; 374 StreamDeviceInfoArray devices;
374 for (DeviceInfos::const_iterator it = devices_info_cache_.begin(); 375 for (DeviceInfos::const_iterator it = devices_info_cache_.begin();
375 it != devices_info_cache_.end(); ++it) { 376 it != devices_info_cache_.end(); ++it) {
376 devices.push_back(StreamDeviceInfo( 377 devices.push_back(StreamDeviceInfo(
377 stream_type, it->name.GetNameAndModel(), it->name.id())); 378 stream_type, it->name.GetNameAndModel(), it->name.id()));
378 } 379 }
379 listener_->DevicesEnumerated(stream_type, devices); 380 listener_->DevicesEnumerated(stream_type, devices);
380 } 381 }
381 382
382 bool VideoCaptureManager::IsOnDeviceThread() const { 383 bool VideoCaptureManager::IsOnDeviceThread() const {
383 return device_loop_->BelongsToCurrentThread(); 384 return device_task_runner_->BelongsToCurrentThread();
384 } 385 }
385 386
386 VideoCaptureManager::DeviceInfos 387 VideoCaptureManager::DeviceInfos
387 VideoCaptureManager::GetAvailableDevicesInfoOnDeviceThread( 388 VideoCaptureManager::GetAvailableDevicesInfoOnDeviceThread(
388 MediaStreamType stream_type, 389 MediaStreamType stream_type,
389 const DeviceInfos& old_device_info_cache) { 390 const DeviceInfos& old_device_info_cache) {
390 SCOPED_UMA_HISTOGRAM_TIMER( 391 SCOPED_UMA_HISTOGRAM_TIMER(
391 "Media.VideoCaptureManager.GetAvailableDevicesInfoOnDeviceThreadTime"); 392 "Media.VideoCaptureManager.GetAvailableDevicesInfoOnDeviceThreadTime");
392 DCHECK(IsOnDeviceThread()); 393 DCHECK(IsOnDeviceThread());
393 media::VideoCaptureDevice::Names names_snapshot; 394 media::VideoCaptureDevice::Names names_snapshot;
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
496 if (entry->video_capture_controller->GetClientCount() == 0) { 497 if (entry->video_capture_controller->GetClientCount() == 0) {
497 DVLOG(1) << "VideoCaptureManager stopping device (type = " 498 DVLOG(1) << "VideoCaptureManager stopping device (type = "
498 << entry->stream_type << ", id = " << entry->id << ")"; 499 << entry->stream_type << ", id = " << entry->id << ")";
499 500
500 // The DeviceEntry is removed from |devices_| immediately. The controller is 501 // The DeviceEntry is removed from |devices_| immediately. The controller is
501 // deleted immediately, and the device is freed asynchronously. After this 502 // deleted immediately, and the device is freed asynchronously. After this
502 // point, subsequent requests to open this same device ID will create a new 503 // point, subsequent requests to open this same device ID will create a new
503 // DeviceEntry, VideoCaptureController, and VideoCaptureDevice. 504 // DeviceEntry, VideoCaptureController, and VideoCaptureDevice.
504 devices_.erase(entry); 505 devices_.erase(entry);
505 entry->video_capture_controller.reset(); 506 entry->video_capture_controller.reset();
506 device_loop_->PostTask( 507 device_task_runner_->PostTask(
507 FROM_HERE, 508 FROM_HERE,
508 base::Bind(&VideoCaptureManager::DoStopDeviceOnDeviceThread, this, 509 base::Bind(&VideoCaptureManager::DoStopDeviceOnDeviceThread, this,
509 base::Owned(entry))); 510 base::Owned(entry)));
510 } 511 }
511 } 512 }
512 513
513 VideoCaptureManager::DeviceEntry* VideoCaptureManager::GetOrCreateDeviceEntry( 514 VideoCaptureManager::DeviceEntry* VideoCaptureManager::GetOrCreateDeviceEntry(
514 media::VideoCaptureSessionId capture_session_id) { 515 media::VideoCaptureSessionId capture_session_id) {
515 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 516 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
516 517
(...skipping 27 matching lines...) Expand all
544 DeviceInfos& device_vector) { 545 DeviceInfos& device_vector) {
545 for (DeviceInfos::iterator it = device_vector.begin(); 546 for (DeviceInfos::iterator it = device_vector.begin();
546 it != device_vector.end(); ++it) { 547 it != device_vector.end(); ++it) {
547 if (it->name.id() == id) 548 if (it->name.id() == id)
548 return &(*it); 549 return &(*it);
549 } 550 }
550 return NULL; 551 return NULL;
551 } 552 }
552 553
553 } // namespace content 554 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698