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/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 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
55 | 55 |
56 VideoCaptureManager::~VideoCaptureManager() { | 56 VideoCaptureManager::~VideoCaptureManager() { |
57 DCHECK(devices_.empty()); | 57 DCHECK(devices_.empty()); |
58 DCHECK(controllers_.empty()); | 58 DCHECK(controllers_.empty()); |
59 } | 59 } |
60 | 60 |
61 void VideoCaptureManager::Register(MediaStreamProviderListener* listener, | 61 void VideoCaptureManager::Register(MediaStreamProviderListener* listener, |
62 base::MessageLoopProxy* device_thread_loop) { | 62 base::MessageLoopProxy* device_thread_loop) { |
63 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 63 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
64 DCHECK(!listener_); | 64 DCHECK(!listener_); |
65 DCHECK(!device_loop_); | 65 DCHECK(!device_loop_.get()); |
66 listener_ = listener; | 66 listener_ = listener; |
67 device_loop_ = device_thread_loop; | 67 device_loop_ = device_thread_loop; |
68 } | 68 } |
69 | 69 |
70 void VideoCaptureManager::Unregister() { | 70 void VideoCaptureManager::Unregister() { |
71 DCHECK(listener_); | 71 DCHECK(listener_); |
72 listener_ = NULL; | 72 listener_ = NULL; |
73 } | 73 } |
74 | 74 |
75 void VideoCaptureManager::EnumerateDevices(MediaStreamType stream_type) { | 75 void VideoCaptureManager::EnumerateDevices(MediaStreamType stream_type) { |
(...skipping 404 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
480 base::Callback<void(VideoCaptureController*)> added_cb) { | 480 base::Callback<void(VideoCaptureController*)> added_cb) { |
481 DCHECK(IsOnDeviceThread()); | 481 DCHECK(IsOnDeviceThread()); |
482 | 482 |
483 media::VideoCaptureDevice* video_capture_device = | 483 media::VideoCaptureDevice* video_capture_device = |
484 GetDeviceInternal(capture_params.session_id); | 484 GetDeviceInternal(capture_params.session_id); |
485 scoped_refptr<VideoCaptureController> controller; | 485 scoped_refptr<VideoCaptureController> controller; |
486 if (video_capture_device) { | 486 if (video_capture_device) { |
487 Controllers::iterator cit = controllers_.find(video_capture_device); | 487 Controllers::iterator cit = controllers_.find(video_capture_device); |
488 if (cit == controllers_.end()) { | 488 if (cit == controllers_.end()) { |
489 controller = new VideoCaptureController(this); | 489 controller = new VideoCaptureController(this); |
490 controllers_[video_capture_device] = new Controller(controller, handler); | 490 controllers_[video_capture_device] = |
| 491 new Controller(controller.get(), handler); |
491 } else { | 492 } else { |
492 controllers_[video_capture_device]->handlers.push_front(handler); | 493 controllers_[video_capture_device]->handlers.push_front(handler); |
493 controller = controllers_[video_capture_device]->controller; | 494 controller = controllers_[video_capture_device]->controller; |
494 } | 495 } |
495 } | 496 } |
496 added_cb.Run(controller); | 497 added_cb.Run(controller.get()); |
497 } | 498 } |
498 | 499 |
499 void VideoCaptureManager::RemoveController( | 500 void VideoCaptureManager::RemoveController( |
500 VideoCaptureController* controller, | 501 VideoCaptureController* controller, |
501 VideoCaptureControllerEventHandler* handler) { | 502 VideoCaptureControllerEventHandler* handler) { |
502 DCHECK(handler); | 503 DCHECK(handler); |
503 device_loop_->PostTask( | 504 device_loop_->PostTask( |
504 FROM_HERE, | 505 FROM_HERE, |
505 base::Bind(&VideoCaptureManager::DoRemoveControllerOnDeviceThread, this, | 506 base::Bind(&VideoCaptureManager::DoRemoveControllerOnDeviceThread, this, |
506 make_scoped_refptr(controller), handler)); | 507 make_scoped_refptr(controller), handler)); |
507 } | 508 } |
508 | 509 |
509 void VideoCaptureManager::DoRemoveControllerOnDeviceThread( | 510 void VideoCaptureManager::DoRemoveControllerOnDeviceThread( |
510 VideoCaptureController* controller, | 511 VideoCaptureController* controller, |
511 VideoCaptureControllerEventHandler* handler) { | 512 VideoCaptureControllerEventHandler* handler) { |
512 DCHECK(IsOnDeviceThread()); | 513 DCHECK(IsOnDeviceThread()); |
513 | 514 |
514 for (Controllers::iterator cit = controllers_.begin(); | 515 for (Controllers::iterator cit = controllers_.begin(); |
515 cit != controllers_.end(); ++cit) { | 516 cit != controllers_.end(); ++cit) { |
516 if (controller == cit->second->controller) { | 517 if (controller == cit->second->controller.get()) { |
517 Handlers& handlers = cit->second->handlers; | 518 Handlers& handlers = cit->second->handlers; |
518 for (Handlers::iterator hit = handlers.begin(); | 519 for (Handlers::iterator hit = handlers.begin(); |
519 hit != handlers.end(); ++hit) { | 520 hit != handlers.end(); ++hit) { |
520 if ((*hit) == handler) { | 521 if ((*hit) == handler) { |
521 handlers.erase(hit); | 522 handlers.erase(hit); |
522 break; | 523 break; |
523 } | 524 } |
524 } | 525 } |
525 if (handlers.empty() && cit->second->ready_to_delete) { | 526 if (handlers.empty() && cit->second->ready_to_delete) { |
526 delete cit->second; | 527 delete cit->second; |
(...skipping 30 matching lines...) Expand all Loading... |
557 | 558 |
558 VideoCaptureDevices::iterator dit = devices_.find(capture_session_id); | 559 VideoCaptureDevices::iterator dit = devices_.find(capture_session_id); |
559 if (dit != devices_.end()) { | 560 if (dit != devices_.end()) { |
560 return dit->second.capture_device; | 561 return dit->second.capture_device; |
561 } | 562 } |
562 } | 563 } |
563 return NULL; | 564 return NULL; |
564 } | 565 } |
565 | 566 |
566 } // namespace content | 567 } // namespace content |
OLD | NEW |