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

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

Issue 7284037: Adding MediaStreamManager. (Closed) Base URL: http://src.chromium.org/svn/trunk/src/
Patch Set: Changed DeviceRequestList to map and changed random label according to new specification. Created 9 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
(Empty)
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
3 // found in the LICENSE file.
4
5 // MediaStreamManager is used to open media capture devices (video supported
6 // now). Call flow:
7 // 1. GenerateStream is called when a render process wants to use a capture
8 // device.
9 // 2. MediaStreamManager will ask MediaStreamDeviceSettings for permission to
10 // use devices and for which device to use.
11 // 3. MediaStreamDeviceSettings will request list(s) of available devices, the
12 // requests will be relayed to the corresponding media device manager and the
13 // result will be given to MediaStreamDeviceSettings.
14 // 4. MediaStreamDeviceSettings will, by using user settings, pick devices which
15 // devices to use and let MediaStreamManager know the result.
16 // 5. MediaStreamManager will call the proper media device manager to open the
17 // device and let the MediaStreamRequester know it has been done.
18
19 #ifndef CONTENT_BROWSER_RENDERER_HOST_MEDIA_MEDIA_STREAM_MANAGER_H_
20 #define CONTENT_BROWSER_RENDERER_HOST_MEDIA_MEDIA_STREAM_MANAGER_H_
21
22 #include <map>
23 #include <string>
24 #include <vector>
25
26 #include "base/lazy_instance.h"
27 #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/common/media/media_stream_options.h"
30
31 namespace media_stream {
32
33 class MediaStreamDeviceSettings;
34 class MediaStreamRequester;
35 class VideoCaptureManager;
36
37 // MediaStreamManager is used to generate and close new media devices, not to
38 // start the media flow.
39 // The classes requesting new media streams are answered using
40 // MediaStreamManager::Listener.
41 class MediaStreamManager : public MediaStreamProviderListener,
42 public SettingsRequester {
43 public:
44 typedef MediaStreamManager* (AccessorMethod)();
45 static MediaStreamManager* Get();
46 virtual ~MediaStreamManager();
47
48 // Used to access VideoCaptuerManager.
49 VideoCaptureManager* GetVideoCaptureManager();
wjia(left Chromium) 2011/07/06 02:58:42 VideoCaptureManager* video_capture_manager();
mflodman1 2011/07/06 11:31:45 Done.
50
51 // GenerateStream opens new media devices according to |components|. The
52 // request is identified using |label|, which is pointing to an already
53 // created std::string.
54 void GenerateStream(MediaStreamRequester* requester, int render_process_id,
55 int render_view_id, const StreamOptions& options,
56 const std::string& security_origin, std::string* label);
57
58 // Cancels all non-finished GenerateStream request, i.e. request for which
59 // StreamGenerated hasn't been called.
60 void CancelRequests(MediaStreamRequester* requester);
61
62 // Closes generated stream.
63 void StopGeneratedStream(const std::string& label);
64
65 // Implements MediaStreamProviderListener.
66 virtual void Opened(MediaStreamType stream_type, int capture_session_id);
67 virtual void Closed(MediaStreamType stream_type, int capture_session_id);
68 virtual void DevicesEnumerated(MediaStreamType stream_type,
69 const StreamDeviceInfoArray& devices);
70 virtual void Error(MediaStreamType stream_type, int capture_session_id,
71 MediaStreamProviderError error);
72
73 // Implements SettingsRequester.
74 virtual void GetDevices(const std::string& label,
75 MediaStreamType stream_type);
76 virtual void DevicesAccepted(const std::string& label,
77 const StreamDeviceInfoArray& devices);
78 virtual void SettingsError(const std::string& label);
79
80 // Used by unit test to make sure fake devices are used instead of a real
81 // devices, which is needed for server based testing.
82 void UseFakeDevice();
83
84 private:
85 // Contains all data needed to keep track of requests.
86 struct DeviceRequest {
87 DeviceRequest();
88 DeviceRequest(MediaStreamRequester* requester,
89 const StreamOptions& request_options);
90 enum RequestState {
91 kNotRequested = 0,
92 kRequested,
93 kOpening,
94 kDone,
95 kError
96 };
97
98 MediaStreamRequester* requester;
99 StreamOptions options;
100 std::vector<RequestState> state;
101 StreamDeviceInfoArray audio_devices;
102 StreamDeviceInfoArray video_devices;
103 };
104
105 // Helpers.
106 bool RequestDone(const MediaStreamManager::DeviceRequest& request) const;
107 MediaStreamProvider* GetDeviceManager(MediaStreamType stream_type) const;
108
109 // Private constructor to enforce singleton.
110 friend struct base::DefaultLazyInstanceTraits<MediaStreamManager>;
111 MediaStreamManager();
112
113 VideoCaptureManager* video_capture_manager_;
114 // TODO(mflodman) Add AudioInputManager.
115
116 // Keeps track of device types currently being enumerated to not enumerate
117 // when not necessary.
118 std::vector<bool> enumeration_in_progress_;
119
120 // All non-closed request.
121 typedef std::map<std::string, DeviceRequest> DeviceRequests;
122 DeviceRequests requests_;
123
124 MediaStreamDeviceSettings* device_settings_;
125
126 DISALLOW_COPY_AND_ASSIGN(MediaStreamManager);
127 };
128
129 } // namespace media_stream
130
131 #endif // CONTENT_BROWSER_RENDERER_HOST_MEDIA_MEDIA_STREAM_MANAGER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698