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

Side by Side Diff: content/renderer/media/media_stream_impl.h

Issue 131763002: Adds MediaStreamSource, MediaStreamAudioSource and MediaStreamVideoCaptureDeviceSource (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Removed unused file. Created 6 years, 11 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 #ifndef CONTENT_RENDERER_MEDIA_MEDIA_STREAM_IMPL_H_ 5 #ifndef CONTENT_RENDERER_MEDIA_MEDIA_STREAM_IMPL_H_
6 #define CONTENT_RENDERER_MEDIA_MEDIA_STREAM_IMPL_H_ 6 #define CONTENT_RENDERER_MEDIA_MEDIA_STREAM_IMPL_H_
7 7
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 12 matching lines...) Expand all
23 #include "third_party/WebKit/public/platform/WebMediaStreamSource.h" 23 #include "third_party/WebKit/public/platform/WebMediaStreamSource.h"
24 #include "third_party/WebKit/public/platform/WebVector.h" 24 #include "third_party/WebKit/public/platform/WebVector.h"
25 #include "third_party/WebKit/public/web/WebUserMediaClient.h" 25 #include "third_party/WebKit/public/web/WebUserMediaClient.h"
26 #include "third_party/WebKit/public/web/WebUserMediaRequest.h" 26 #include "third_party/WebKit/public/web/WebUserMediaRequest.h"
27 #include "third_party/libjingle/source/talk/app/webrtc/mediastreaminterface.h" 27 #include "third_party/libjingle/source/talk/app/webrtc/mediastreaminterface.h"
28 28
29 namespace content { 29 namespace content {
30 class MediaStreamAudioRenderer; 30 class MediaStreamAudioRenderer;
31 class MediaStreamDependencyFactory; 31 class MediaStreamDependencyFactory;
32 class MediaStreamDispatcher; 32 class MediaStreamDispatcher;
33 class MediaStreamSourceExtraData; 33 class MediaStreamSource;
34 class WebRtcAudioRenderer; 34 class WebRtcAudioRenderer;
35 class WebRtcLocalAudioRenderer; 35 class WebRtcLocalAudioRenderer;
36 36
37 // MediaStreamImpl is a delegate for the Media Stream API messages used by 37 // MediaStreamImpl is a delegate for the Media Stream API messages used by
38 // WebKit. It ties together WebKit, native PeerConnection in libjingle and 38 // WebKit. It ties together WebKit, native PeerConnection in libjingle and
39 // MediaStreamManager (via MediaStreamDispatcher and MediaStreamDispatcherHost) 39 // MediaStreamManager (via MediaStreamDispatcher and MediaStreamDispatcherHost)
40 // in the browser process. It must be created, called and destroyed on the 40 // in the browser process. It must be created, called and destroyed on the
41 // render thread. 41 // render thread.
42 // MediaStreamImpl have weak pointers to a MediaStreamDispatcher. 42 // MediaStreamImpl have weak pointers to a MediaStreamDispatcher.
43 class CONTENT_EXPORT MediaStreamImpl 43 class CONTENT_EXPORT MediaStreamImpl
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 int request_id, 85 int request_id,
86 const std::string& label, 86 const std::string& label,
87 const StreamDeviceInfo& device_info) OVERRIDE; 87 const StreamDeviceInfo& device_info) OVERRIDE;
88 virtual void OnDeviceOpenFailed(int request_id) OVERRIDE; 88 virtual void OnDeviceOpenFailed(int request_id) OVERRIDE;
89 89
90 // RenderViewObserver OVERRIDE 90 // RenderViewObserver OVERRIDE
91 virtual void FrameDetached(blink::WebFrame* frame) OVERRIDE; 91 virtual void FrameDetached(blink::WebFrame* frame) OVERRIDE;
92 virtual void FrameWillClose(blink::WebFrame* frame) OVERRIDE; 92 virtual void FrameWillClose(blink::WebFrame* frame) OVERRIDE;
93 93
94 protected: 94 protected:
95 void OnLocalSourceStop(const blink::WebMediaStreamSource& source); 95 // Called when |source| has been stopped from JavaScript.
96 void OnLocalSourceStopped(const blink::WebMediaStreamSource& source);
96 97
97 void OnLocalMediaStreamStop(const std::string& label); 98 void OnLocalMediaStreamStop(const std::string& label);
98 99
99 // Callback function triggered when all native (libjingle) versions of the
100 // underlying media sources have been created and started.
101 // |web_stream| is a raw pointer to the web_stream in
102 // UserMediaRequests::web_stream for which the underlying sources have been
103 // created.
104 void OnCreateNativeSourcesComplete(
105 blink::WebMediaStream* web_stream,
106 bool request_succeeded);
107
108 // This function is virtual for test purposes. A test can override this to 100 // This function is virtual for test purposes. A test can override this to
109 // test requesting local media streams. The function notifies WebKit that the 101 // test requesting local media streams. The function notifies WebKit that the
110 // |request| have completed and generated the MediaStream |stream|. 102 // |request| have completed and generated the MediaStream |stream|.
111 virtual void CompleteGetUserMediaRequest( 103 virtual void CompleteGetUserMediaRequest(
112 const blink::WebMediaStream& stream, 104 const blink::WebMediaStream& stream,
113 blink::WebUserMediaRequest* request_info, 105 blink::WebUserMediaRequest* request_info,
114 bool request_succeeded); 106 bool request_succeeded);
115 107
116 // Returns the WebKit representation of a MediaStream given an URL. 108 // Returns the WebKit representation of a MediaStream given an URL.
117 // This is virtual for test purposes. 109 // This is virtual for test purposes.
118 virtual blink::WebMediaStream GetMediaStream(const GURL& url); 110 virtual blink::WebMediaStream GetMediaStream(const GURL& url);
119 111
120 private: 112 private:
121 // Structure for storing information about a WebKit request to create a 113 // Class for storing information about a WebKit request to create a
122 // MediaStream. 114 // MediaStream.
123 struct UserMediaRequestInfo { 115 class UserMediaRequestInfo
116 : public base::SupportsWeakPtr<UserMediaRequestInfo> {
117 public:
118 typedef base::Callback<void(UserMediaRequestInfo* request_info,
119 bool request_succeeded)> ResourcesReady;
120
124 UserMediaRequestInfo(int request_id, 121 UserMediaRequestInfo(int request_id,
125 blink::WebFrame* frame, 122 blink::WebFrame* frame,
126 const blink::WebUserMediaRequest& request, 123 const blink::WebUserMediaRequest& request,
127 bool enable_automatic_output_device_selection); 124 bool enable_automatic_output_device_selection);
128 ~UserMediaRequestInfo(); 125 ~UserMediaRequestInfo();
129 int request_id; 126 int request_id;
130 // True if MediaStreamDispatcher has generated the stream, see 127 // True if MediaStreamDispatcher has generated the stream, see
131 // OnStreamGenerated. 128 // OnStreamGenerated.
132 bool generated; 129 bool generated;
133 const bool enable_automatic_output_device_selection; 130 const bool enable_automatic_output_device_selection;
134 blink::WebFrame* frame; // WebFrame that requested the MediaStream. 131 blink::WebFrame* frame; // WebFrame that requested the MediaStream.
135 blink::WebMediaStream web_stream; 132 blink::WebMediaStream web_stream;
136 blink::WebUserMediaRequest request; 133 blink::WebUserMediaRequest request;
137 std::vector<blink::WebMediaStreamSource> sources; 134
135 void StartTrack(const blink::WebMediaStreamTrack& track,
136 const blink::WebMediaConstraints& constraints);
137
138 // Triggers |callback| when all sources used in this request has either
139 // successfully started, or a source has failed to start.
140 void CallbackonTracksStarted(const ResourcesReady& callback);
Ronghua Wu (Left Chromium) 2014/01/16 23:02:37 CallbackOnTracksStarted
perkj_chrome 2014/01/17 13:19:45 Done.
141
142 bool IsSourceUsed(const blink::WebMediaStreamSource& source) const;
143 void RemoveSource(const blink::WebMediaStreamSource& source);
144
145 bool IsAllSourcesRemoved() { return sources_.empty();}
Ronghua Wu (Left Chromium) 2014/01/16 23:02:37 remove extra space
Jói 2014/01/17 08:57:08 missing space after ; (and extra space after retur
perkj_chrome 2014/01/17 13:19:45 Done.
perkj_chrome 2014/01/17 13:19:45 Done.
146
147 private:
148 void OnTrackStarted(MediaStreamSource* source, bool success);
149 void CheckAllTracksStarted();
150
151 ResourcesReady ready_callback_;
152 bool request_failed_;
153 // Sources used in this request.
154 std::vector<blink::WebMediaStreamSource> sources_;
155 std::vector<MediaStreamSource*> sources_waiting_for_callback_;
138 }; 156 };
139 typedef ScopedVector<UserMediaRequestInfo> UserMediaRequests; 157 typedef ScopedVector<UserMediaRequestInfo> UserMediaRequests;
140 158
141 struct LocalStreamSource { 159 struct LocalStreamSource {
142 LocalStreamSource(blink::WebFrame* frame, 160 LocalStreamSource(blink::WebFrame* frame,
143 const blink::WebMediaStreamSource& source) 161 const blink::WebMediaStreamSource& source)
144 : frame(frame), source(source) { 162 : frame(frame), source(source) {
145 } 163 }
146 // |frame| is the WebFrame that requested |source|. NULL in unit tests. 164 // |frame| is the WebFrame that requested |source|. NULL in unit tests.
147 // TODO(perkj): Change so that |frame| is not NULL in unit tests. 165 // TODO(perkj): Change so that |frame| is not NULL in unit tests.
148 blink::WebFrame* frame; 166 blink::WebFrame* frame;
149 blink::WebMediaStreamSource source; 167 blink::WebMediaStreamSource source;
150 }; 168 };
151 typedef std::vector<LocalStreamSource> LocalStreamSources; 169 typedef std::vector<LocalStreamSource> LocalStreamSources;
152 170
153 // Creates a WebKit representation of stream sources based on 171 // Creates a WebKit representation of stream sources based on
154 // |devices| from the MediaStreamDispatcher. 172 // |devices| from the MediaStreamDispatcher.
155 void CreateWebKitSourceVector( 173 void InitializeSourceObject(
156 const std::string& label, 174 const StreamDeviceInfo& device,
175 blink::WebMediaStreamSource::Type type,
176 const blink::WebMediaConstraints& constraints,
177 blink::WebFrame* frame,
178 blink::WebMediaStreamSource* webkit_source);
179
180 void CreateVideoTracks(
157 const StreamDeviceInfoArray& devices, 181 const StreamDeviceInfoArray& devices,
158 blink::WebMediaStreamSource::Type type, 182 const blink::WebMediaConstraints& constraints,
159 blink::WebFrame* frame, 183 blink::WebVector<blink::WebMediaStreamTrack>* webkit_tracks,
160 blink::WebVector<blink::WebMediaStreamSource>& webkit_sources); 184 UserMediaRequestInfo* request);
185
186 void CreateAudioTracks(
187 const StreamDeviceInfoArray& devices,
188 const blink::WebMediaConstraints& constraints,
189 blink::WebVector<blink::WebMediaStreamTrack>* webkit_tracks,
190 UserMediaRequestInfo* request);
191
192 // Callback function triggered when all native versions of the
193 // underlying media sources and tracks have been created and started.
194 void OnCreateNativeTracksComplete(
195 UserMediaRequestInfo* request,
196 bool request_succeeded);
161 197
162 UserMediaRequestInfo* FindUserMediaRequestInfo(int request_id); 198 UserMediaRequestInfo* FindUserMediaRequestInfo(int request_id);
163 UserMediaRequestInfo* FindUserMediaRequestInfo( 199 UserMediaRequestInfo* FindUserMediaRequestInfo(
164 blink::WebMediaStream* web_stream);
165 UserMediaRequestInfo* FindUserMediaRequestInfo(
166 const blink::WebUserMediaRequest& request); 200 const blink::WebUserMediaRequest& request);
167 UserMediaRequestInfo* FindUserMediaRequestInfo(const std::string& label); 201 UserMediaRequestInfo* FindUserMediaRequestInfo(const std::string& label);
168 void DeleteUserMediaRequestInfo(UserMediaRequestInfo* request); 202 void DeleteUserMediaRequestInfo(UserMediaRequestInfo* request);
169 203
170 // Returns the source that use a device with |device.session_id| 204 // Returns the source that use a device with |device.session_id|
171 // and |device.device.id|. NULL if such source doesn't exist. 205 // and |device.device.id|. NULL if such source doesn't exist.
172 const blink::WebMediaStreamSource* FindLocalSource( 206 const blink::WebMediaStreamSource* FindLocalSource(
173 const StreamDeviceInfo& device) const; 207 const StreamDeviceInfo& device) const;
174 208
175 // Returns true if |source| exists in |user_media_requests_| 209 // Returns true if |source| exists in |user_media_requests_|
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 UserMediaRequests user_media_requests_; 241 UserMediaRequests user_media_requests_;
208 242
209 LocalStreamSources local_sources_; 243 LocalStreamSources local_sources_;
210 244
211 DISALLOW_COPY_AND_ASSIGN(MediaStreamImpl); 245 DISALLOW_COPY_AND_ASSIGN(MediaStreamImpl);
212 }; 246 };
213 247
214 } // namespace content 248 } // namespace content
215 249
216 #endif // CONTENT_RENDERER_MEDIA_MEDIA_STREAM_IMPL_H_ 250 #endif // CONTENT_RENDERER_MEDIA_MEDIA_STREAM_IMPL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698