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

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

Issue 7649016: Removing singleton property of MediaStreamManager and creating thread first when needed. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 4 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 // MediaStreamManager is used to open media capture devices (video supported 5 // MediaStreamManager is used to open media capture devices (video supported
6 // now). Call flow: 6 // now). Call flow:
7 // 1. GenerateStream is called when a render process wants to use a capture 7 // 1. GenerateStream is called when a render process wants to use a capture
8 // device. 8 // device.
9 // 2. MediaStreamManager will ask MediaStreamDeviceSettings for permission to 9 // 2. MediaStreamManager will ask MediaStreamDeviceSettings for permission to
10 // use devices and for which device to use. 10 // use devices and for which device to use.
11 // 3. MediaStreamDeviceSettings will request list(s) of available devices, the 11 // 3. MediaStreamDeviceSettings will request list(s) of available devices, the
12 // requests will be relayed to the corresponding media device manager and the 12 // requests will be relayed to the corresponding media device manager and the
13 // result will be given to MediaStreamDeviceSettings. 13 // result will be given to MediaStreamDeviceSettings.
14 // 4. MediaStreamDeviceSettings will, by using user settings, pick devices which 14 // 4. MediaStreamDeviceSettings will, by using user settings, pick devices which
15 // devices to use and let MediaStreamManager know the result. 15 // devices to use and let MediaStreamManager know the result.
16 // 5. MediaStreamManager will call the proper media device manager to open the 16 // 5. MediaStreamManager will call the proper media device manager to open the
17 // device and let the MediaStreamRequester know it has been done. 17 // device and let the MediaStreamRequester know it has been done.
18 18
19 #ifndef CONTENT_BROWSER_RENDERER_HOST_MEDIA_MEDIA_STREAM_MANAGER_H_ 19 #ifndef CONTENT_BROWSER_RENDERER_HOST_MEDIA_MEDIA_STREAM_MANAGER_H_
20 #define CONTENT_BROWSER_RENDERER_HOST_MEDIA_MEDIA_STREAM_MANAGER_H_ 20 #define CONTENT_BROWSER_RENDERER_HOST_MEDIA_MEDIA_STREAM_MANAGER_H_
21 21
22 #include <map> 22 #include <map>
23 #include <string> 23 #include <string>
24 #include <vector> 24 #include <vector>
25 25
26 #include "base/lazy_instance.h" 26 #include "base/basictypes.h"
27 #include "base/memory/ref_counted.h"
27 #include "content/browser/renderer_host/media/media_stream_provider.h" 28 #include "content/browser/renderer_host/media/media_stream_provider.h"
28 #include "content/browser/renderer_host/media/media_stream_settings_requester.h" 29 #include "content/browser/renderer_host/media/media_stream_settings_requester.h"
29 #include "content/common/media/media_stream_options.h" 30 #include "content/common/media/media_stream_options.h"
30 31
31 namespace media_stream { 32 namespace media_stream {
32 33
33 class MediaStreamDeviceSettings; 34 class MediaStreamDeviceSettings;
34 class MediaStreamRequester; 35 class MediaStreamRequester;
35 class VideoCaptureManager; 36 class VideoCaptureManager;
36 37
37 // MediaStreamManager is used to generate and close new media devices, not to 38 // MediaStreamManager is used to generate and close new media devices, not to
38 // start the media flow. 39 // start the media flow.
39 // The classes requesting new media streams are answered using 40 // The classes requesting new media streams are answered using
40 // MediaStreamManager::Listener. 41 // MediaStreamManager::Listener.
41 class MediaStreamManager 42 class MediaStreamManager
42 : public MediaStreamProviderListener, 43 : public base::RefCounted<media_stream::MediaStreamManager>,
willchan no longer on Chromium 2011/08/17 19:55:19 Why is this refcounted? Who owns this object? It's
mflodman_chromium_OOO 2011/08/19 11:07:09 Done, removed ref counted and replaced scoped_refp
44 public MediaStreamProviderListener,
43 public SettingsRequester { 45 public SettingsRequester {
44 public: 46 public:
45 typedef MediaStreamManager* (AccessorMethod)(); 47 typedef MediaStreamManager* (AccessorMethod)();
wjia(left Chromium) 2011/08/17 21:13:54 is this still in use?
mflodman_chromium_OOO 2011/08/19 11:07:09 Removed, done.
46 static MediaStreamManager* Get();
47 virtual ~MediaStreamManager();
48 48
49 // Used to access VideoCaptuerManager. 49 MediaStreamManager();
50
51 // Used to access VideoCaptureManager.
50 VideoCaptureManager* video_capture_manager(); 52 VideoCaptureManager* video_capture_manager();
51 53
52 // GenerateStream opens new media devices according to |components|. The 54 // GenerateStream opens new media devices according to |components|. The
53 // request is identified using |label|, which is pointing to an already 55 // request is identified using |label|, which is pointing to an already
54 // created std::string. 56 // created std::string.
55 void GenerateStream(MediaStreamRequester* requester, int render_process_id, 57 void GenerateStream(MediaStreamRequester* requester, int render_process_id,
56 int render_view_id, const StreamOptions& options, 58 int render_view_id, const StreamOptions& options,
57 const std::string& security_origin, std::string* label); 59 const std::string& security_origin, std::string* label);
58 60
59 // Cancels all non-finished GenerateStream request, i.e. request for which 61 // Cancels all non-finished GenerateStream request, i.e. request for which
(...skipping 16 matching lines...) Expand all
76 MediaStreamType stream_type); 78 MediaStreamType stream_type);
77 virtual void DevicesAccepted(const std::string& label, 79 virtual void DevicesAccepted(const std::string& label,
78 const StreamDeviceInfoArray& devices); 80 const StreamDeviceInfoArray& devices);
79 virtual void SettingsError(const std::string& label); 81 virtual void SettingsError(const std::string& label);
80 82
81 // Used by unit test to make sure fake devices are used instead of a real 83 // Used by unit test to make sure fake devices are used instead of a real
82 // devices, which is needed for server based testing. 84 // devices, which is needed for server based testing.
83 void UseFakeDevice(); 85 void UseFakeDevice();
84 86
85 private: 87 private:
88 friend class base::RefCounted<MediaStreamManager>;
89 virtual ~MediaStreamManager();
90
86 // Contains all data needed to keep track of requests. 91 // Contains all data needed to keep track of requests.
87 struct DeviceRequest { 92 struct DeviceRequest {
88 DeviceRequest(); 93 DeviceRequest();
89 DeviceRequest(MediaStreamRequester* requester, 94 DeviceRequest(MediaStreamRequester* requester,
90 const StreamOptions& request_options); 95 const StreamOptions& request_options);
91 ~DeviceRequest(); 96 ~DeviceRequest();
92 enum RequestState { 97 enum RequestState {
93 kNotRequested = 0, 98 kNotRequested = 0,
94 kRequested, 99 kRequested,
95 kOpening, 100 kOpening,
96 kDone, 101 kDone,
97 kError 102 kError
98 }; 103 };
99 104
100 MediaStreamRequester* requester; 105 MediaStreamRequester* requester;
101 StreamOptions options; 106 StreamOptions options;
102 std::vector<RequestState> state; 107 std::vector<RequestState> state;
103 StreamDeviceInfoArray audio_devices; 108 StreamDeviceInfoArray audio_devices;
104 StreamDeviceInfoArray video_devices; 109 StreamDeviceInfoArray video_devices;
105 }; 110 };
106 111
107 // Helpers. 112 // Helpers.
108 bool RequestDone(const MediaStreamManager::DeviceRequest& request) const; 113 bool RequestDone(const MediaStreamManager::DeviceRequest& request) const;
109 MediaStreamProvider* GetDeviceManager(MediaStreamType stream_type) const; 114 MediaStreamProvider* GetDeviceManager(MediaStreamType stream_type);
110
111 // Private constructor to enforce singleton.
112 friend struct base::DefaultLazyInstanceTraits<MediaStreamManager>;
113 MediaStreamManager();
114
115 VideoCaptureManager* video_capture_manager_; 115 VideoCaptureManager* video_capture_manager_;
116 // TODO(mflodman) Add AudioInputManager. 116 // TODO(mflodman) Add AudioInputManager.
117 117
118 // Keeps track of device types currently being enumerated to not enumerate 118 // Keeps track of device types currently being enumerated to not enumerate
119 // when not necessary. 119 // when not necessary.
120 std::vector<bool> enumeration_in_progress_; 120 std::vector<bool> enumeration_in_progress_;
121 121
122 // All non-closed request. 122 // All non-closed request.
123 typedef std::map<std::string, DeviceRequest> DeviceRequests; 123 typedef std::map<std::string, DeviceRequest> DeviceRequests;
124 DeviceRequests requests_; 124 DeviceRequests requests_;
125 125
126 MediaStreamDeviceSettings* device_settings_; 126 MediaStreamDeviceSettings* device_settings_;
127 127
128 DISALLOW_COPY_AND_ASSIGN(MediaStreamManager); 128 DISALLOW_COPY_AND_ASSIGN(MediaStreamManager);
129 }; 129 };
130 130
131 } // namespace media_stream 131 } // namespace media_stream
132 132
133 #endif // CONTENT_BROWSER_RENDERER_HOST_MEDIA_MEDIA_STREAM_MANAGER_H_ 133 #endif // CONTENT_BROWSER_RENDERER_HOST_MEDIA_MEDIA_STREAM_MANAGER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698