 Chromium Code Reviews
 Chromium Code Reviews Issue 131763002:
  Adds MediaStreamSource, MediaStreamAudioSource and MediaStreamVideoCaptureDeviceSource  (Closed) 
  Base URL: svn://svn.chromium.org/chrome/trunk/src
    
  
    Issue 131763002:
  Adds MediaStreamSource, MediaStreamAudioSource and MediaStreamVideoCaptureDeviceSource  (Closed) 
  Base URL: svn://svn.chromium.org/chrome/trunk/src| OLD | NEW | 
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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 | 
| 98 // Called when a MediaStream with label |label| has been order to stop from | |
| 
Jói
2014/01/27 22:14:57
has been order -> has been ordered
 
perkj_chrome
2014/01/28 08:31:43
Done.
 | |
| 99 // JavaScript. The implementation must stop all sources that is not used by | |
| 
Jói
2014/01/27 22:14:57
sources that is -> sources that are
 
perkj_chrome
2014/01/28 08:31:43
Done.
 | |
| 100 // other MediaStreams. | |
| 101 // TODO(perkj): MediaStream::Stop has been deprecated from the spec and all | |
| 102 // applications should move to use MediaStreamTrack::Stop instead and this | |
| 103 // method be removed. | |
| 97 void OnLocalMediaStreamStop(const std::string& label); | 104 void OnLocalMediaStreamStop(const std::string& label); | 
| 98 | 105 | 
| 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 | 106 // 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 | 107 // test requesting local media streams. The function notifies WebKit that the | 
| 110 // |request| have completed and generated the MediaStream |stream|. | 108 // |request| have completed and generated the MediaStream |stream|. | 
| 111 virtual void CompleteGetUserMediaRequest( | 109 virtual void CompleteGetUserMediaRequest( | 
| 112 const blink::WebMediaStream& stream, | 110 const blink::WebMediaStream& stream, | 
| 113 blink::WebUserMediaRequest* request_info, | 111 blink::WebUserMediaRequest* request_info, | 
| 114 bool request_succeeded); | 112 bool request_succeeded); | 
| 115 | 113 | 
| 116 // Returns the WebKit representation of a MediaStream given an URL. | 114 // Returns the WebKit representation of a MediaStream given an URL. | 
| 117 // This is virtual for test purposes. | 115 // This is virtual for test purposes. | 
| 118 virtual blink::WebMediaStream GetMediaStream(const GURL& url); | 116 virtual blink::WebMediaStream GetMediaStream(const GURL& url); | 
| 119 | 117 | 
| 120 private: | 118 private: | 
| 121 // Structure for storing information about a WebKit request to create a | 119 // Class for storing information about a WebKit request to create a | 
| 122 // MediaStream. | 120 // MediaStream. | 
| 123 struct UserMediaRequestInfo { | 121 class UserMediaRequestInfo | 
| 122 : public base::SupportsWeakPtr<UserMediaRequestInfo> { | |
| 123 public: | |
| 124 typedef base::Callback<void(UserMediaRequestInfo* request_info, | |
| 125 bool request_succeeded)> ResourcesReady; | |
| 126 | |
| 124 UserMediaRequestInfo(int request_id, | 127 UserMediaRequestInfo(int request_id, | 
| 125 blink::WebFrame* frame, | 128 blink::WebFrame* frame, | 
| 126 const blink::WebUserMediaRequest& request, | 129 const blink::WebUserMediaRequest& request, | 
| 127 bool enable_automatic_output_device_selection); | 130 bool enable_automatic_output_device_selection); | 
| 128 ~UserMediaRequestInfo(); | 131 ~UserMediaRequestInfo(); | 
| 129 int request_id; | 132 int request_id; | 
| 130 // True if MediaStreamDispatcher has generated the stream, see | 133 // True if MediaStreamDispatcher has generated the stream, see | 
| 131 // OnStreamGenerated. | 134 // OnStreamGenerated. | 
| 132 bool generated; | 135 bool generated; | 
| 133 const bool enable_automatic_output_device_selection; | 136 const bool enable_automatic_output_device_selection; | 
| 134 blink::WebFrame* frame; // WebFrame that requested the MediaStream. | 137 blink::WebFrame* frame; // WebFrame that requested the MediaStream. | 
| 135 blink::WebMediaStream web_stream; | 138 blink::WebMediaStream web_stream; | 
| 136 blink::WebUserMediaRequest request; | 139 blink::WebUserMediaRequest request; | 
| 137 std::vector<blink::WebMediaStreamSource> sources; | 140 | 
| 141 void StartTrack(const blink::WebMediaStreamTrack& track, | |
| 142 const blink::WebMediaConstraints& constraints); | |
| 143 | |
| 144 // Triggers |callback| when all sources used in this request has either | |
| 
Jói
2014/01/27 22:14:57
has either -> have either
 
perkj_chrome
2014/01/28 08:31:43
Done.
 | |
| 145 // successfully started, or a source has failed to start. | |
| 146 void CallbackOnTracksStarted(const ResourcesReady& callback); | |
| 147 | |
| 148 bool IsSourceUsed(const blink::WebMediaStreamSource& source) const; | |
| 149 void RemoveSource(const blink::WebMediaStreamSource& source); | |
| 150 | |
| 151 bool IsAllSourcesRemoved() const { return sources_.empty(); }; | |
| 
Jói
2014/01/27 22:14:57
Suggest renaming to AreAllSourcesRemoved
 
perkj_chrome
2014/01/28 08:31:43
Done.
 | |
| 152 | |
| 153 private: | |
| 154 void OnTrackStarted(MediaStreamSource* source, bool success); | |
| 155 void CheckAllTracksStarted(); | |
| 156 | |
| 157 ResourcesReady ready_callback_; | |
| 158 bool request_failed_; | |
| 159 // Sources used in this request. | |
| 160 std::vector<blink::WebMediaStreamSource> sources_; | |
| 161 std::vector<MediaStreamSource*> sources_waiting_for_callback_; | |
| 138 }; | 162 }; | 
| 139 typedef ScopedVector<UserMediaRequestInfo> UserMediaRequests; | 163 typedef ScopedVector<UserMediaRequestInfo> UserMediaRequests; | 
| 140 | 164 | 
| 141 struct LocalStreamSource { | 165 struct LocalStreamSource { | 
| 142 LocalStreamSource(blink::WebFrame* frame, | 166 LocalStreamSource(blink::WebFrame* frame, | 
| 143 const blink::WebMediaStreamSource& source) | 167 const blink::WebMediaStreamSource& source) | 
| 144 : frame(frame), source(source) { | 168 : frame(frame), source(source) { | 
| 145 } | 169 } | 
| 146 // |frame| is the WebFrame that requested |source|. NULL in unit tests. | 170 // |frame| is the WebFrame that requested |source|. NULL in unit tests. | 
| 147 // TODO(perkj): Change so that |frame| is not NULL in unit tests. | 171 // TODO(perkj): Change so that |frame| is not NULL in unit tests. | 
| 148 blink::WebFrame* frame; | 172 blink::WebFrame* frame; | 
| 149 blink::WebMediaStreamSource source; | 173 blink::WebMediaStreamSource source; | 
| 150 }; | 174 }; | 
| 151 typedef std::vector<LocalStreamSource> LocalStreamSources; | 175 typedef std::vector<LocalStreamSource> LocalStreamSources; | 
| 152 | 176 | 
| 153 // Creates a WebKit representation of stream sources based on | 177 // Creates a WebKit representation of stream sources based on | 
| 154 // |devices| from the MediaStreamDispatcher. | 178 // |devices| from the MediaStreamDispatcher. | 
| 155 void CreateWebKitSourceVector( | 179 void InitializeSourceObject( | 
| 156 const std::string& label, | 180 const StreamDeviceInfo& device, | 
| 181 blink::WebMediaStreamSource::Type type, | |
| 182 const blink::WebMediaConstraints& constraints, | |
| 183 blink::WebFrame* frame, | |
| 184 blink::WebMediaStreamSource* webkit_source); | |
| 185 | |
| 186 void CreateVideoTracks( | |
| 157 const StreamDeviceInfoArray& devices, | 187 const StreamDeviceInfoArray& devices, | 
| 158 blink::WebMediaStreamSource::Type type, | 188 const blink::WebMediaConstraints& constraints, | 
| 159 blink::WebFrame* frame, | 189 blink::WebVector<blink::WebMediaStreamTrack>* webkit_tracks, | 
| 160 blink::WebVector<blink::WebMediaStreamSource>& webkit_sources); | 190 UserMediaRequestInfo* request); | 
| 191 | |
| 192 void CreateAudioTracks( | |
| 193 const StreamDeviceInfoArray& devices, | |
| 194 const blink::WebMediaConstraints& constraints, | |
| 195 blink::WebVector<blink::WebMediaStreamTrack>* webkit_tracks, | |
| 196 UserMediaRequestInfo* request); | |
| 197 | |
| 198 // Callback function triggered when all native versions of the | |
| 199 // underlying media sources and tracks have been created and started. | |
| 200 void OnCreateNativeTracksCompleted( | |
| 201 UserMediaRequestInfo* request, | |
| 202 bool request_succeeded); | |
| 161 | 203 | 
| 162 UserMediaRequestInfo* FindUserMediaRequestInfo(int request_id); | 204 UserMediaRequestInfo* FindUserMediaRequestInfo(int request_id); | 
| 163 UserMediaRequestInfo* FindUserMediaRequestInfo( | 205 UserMediaRequestInfo* FindUserMediaRequestInfo( | 
| 164 blink::WebMediaStream* web_stream); | |
| 165 UserMediaRequestInfo* FindUserMediaRequestInfo( | |
| 166 const blink::WebUserMediaRequest& request); | 206 const blink::WebUserMediaRequest& request); | 
| 167 UserMediaRequestInfo* FindUserMediaRequestInfo(const std::string& label); | 207 UserMediaRequestInfo* FindUserMediaRequestInfo(const std::string& label); | 
| 168 void DeleteUserMediaRequestInfo(UserMediaRequestInfo* request); | 208 void DeleteUserMediaRequestInfo(UserMediaRequestInfo* request); | 
| 169 | 209 | 
| 170 // Returns the source that use a device with |device.session_id| | 210 // Returns the source that use a device with |device.session_id| | 
| 171 // and |device.device.id|. NULL if such source doesn't exist. | 211 // and |device.device.id|. NULL if such source doesn't exist. | 
| 172 const blink::WebMediaStreamSource* FindLocalSource( | 212 const blink::WebMediaStreamSource* FindLocalSource( | 
| 173 const StreamDeviceInfo& device) const; | 213 const StreamDeviceInfo& device) const; | 
| 174 | 214 | 
| 175 // Returns true if |source| exists in |user_media_requests_| | 215 // Returns true if |source| exists in |user_media_requests_| | 
| 176 bool FindSourceInRequests(const blink::WebMediaStreamSource& source) const; | 216 bool IsSourceInRequests(const blink::WebMediaStreamSource& source) const; | 
| 177 | 217 | 
| 178 void StopLocalSource(const blink::WebMediaStreamSource& source, | 218 void StopLocalSource(const blink::WebMediaStreamSource& source, | 
| 179 bool notify_dispatcher); | 219 bool notify_dispatcher); | 
| 180 // Stops all local sources that don't exist in exist in | 220 // Stops all local sources that don't exist in exist in | 
| 181 // |user_media_requests_|. | 221 // |user_media_requests_|. | 
| 182 void StopUnreferencedSources(bool notify_dispatcher); | 222 void StopUnreferencedSources(bool notify_dispatcher); | 
| 183 | 223 | 
| 184 scoped_refptr<WebRtcAudioRenderer> CreateRemoteAudioRenderer( | 224 scoped_refptr<WebRtcAudioRenderer> CreateRemoteAudioRenderer( | 
| 185 webrtc::MediaStreamInterface* stream); | 225 webrtc::MediaStreamInterface* stream); | 
| 186 scoped_refptr<WebRtcLocalAudioRenderer> CreateLocalAudioRenderer( | 226 scoped_refptr<WebRtcLocalAudioRenderer> CreateLocalAudioRenderer( | 
| (...skipping 20 matching lines...) Expand all Loading... | |
| 207 UserMediaRequests user_media_requests_; | 247 UserMediaRequests user_media_requests_; | 
| 208 | 248 | 
| 209 LocalStreamSources local_sources_; | 249 LocalStreamSources local_sources_; | 
| 210 | 250 | 
| 211 DISALLOW_COPY_AND_ASSIGN(MediaStreamImpl); | 251 DISALLOW_COPY_AND_ASSIGN(MediaStreamImpl); | 
| 212 }; | 252 }; | 
| 213 | 253 | 
| 214 } // namespace content | 254 } // namespace content | 
| 215 | 255 | 
| 216 #endif // CONTENT_RENDERER_MEDIA_MEDIA_STREAM_IMPL_H_ | 256 #endif // CONTENT_RENDERER_MEDIA_MEDIA_STREAM_IMPL_H_ | 
| OLD | NEW |