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

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

Issue 11048029: Allow Thread to initialize COM for Windows consumers who need it (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 2 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"
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "base/rand_util.h" 12 #include "base/rand_util.h"
13 #include "base/threading/com_thread.h"
13 #include "content/browser/renderer_host/media/audio_input_device_manager.h" 14 #include "content/browser/renderer_host/media/audio_input_device_manager.h"
14 #include "content/browser/renderer_host/media/media_stream_device_settings.h" 15 #include "content/browser/renderer_host/media/media_stream_device_settings.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/video_capture_manager.h" 17 #include "content/browser/renderer_host/media/video_capture_manager.h"
17 #include "content/common/media/media_stream_options.h" 18 #include "content/common/media/media_stream_options.h"
18 #include "content/public/browser/browser_thread.h" 19 #include "content/public/browser/browser_thread.h"
19 #include "content/public/browser/content_browser_client.h" 20 #include "content/public/browser/content_browser_client.h"
20 #include "content/public/browser/media_observer.h" 21 #include "content/public/browser/media_observer.h"
21 #include "googleurl/src/gurl.h" 22 #include "googleurl/src/gurl.h"
22 23
(...skipping 24 matching lines...) Expand all
47 return label; 48 return label;
48 } 49 }
49 50
50 // Helper to verify if a media stream type is part of options or not. 51 // Helper to verify if a media stream type is part of options or not.
51 static bool Requested(const StreamOptions& options, 52 static bool Requested(const StreamOptions& options,
52 MediaStreamType stream_type) { 53 MediaStreamType stream_type) {
53 return (options.audio_type == stream_type || 54 return (options.audio_type == stream_type ||
54 options.video_type == stream_type); 55 options.video_type == stream_type);
55 } 56 }
56 57
57 #if defined(OS_WIN)
58 DeviceThread::DeviceThread(const char* name) : base::Thread(name) {
59 }
60
61 DeviceThread::~DeviceThread() {
62 Stop();
63 }
64
65 void DeviceThread::Init() {
66 com_initializer_.reset(new base::win::ScopedCOMInitializer(
67 base::win::ScopedCOMInitializer::kMTA));
68 }
69
70 void DeviceThread::CleanUp() {
71 com_initializer_.reset();
72 }
73 #endif
74
75 // TODO(xians): Merge DeviceRequest with MediaStreamRequest. 58 // TODO(xians): Merge DeviceRequest with MediaStreamRequest.
76 struct MediaStreamManager::DeviceRequest { 59 struct MediaStreamManager::DeviceRequest {
77 enum RequestState { 60 enum RequestState {
78 STATE_NOT_REQUESTED = 0, 61 STATE_NOT_REQUESTED = 0,
79 STATE_REQUESTED, 62 STATE_REQUESTED,
80 STATE_PENDING_APPROVAL, 63 STATE_PENDING_APPROVAL,
81 STATE_OPENING, 64 STATE_OPENING,
82 STATE_DONE, 65 STATE_DONE,
83 STATE_ERROR 66 STATE_ERROR
84 }; 67 };
(...skipping 364 matching lines...) Expand 10 before | Expand all | Expand 10 after
449 requests_.insert(std::make_pair(request_label, new_request)); 432 requests_.insert(std::make_pair(request_label, new_request));
450 433
451 (*label) = request_label; 434 (*label) = request_label;
452 } 435 }
453 436
454 void MediaStreamManager::EnsureDeviceManagersStarted() { 437 void MediaStreamManager::EnsureDeviceManagersStarted() {
455 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 438 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
456 if (device_thread_.get()) 439 if (device_thread_.get())
457 return; 440 return;
458 441
459 device_thread_.reset(new DeviceThread("MediaStreamDeviceThread")); 442 device_thread_.reset(new base::ComThread("MediaStreamDeviceThread", true));
460 CHECK(device_thread_->Start()); 443 CHECK(device_thread_->Start());
461 444
462 audio_input_device_manager_ = 445 audio_input_device_manager_ =
463 new media_stream::AudioInputDeviceManager(audio_manager_); 446 new media_stream::AudioInputDeviceManager(audio_manager_);
464 audio_input_device_manager_->Register(this, 447 audio_input_device_manager_->Register(this,
465 device_thread_->message_loop_proxy()); 448 device_thread_->message_loop_proxy());
466 449
467 video_capture_manager_ = new media_stream::VideoCaptureManager(); 450 video_capture_manager_ = new media_stream::VideoCaptureManager();
468 video_capture_manager_->Register(this, 451 video_capture_manager_->Register(this,
469 device_thread_->message_loop_proxy()); 452 device_thread_->message_loop_proxy());
(...skipping 422 matching lines...) Expand 10 before | Expand all | Expand 10 after
892 it != requests_.end(); ++it) { 875 it != requests_.end(); ++it) {
893 if (it->second.type == DeviceRequest::ENUMERATE_DEVICES && 876 if (it->second.type == DeviceRequest::ENUMERATE_DEVICES &&
894 Requested(it->second.options, stream_type)) { 877 Requested(it->second.options, stream_type)) {
895 return true; 878 return true;
896 } 879 }
897 } 880 }
898 return false; 881 return false;
899 } 882 }
900 883
901 } // namespace media_stream 884 } // namespace media_stream
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698