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

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

Issue 18325021: Revert 208403 "Remove MediaStreamDeviceThread in favor of using ..." (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: Created 7 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
« no previous file with comments | « trunk/src/content/browser/renderer_host/media/media_stream_manager.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/command_line.h" 10 #include "base/command_line.h"
11 #include "base/compiler_specific.h" 11 #include "base/compiler_specific.h"
12 #include "base/logging.h" 12 #include "base/logging.h"
13 #include "base/rand_util.h" 13 #include "base/rand_util.h"
14 #include "base/threading/thread.h"
14 #include "content/browser/renderer_host/media/audio_input_device_manager.h" 15 #include "content/browser/renderer_host/media/audio_input_device_manager.h"
15 #include "content/browser/renderer_host/media/media_stream_requester.h" 16 #include "content/browser/renderer_host/media/media_stream_requester.h"
16 #include "content/browser/renderer_host/media/media_stream_ui_proxy.h" 17 #include "content/browser/renderer_host/media/media_stream_ui_proxy.h"
17 #include "content/browser/renderer_host/media/video_capture_manager.h" 18 #include "content/browser/renderer_host/media/video_capture_manager.h"
18 #include "content/browser/renderer_host/media/web_contents_capture_util.h" 19 #include "content/browser/renderer_host/media/web_contents_capture_util.h"
19 #include "content/public/browser/browser_thread.h" 20 #include "content/public/browser/browser_thread.h"
20 #include "content/public/browser/content_browser_client.h" 21 #include "content/public/browser/content_browser_client.h"
21 #include "content/public/browser/media_observer.h" 22 #include "content/public/browser/media_observer.h"
22 #include "content/public/browser/media_request_state.h" 23 #include "content/public/browser/media_request_state.h"
23 #include "content/public/common/content_switches.h" 24 #include "content/public/common/content_switches.h"
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 } else { 142 } else {
142 BrowserThread::PostTask( 143 BrowserThread::PostTask(
143 BrowserThread::IO, FROM_HERE, 144 BrowserThread::IO, FROM_HERE,
144 base::Bind(&MediaStreamManager::InitializeDeviceManagersOnIOThread, 145 base::Bind(&MediaStreamManager::InitializeDeviceManagersOnIOThread,
145 base::Unretained(this))); 146 base::Unretained(this)));
146 } 147 }
147 } 148 }
148 149
149 MediaStreamManager::~MediaStreamManager() { 150 MediaStreamManager::~MediaStreamManager() {
150 DCHECK(requests_.empty()); 151 DCHECK(requests_.empty());
151 DCHECK(!device_loop_.get()); 152 DCHECK(!device_thread_.get());
152 DCHECK(!io_loop_); 153 DCHECK(!io_loop_);
153 } 154 }
154 155
155 VideoCaptureManager* MediaStreamManager::video_capture_manager() { 156 VideoCaptureManager* MediaStreamManager::video_capture_manager() {
156 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 157 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
157 DCHECK(video_capture_manager_.get()); 158 DCHECK(video_capture_manager_.get());
158 return video_capture_manager_.get(); 159 return video_capture_manager_.get();
159 } 160 }
160 161
161 AudioInputDeviceManager* MediaStreamManager::audio_input_device_manager() { 162 AudioInputDeviceManager* MediaStreamManager::audio_input_device_manager() {
(...skipping 416 matching lines...) Expand 10 before | Expand all | Expand 10 after
578 if (IsAudioMediaType(audio_type)) 579 if (IsAudioMediaType(audio_type))
579 request->SetState(audio_type, MEDIA_REQUEST_STATE_PENDING_APPROVAL); 580 request->SetState(audio_type, MEDIA_REQUEST_STATE_PENDING_APPROVAL);
580 if (IsVideoMediaType(video_type)) 581 if (IsVideoMediaType(video_type))
581 request->SetState(video_type, MEDIA_REQUEST_STATE_PENDING_APPROVAL); 582 request->SetState(video_type, MEDIA_REQUEST_STATE_PENDING_APPROVAL);
582 583
583 PostRequestToUI(label); 584 PostRequestToUI(label);
584 } 585 }
585 586
586 void MediaStreamManager::InitializeDeviceManagersOnIOThread() { 587 void MediaStreamManager::InitializeDeviceManagersOnIOThread() {
587 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 588 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
588 if (device_loop_.get()) 589 if (device_thread_)
589 return; 590 return;
590 device_loop_ = audio_manager_->GetMessageLoop(); 591
592 device_thread_.reset(new base::Thread("MediaStreamDeviceThread"));
593 #if defined(OS_WIN)
594 device_thread_->init_com_with_mta(true);
595 #endif
596 CHECK(device_thread_->Start());
591 597
592 audio_input_device_manager_ = new AudioInputDeviceManager(audio_manager_); 598 audio_input_device_manager_ = new AudioInputDeviceManager(audio_manager_);
593 audio_input_device_manager_->Register(this, device_loop_.get()); 599 audio_input_device_manager_->Register(
600 this, device_thread_->message_loop_proxy().get());
594 601
595 video_capture_manager_ = new VideoCaptureManager(); 602 video_capture_manager_ = new VideoCaptureManager();
596 video_capture_manager_->Register(this, device_loop_.get()); 603 video_capture_manager_->Register(this,
604 device_thread_->message_loop_proxy().get());
597 605
598 // We want to be notified of IO message loop destruction to delete the thread 606 // We want to be notified of IO message loop destruction to delete the thread
599 // and the device managers. 607 // and the device managers.
600 io_loop_ = base::MessageLoop::current(); 608 io_loop_ = base::MessageLoop::current();
601 io_loop_->AddDestructionObserver(this); 609 io_loop_->AddDestructionObserver(this);
602 } 610 }
603 611
604 void MediaStreamManager::Opened(MediaStreamType stream_type, 612 void MediaStreamManager::Opened(MediaStreamType stream_type,
605 int capture_session_id) { 613 int capture_session_id) {
606 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 614 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
(...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after
930 938
931 void MediaStreamManager::UseFakeUI(scoped_ptr<FakeMediaStreamUIProxy> fake_ui) { 939 void MediaStreamManager::UseFakeUI(scoped_ptr<FakeMediaStreamUIProxy> fake_ui) {
932 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 940 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
933 use_fake_ui_ = true; 941 use_fake_ui_ = true;
934 fake_ui_ = fake_ui.Pass(); 942 fake_ui_ = fake_ui.Pass();
935 } 943 }
936 944
937 void MediaStreamManager::WillDestroyCurrentMessageLoop() { 945 void MediaStreamManager::WillDestroyCurrentMessageLoop() {
938 DCHECK_EQ(base::MessageLoop::current(), io_loop_); 946 DCHECK_EQ(base::MessageLoop::current(), io_loop_);
939 DCHECK(requests_.empty()); 947 DCHECK(requests_.empty());
940 if (device_loop_.get()) { 948 if (device_thread_) {
941 StopMonitoring(); 949 StopMonitoring();
942 950
943 video_capture_manager_->Unregister(); 951 video_capture_manager_->Unregister();
944 audio_input_device_manager_->Unregister(); 952 audio_input_device_manager_->Unregister();
945 device_loop_ = NULL; 953 device_thread_.reset();
946 } 954 }
947 955
948 audio_input_device_manager_ = NULL; 956 audio_input_device_manager_ = NULL;
949 video_capture_manager_ = NULL; 957 video_capture_manager_ = NULL;
950 io_loop_ = NULL; 958 io_loop_ = NULL;
951 } 959 }
952 960
953 void MediaStreamManager::NotifyDevicesChanged( 961 void MediaStreamManager::NotifyDevicesChanged(
954 MediaStreamType stream_type, 962 MediaStreamType stream_type,
955 const StreamDeviceInfoArray& devices) { 963 const StreamDeviceInfoArray& devices) {
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
1036 } 1044 }
1037 1045
1038 // Always do enumeration even though some enumeration is in progress, 1046 // Always do enumeration even though some enumeration is in progress,
1039 // because those enumeration commands could be sent before these devices 1047 // because those enumeration commands could be sent before these devices
1040 // change. 1048 // change.
1041 ++active_enumeration_ref_count_[stream_type]; 1049 ++active_enumeration_ref_count_[stream_type];
1042 GetDeviceManager(stream_type)->EnumerateDevices(stream_type); 1050 GetDeviceManager(stream_type)->EnumerateDevices(stream_type);
1043 } 1051 }
1044 1052
1045 } // namespace content 1053 } // namespace content
OLDNEW
« no previous file with comments | « trunk/src/content/browser/renderer_host/media/media_stream_manager.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698