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

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

Issue 7948004: Removing singelton property of MediaStreamManager. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 3 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/lazy_instance.h" 9 #include "base/compiler_specific.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "base/rand_util.h" 11 #include "base/rand_util.h"
12 #include "content/browser/browser_thread.h" 12 #include "content/browser/browser_thread.h"
13 #include "content/browser/renderer_host/media/media_stream_device_settings.h" 13 #include "content/browser/renderer_host/media/media_stream_device_settings.h"
14 #include "content/browser/renderer_host/media/media_stream_requester.h" 14 #include "content/browser/renderer_host/media/media_stream_requester.h"
15 #include "content/browser/renderer_host/media/video_capture_manager.h" 15 #include "content/browser/renderer_host/media/video_capture_manager.h"
16 #include "content/common/media/media_stream_options.h" 16 #include "content/common/media/media_stream_options.h"
17 17
18 namespace media_stream { 18 namespace media_stream {
19 19
20 // TODO(mflodman) Find out who should own MediaStreamManager.
21 base::LazyInstance<MediaStreamManager> g_media_stream_manager(
22 base::LINKER_INITIALIZED);
23
24 // Creates a random label used to identify requests. 20 // Creates a random label used to identify requests.
25 static std::string RandomLabel() { 21 static std::string RandomLabel() {
26 // Alphbet according to WhatWG standard, i.e. containing 36 characters from 22 // Alphabet according to WhatWG standard, i.e. containing 36 characters from
27 // range: U+0021, U+0023 to U+0027, U+002A to U+002B, U+002D to U+002E, 23 // range: U+0021, U+0023 to U+0027, U+002A to U+002B, U+002D to U+002E,
28 // U+0030 to U+0039, U+0041 to U+005A, U+005E to U+007E. 24 // U+0030 to U+0039, U+0041 to U+005A, U+005E to U+007E.
29 static const char alphabet[] = "!#$%&\'*+-.0123456789" 25 static const char alphabet[] = "!#$%&\'*+-.0123456789"
30 "abcdefghijklmnopqrstuvwxyz^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~"; 26 "abcdefghijklmnopqrstuvwxyz^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~";
31 27
32 std::string label(36, ' '); 28 std::string label(36, ' ');
33 for (size_t i = 0; i < label.size(); ++i) { 29 for (size_t i = 0; i < label.size(); ++i) {
34 int random_char = base::RandGenerator(sizeof(alphabet) - 1); 30 int random_char = base::RandGenerator(sizeof(alphabet) - 1);
35 label[i] = alphabet[random_char]; 31 label[i] = alphabet[random_char];
36 } 32 }
37 return label; 33 return label;
38 } 34 }
39 35
40 // Helper to verify if a media stream type is part of options or not. 36 // Helper to verify if a media stream type is part of options or not.
41 static bool Requested(const StreamOptions& options, 37 static bool Requested(const StreamOptions& options,
42 MediaStreamType stream_type) { 38 MediaStreamType stream_type) {
43 if (stream_type == kVideoCapture && 39 if (stream_type == kVideoCapture &&
44 (options.video_option != StreamOptions::kNoCamera)) { 40 (options.video_option != StreamOptions::kNoCamera)) {
45 return true; 41 return true;
46 } else if (stream_type == kAudioCapture && options.audio == true) { 42 } else if (stream_type == kAudioCapture && options.audio == true) {
47 return true; 43 return true;
48 } 44 }
49 return false; 45 return false;
50 } 46 }
51 47
52 MediaStreamManager* MediaStreamManager::Get() { 48 MediaStreamManager::MediaStreamManager()
53 return g_media_stream_manager.Pointer(); 49 : ALLOW_THIS_IN_INITIALIZER_LIST(
50 device_settings_(new MediaStreamDeviceSettings(this))),
51 enumeration_in_progress_(kNumMediaStreamTypes, false) {
52 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
54 } 53 }
55 54
56 MediaStreamManager::~MediaStreamManager() { 55 MediaStreamManager::~MediaStreamManager() {
57 delete device_settings_; 56 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
58 delete video_capture_manager_;
59 } 57 }
60 58
61 VideoCaptureManager* MediaStreamManager::video_capture_manager() { 59 VideoCaptureManager* MediaStreamManager::video_capture_manager() {
62 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 60 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
63 return video_capture_manager_; 61 if (!video_capture_manager_.get()) {
62 video_capture_manager_.reset(new VideoCaptureManager());
63 video_capture_manager_->Register(this);
64 }
65 return video_capture_manager_.get();
64 } 66 }
65 67
66 void MediaStreamManager::GenerateStream(MediaStreamRequester* requester, 68 void MediaStreamManager::GenerateStream(MediaStreamRequester* requester,
67 int render_process_id, 69 int render_process_id,
68 int render_view_id, 70 int render_view_id,
69 const StreamOptions& options, 71 const StreamOptions& options,
70 const std::string& security_origin, 72 const std::string& security_origin,
71 std::string* label) { 73 std::string* label) {
72 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 74 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
73 75
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
113 if (it->in_use == true) { 115 if (it->in_use == true) {
114 // TODO(mflodman) Add when audio input device manager is available. 116 // TODO(mflodman) Add when audio input device manager is available.
115 } 117 }
116 } 118 }
117 } 119 }
118 if (request->state[kVideoCapture] == DeviceRequest::kOpening) { 120 if (request->state[kVideoCapture] == DeviceRequest::kOpening) {
119 for (StreamDeviceInfoArray::iterator it = 121 for (StreamDeviceInfoArray::iterator it =
120 request->video_devices.begin(); it != request->video_devices.end(); 122 request->video_devices.begin(); it != request->video_devices.end();
121 ++it) { 123 ++it) {
122 if (it->in_use == true) { 124 if (it->in_use == true) {
123 video_capture_manager_->Close(it->session_id); 125 video_capture_manager()->Close(it->session_id);
124 } 126 }
125 } 127 }
126 } 128 }
127 requests_.erase(it++); 129 requests_.erase(it++);
128 } else { 130 } else {
129 ++it; 131 ++it;
130 } 132 }
131 } 133 }
132 } 134 }
133 135
134 void MediaStreamManager::StopGeneratedStream(const std::string& label) { 136 void MediaStreamManager::StopGeneratedStream(const std::string& label) {
135 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 137 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
136 // Find the request and close all open devices for the request. 138 // Find the request and close all open devices for the request.
137 DeviceRequests::iterator it = requests_.find(label); 139 DeviceRequests::iterator it = requests_.find(label);
138 if (it != requests_.end()) { 140 if (it != requests_.end()) {
139 for (StreamDeviceInfoArray::iterator audio_it = 141 for (StreamDeviceInfoArray::iterator audio_it =
140 it->second.audio_devices.begin(); 142 it->second.audio_devices.begin();
141 audio_it != it->second.audio_devices.end(); ++audio_it) { 143 audio_it != it->second.audio_devices.end(); ++audio_it) {
142 // TODO(mflodman) Add code when audio input manager exists. 144 // TODO(mflodman) Add code when audio input manager exists.
143 NOTREACHED(); 145 NOTREACHED();
144 } 146 }
145 for (StreamDeviceInfoArray::iterator video_it = 147 for (StreamDeviceInfoArray::iterator video_it =
146 it->second.video_devices.begin(); 148 it->second.video_devices.begin();
147 video_it != it->second.video_devices.end(); ++video_it) { 149 video_it != it->second.video_devices.end(); ++video_it) {
148 video_capture_manager_->Close(video_it->session_id); 150 video_capture_manager()->Close(video_it->session_id);
149 } 151 }
150 requests_.erase(it); 152 requests_.erase(it);
151 return; 153 return;
152 } 154 }
153 } 155 }
154 156
155 void MediaStreamManager::Opened(MediaStreamType stream_type, 157 void MediaStreamManager::Opened(MediaStreamType stream_type,
156 int capture_session_id) { 158 int capture_session_id) {
157 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 159 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
158 160
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
347 DeviceRequests::iterator it = requests_.find(label); 349 DeviceRequests::iterator it = requests_.find(label);
348 if (it != requests_.end()) { 350 if (it != requests_.end()) {
349 it->second.requester->StreamGenerationFailed(label); 351 it->second.requester->StreamGenerationFailed(label);
350 requests_.erase(it); 352 requests_.erase(it);
351 return; 353 return;
352 } 354 }
353 } 355 }
354 356
355 void MediaStreamManager::UseFakeDevice() { 357 void MediaStreamManager::UseFakeDevice() {
356 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 358 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
357 video_capture_manager_->UseFakeDevice(); 359 video_capture_manager()->UseFakeDevice();
358 device_settings_->UseFakeUI(); 360 device_settings_->UseFakeUI();
359 // TODO(mflodman) Add audio manager when available. 361 // TODO(mflodman) Add audio manager when available.
360 } 362 }
361 363
362 bool MediaStreamManager::RequestDone(const DeviceRequest& request) const { 364 bool MediaStreamManager::RequestDone(const DeviceRequest& request) const {
363 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 365 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
364 // Check if all devices are opened. 366 // Check if all devices are opened.
365 if (Requested(request.options, kAudioCapture)) { 367 if (Requested(request.options, kAudioCapture)) {
366 for (StreamDeviceInfoArray::const_iterator it = 368 for (StreamDeviceInfoArray::const_iterator it =
367 request.audio_devices.begin(); it != request.audio_devices.end(); 369 request.audio_devices.begin(); it != request.audio_devices.end();
(...skipping 10 matching lines...) Expand all
378 if (it->in_use == false) { 380 if (it->in_use == false) {
379 return false; 381 return false;
380 } 382 }
381 } 383 }
382 } 384 }
383 return true; 385 return true;
384 } 386 }
385 387
386 // Called to get media capture device manager of specified type. 388 // Called to get media capture device manager of specified type.
387 MediaStreamProvider* MediaStreamManager::GetDeviceManager( 389 MediaStreamProvider* MediaStreamManager::GetDeviceManager(
388 MediaStreamType stream_type) const { 390 MediaStreamType stream_type) {
389 if (stream_type == kVideoCapture) { 391 if (stream_type == kVideoCapture) {
390 return video_capture_manager_; 392 return video_capture_manager();
391 } else if (stream_type == kAudioCapture) { 393 } else if (stream_type == kAudioCapture) {
392 // TODO(mflodman) Add support when audio input manager is available. 394 // TODO(mflodman) Add support when audio input manager is available.
393 NOTREACHED(); 395 NOTREACHED();
394 return NULL; 396 return NULL;
395 } 397 }
396 NOTREACHED(); 398 NOTREACHED();
397 return NULL; 399 return NULL;
398 } 400 }
399 401
400 MediaStreamManager::MediaStreamManager()
401 : video_capture_manager_(new VideoCaptureManager()),
402 enumeration_in_progress_(kNumMediaStreamTypes, false),
403 requests_(),
404 device_settings_(NULL) {
405 device_settings_ = new MediaStreamDeviceSettings(this);
406 video_capture_manager_->Register(this);
407 // TODO(mflodman) Add when audio input manager is available.
408 }
409
410 MediaStreamManager::DeviceRequest::DeviceRequest() 402 MediaStreamManager::DeviceRequest::DeviceRequest()
411 : requester(NULL), 403 : requester(NULL),
412 state(kNumMediaStreamTypes, kNotRequested) { 404 state(kNumMediaStreamTypes, kNotRequested) {
413 options.audio = false; 405 options.audio = false;
414 options.video_option = StreamOptions::kNoCamera; 406 options.video_option = StreamOptions::kNoCamera;
415 } 407 }
416 408
417 MediaStreamManager::DeviceRequest::DeviceRequest( 409 MediaStreamManager::DeviceRequest::DeviceRequest(
418 MediaStreamRequester* requester, const StreamOptions& request_options) 410 MediaStreamRequester* requester, const StreamOptions& request_options)
419 : requester(requester), 411 : requester(requester),
420 options(request_options), 412 options(request_options),
421 state(kNumMediaStreamTypes, kNotRequested) { 413 state(kNumMediaStreamTypes, kNotRequested) {
422 DCHECK(requester); 414 DCHECK(requester);
423 } 415 }
424 416
425 MediaStreamManager::DeviceRequest::~DeviceRequest() {} 417 MediaStreamManager::DeviceRequest::~DeviceRequest() {}
426 418
427 } // namespace media_stream 419 } // namespace media_stream
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698