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

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

Issue 10786029: Delete MediaStreamManager in the same way as AudioManager (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: put Stop() in the dtor. Created 8 years, 5 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/media_stream_manager.h" 5 #include "content/browser/renderer_host/media/media_stream_manager.h"
6 6
7 #include <list> 7 #include <list>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/compiler_specific.h" 10 #include "base/compiler_specific.h"
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 return true; 55 return true;
56 } 56 }
57 return false; 57 return false;
58 } 58 }
59 59
60 DeviceThread::DeviceThread(const char* name) 60 DeviceThread::DeviceThread(const char* name)
61 : base::Thread(name) { 61 : base::Thread(name) {
62 } 62 }
63 63
64 DeviceThread::~DeviceThread() { 64 DeviceThread::~DeviceThread() {
65 Stop();
65 } 66 }
66 67
67 void DeviceThread::Init() { 68 void DeviceThread::Init() {
68 using base::win::ScopedCOMInitializer; 69 using base::win::ScopedCOMInitializer;
69 // Enter the multi-threaded apartment. 70 // Enter the multi-threaded apartment.
70 com_initializer_.reset(new ScopedCOMInitializer(ScopedCOMInitializer::kMTA)); 71 com_initializer_.reset(new ScopedCOMInitializer(ScopedCOMInitializer::kMTA));
71 } 72 }
72 73
73 void DeviceThread::CleanUp() { 74 void DeviceThread::CleanUp() {
74 com_initializer_.reset(); 75 com_initializer_.reset();
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 StreamDeviceInfoArray video_devices; 131 StreamDeviceInfoArray video_devices;
131 }; 132 };
132 133
133 MediaStreamManager::MediaStreamManager( 134 MediaStreamManager::MediaStreamManager(
134 AudioInputDeviceManager* audio_input_device_manager, 135 AudioInputDeviceManager* audio_input_device_manager,
135 VideoCaptureManager* video_capture_manager) 136 VideoCaptureManager* video_capture_manager)
136 : ALLOW_THIS_IN_INITIALIZER_LIST( 137 : ALLOW_THIS_IN_INITIALIZER_LIST(
137 device_settings_(new MediaStreamDeviceSettings(this))), 138 device_settings_(new MediaStreamDeviceSettings(this))),
138 audio_input_device_manager_(audio_input_device_manager), 139 audio_input_device_manager_(audio_input_device_manager),
139 video_capture_manager_(video_capture_manager), 140 video_capture_manager_(video_capture_manager),
140 enumeration_in_progress_(content::NUM_MEDIA_STREAM_DEVICE_TYPES, false) { 141 enumeration_in_progress_(content::NUM_MEDIA_STREAM_DEVICE_TYPES, false),
142 io_loop_(NULL) {
141 } 143 }
142 144
143 MediaStreamManager::~MediaStreamManager() { 145 MediaStreamManager::~MediaStreamManager() {
144 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 146 DCHECK(requests_.empty());
145 if (device_thread_.get()) { 147 DCHECK(!device_thread_.get());
146 video_capture_manager_->Unregister(); 148 DCHECK(!io_loop_);
147 audio_input_device_manager_->Unregister();
148 device_thread_->Stop();
149 }
150 } 149 }
151 150
152 VideoCaptureManager* MediaStreamManager::video_capture_manager() { 151 VideoCaptureManager* MediaStreamManager::video_capture_manager() {
153 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 152 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
154 DCHECK(video_capture_manager_.get()); 153 DCHECK(video_capture_manager_);
155 EnsureDeviceThreadAndListener(); 154 EnsureDeviceThreadAndListener();
156 return video_capture_manager_.get(); 155 return video_capture_manager_;
157 } 156 }
158 157
159 AudioInputDeviceManager* MediaStreamManager::audio_input_device_manager() { 158 AudioInputDeviceManager* MediaStreamManager::audio_input_device_manager() {
160 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 159 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
161 DCHECK(audio_input_device_manager_.get()); 160 DCHECK(audio_input_device_manager_);
162 EnsureDeviceThreadAndListener(); 161 EnsureDeviceThreadAndListener();
163 return audio_input_device_manager_.get(); 162 return audio_input_device_manager_;
164 } 163 }
165 164
166 void MediaStreamManager::GenerateStream(MediaStreamRequester* requester, 165 void MediaStreamManager::GenerateStream(MediaStreamRequester* requester,
167 int render_process_id, 166 int render_process_id,
168 int render_view_id, 167 int render_view_id,
169 const StreamOptions& options, 168 const StreamOptions& options,
170 const GURL& security_origin, 169 const GURL& security_origin,
171 std::string* label) { 170 std::string* label) {
172 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 171 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
173 172
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 366 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
368 if (device_thread_.get()) 367 if (device_thread_.get())
369 return; 368 return;
370 369
371 device_thread_.reset(new DeviceThread("MediaStreamDeviceThread")); 370 device_thread_.reset(new DeviceThread("MediaStreamDeviceThread"));
372 CHECK(device_thread_->Start()); 371 CHECK(device_thread_->Start());
373 372
374 audio_input_device_manager_->Register(this, 373 audio_input_device_manager_->Register(this,
375 device_thread_->message_loop_proxy()); 374 device_thread_->message_loop_proxy());
376 video_capture_manager_->Register(this, device_thread_->message_loop_proxy()); 375 video_capture_manager_->Register(this, device_thread_->message_loop_proxy());
376
377 // We want to be notified of IO message loop destruction to delete the thread
378 // and the device managers.
379 io_loop_ = MessageLoop::current();
380 io_loop_->AddDestructionObserver(this);
377 } 381 }
378 382
379 void MediaStreamManager::Opened(MediaStreamType stream_type, 383 void MediaStreamManager::Opened(MediaStreamType stream_type,
380 int capture_session_id) { 384 int capture_session_id) {
381 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 385 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
382 386
383 // Find the request containing this device and mark it as used. 387 // Find the request containing this device and mark it as used.
384 DeviceRequest* request = NULL; 388 DeviceRequest* request = NULL;
385 StreamDeviceInfoArray* devices = NULL; 389 StreamDeviceInfoArray* devices = NULL;
386 std::string label; 390 std::string label;
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after
615 return; 619 return;
616 } 620 }
617 } 621 }
618 622
619 void MediaStreamManager::UseFakeDevice() { 623 void MediaStreamManager::UseFakeDevice() {
620 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 624 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
621 video_capture_manager()->UseFakeDevice(); 625 video_capture_manager()->UseFakeDevice();
622 device_settings_->UseFakeUI(); 626 device_settings_->UseFakeUI();
623 } 627 }
624 628
629 void MediaStreamManager::WillDestroyCurrentMessageLoop() {
630 DCHECK_EQ(MessageLoop::current(), io_loop_);
631 if (device_thread_.get()) {
632 video_capture_manager_->Unregister();
633 audio_input_device_manager_->Unregister();
634 device_thread_.reset();
635 }
636
637 audio_input_device_manager_ = NULL;
638 video_capture_manager_ = NULL;
639 io_loop_ = NULL;
640 device_settings_.reset();
641 }
642
625 void MediaStreamManager::NotifyObserverDevicesOpened(DeviceRequest* request) { 643 void MediaStreamManager::NotifyObserverDevicesOpened(DeviceRequest* request) {
626 content::MediaObserver* media_observer = 644 content::MediaObserver* media_observer =
627 content::GetContentClient()->browser()->GetMediaObserver(); 645 content::GetContentClient()->browser()->GetMediaObserver();
628 content::MediaStreamDevices opened_devices; 646 content::MediaStreamDevices opened_devices;
629 DevicesFromRequest(request, &opened_devices); 647 DevicesFromRequest(request, &opened_devices);
630 DCHECK(!opened_devices.empty()); 648 DCHECK(!opened_devices.empty());
631 media_observer->OnCaptureDevicesOpened(request->render_process_id, 649 media_observer->OnCaptureDevicesOpened(request->render_process_id,
632 request->render_view_id, 650 request->render_view_id,
633 opened_devices); 651 opened_devices);
634 } 652 }
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
697 if (stream_type == content::MEDIA_STREAM_DEVICE_TYPE_VIDEO_CAPTURE) { 715 if (stream_type == content::MEDIA_STREAM_DEVICE_TYPE_VIDEO_CAPTURE) {
698 return video_capture_manager(); 716 return video_capture_manager();
699 } else if (stream_type == content::MEDIA_STREAM_DEVICE_TYPE_AUDIO_CAPTURE) { 717 } else if (stream_type == content::MEDIA_STREAM_DEVICE_TYPE_AUDIO_CAPTURE) {
700 return audio_input_device_manager(); 718 return audio_input_device_manager();
701 } 719 }
702 NOTREACHED(); 720 NOTREACHED();
703 return NULL; 721 return NULL;
704 } 722 }
705 723
706 } // namespace media_stream 724 } // namespace media_stream
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698