| 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 | 
| 11 #include "base/basictypes.h" | 11 #include "base/basictypes.h" | 
| 12 #include "base/compiler_specific.h" | 12 #include "base/compiler_specific.h" | 
| 13 #include "base/memory/ref_counted.h" | 13 #include "base/memory/ref_counted.h" | 
| 14 #include "base/memory/scoped_ptr.h" | 14 #include "base/memory/scoped_ptr.h" | 
| 15 #include "base/memory/scoped_vector.h" | 15 #include "base/memory/scoped_vector.h" | 
| 16 #include "base/memory/weak_ptr.h" | 16 #include "base/memory/weak_ptr.h" | 
| 17 #include "base/threading/non_thread_safe.h" | 17 #include "base/threading/non_thread_safe.h" | 
| 18 #include "content/common/content_export.h" | 18 #include "content/common/content_export.h" | 
| 19 #include "content/public/renderer/render_view_observer.h" | 19 #include "content/public/renderer/render_view_observer.h" | 
| 20 #include "content/renderer/media/media_stream_dispatcher_eventhandler.h" | 20 #include "content/renderer/media/media_stream_dispatcher_eventhandler.h" | 
| 21 #include "content/renderer/media/media_stream_source.h" | 21 #include "content/renderer/media/media_stream_source.h" | 
| 22 #include "third_party/WebKit/public/platform/WebMediaStream.h" | 22 #include "third_party/WebKit/public/platform/WebMediaStream.h" | 
| 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/WebMediaDevicesRequest.h" |  | 
| 26 #include "third_party/WebKit/public/web/WebUserMediaClient.h" | 25 #include "third_party/WebKit/public/web/WebUserMediaClient.h" | 
| 27 #include "third_party/WebKit/public/web/WebUserMediaRequest.h" | 26 #include "third_party/WebKit/public/web/WebUserMediaRequest.h" | 
| 28 #include "third_party/libjingle/source/talk/app/webrtc/mediastreaminterface.h" | 27 #include "third_party/libjingle/source/talk/app/webrtc/mediastreaminterface.h" | 
| 29 | 28 | 
| 30 namespace content { | 29 namespace content { | 
| 31 class PeerConnectionDependencyFactory; | 30 class PeerConnectionDependencyFactory; | 
| 32 class MediaStreamDispatcher; | 31 class MediaStreamDispatcher; | 
| 33 class MediaStreamVideoSource; | 32 class MediaStreamVideoSource; | 
| 34 class VideoCapturerDelegate; | 33 class VideoCapturerDelegate; | 
| 35 | 34 | 
| (...skipping 14 matching lines...) Expand all  Loading... | 
| 50       RenderView* render_view, | 49       RenderView* render_view, | 
| 51       MediaStreamDispatcher* media_stream_dispatcher, | 50       MediaStreamDispatcher* media_stream_dispatcher, | 
| 52       PeerConnectionDependencyFactory* dependency_factory); | 51       PeerConnectionDependencyFactory* dependency_factory); | 
| 53   virtual ~MediaStreamImpl(); | 52   virtual ~MediaStreamImpl(); | 
| 54 | 53 | 
| 55   // blink::WebUserMediaClient implementation | 54   // blink::WebUserMediaClient implementation | 
| 56   virtual void requestUserMedia( | 55   virtual void requestUserMedia( | 
| 57       const blink::WebUserMediaRequest& user_media_request); | 56       const blink::WebUserMediaRequest& user_media_request); | 
| 58   virtual void cancelUserMediaRequest( | 57   virtual void cancelUserMediaRequest( | 
| 59       const blink::WebUserMediaRequest& user_media_request); | 58       const blink::WebUserMediaRequest& user_media_request); | 
| 60   virtual void requestMediaDevices( |  | 
| 61       const blink::WebMediaDevicesRequest& media_devices_request) OVERRIDE; |  | 
| 62   virtual void cancelMediaDevicesRequest( |  | 
| 63       const blink::WebMediaDevicesRequest& media_devices_request) OVERRIDE; |  | 
| 64 | 59 | 
| 65   // MediaStreamDispatcherEventHandler implementation. | 60   // MediaStreamDispatcherEventHandler implementation. | 
| 66   virtual void OnStreamGenerated( | 61   virtual void OnStreamGenerated( | 
| 67       int request_id, | 62       int request_id, | 
| 68       const std::string& label, | 63       const std::string& label, | 
| 69       const StreamDeviceInfoArray& audio_array, | 64       const StreamDeviceInfoArray& audio_array, | 
| 70       const StreamDeviceInfoArray& video_array) OVERRIDE; | 65       const StreamDeviceInfoArray& video_array) OVERRIDE; | 
| 71   virtual void OnStreamGenerationFailed( | 66   virtual void OnStreamGenerationFailed( | 
| 72       int request_id, | 67       int request_id, | 
| 73       content::MediaStreamRequestResult result) OVERRIDE; | 68       content::MediaStreamRequestResult result) OVERRIDE; | 
| (...skipping 18 matching lines...) Expand all  Loading... | 
| 92 | 87 | 
| 93   // These methods are virtual for test purposes. A test can override them to | 88   // These methods are virtual for test purposes. A test can override them to | 
| 94   // test requesting local media streams. The function notifies WebKit that the | 89   // test requesting local media streams. The function notifies WebKit that the | 
| 95   // |request| have completed. | 90   // |request| have completed. | 
| 96   virtual void GetUserMediaRequestSucceeded( | 91   virtual void GetUserMediaRequestSucceeded( | 
| 97        const blink::WebMediaStream& stream, | 92        const blink::WebMediaStream& stream, | 
| 98        blink::WebUserMediaRequest* request_info); | 93        blink::WebUserMediaRequest* request_info); | 
| 99   virtual void GetUserMediaRequestFailed( | 94   virtual void GetUserMediaRequestFailed( | 
| 100       blink::WebUserMediaRequest* request_info, | 95       blink::WebUserMediaRequest* request_info, | 
| 101       content::MediaStreamRequestResult result); | 96       content::MediaStreamRequestResult result); | 
| 102   virtual void EnumerateDevicesSucceded( | 97 | 
| 103       blink::WebMediaDevicesRequest* request, |  | 
| 104       blink::WebVector<blink::WebMediaDeviceInfo>& devices); |  | 
| 105   // Creates a MediaStreamVideoSource object. | 98   // Creates a MediaStreamVideoSource object. | 
| 106   // This is virtual for test purposes. | 99   // This is virtual for test purposes. | 
| 107   virtual MediaStreamVideoSource* CreateVideoSource( | 100   virtual MediaStreamVideoSource* CreateVideoSource( | 
| 108       const StreamDeviceInfo& device, | 101       const StreamDeviceInfo& device, | 
| 109       const MediaStreamSource::SourceStoppedCallback& stop_callback); | 102       const MediaStreamSource::SourceStoppedCallback& stop_callback); | 
| 110 | 103 | 
| 111  private: | 104  private: | 
| 112   // Class for storing information about a WebKit request to create a | 105   // Class for storing information about a WebKit request to create a | 
| 113   // MediaStream. | 106   // MediaStream. | 
| 114   class UserMediaRequestInfo | 107   class UserMediaRequestInfo | 
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 165                       const blink::WebMediaStreamSource& source) | 158                       const blink::WebMediaStreamSource& source) | 
| 166         : frame(frame), source(source) { | 159         : frame(frame), source(source) { | 
| 167     } | 160     } | 
| 168     // |frame| is the WebFrame that requested |source|. NULL in unit tests. | 161     // |frame| is the WebFrame that requested |source|. NULL in unit tests. | 
| 169     // TODO(perkj): Change so that |frame| is not NULL in unit tests. | 162     // TODO(perkj): Change so that |frame| is not NULL in unit tests. | 
| 170     blink::WebFrame* frame; | 163     blink::WebFrame* frame; | 
| 171     blink::WebMediaStreamSource source; | 164     blink::WebMediaStreamSource source; | 
| 172   }; | 165   }; | 
| 173   typedef std::vector<LocalStreamSource> LocalStreamSources; | 166   typedef std::vector<LocalStreamSource> LocalStreamSources; | 
| 174 | 167 | 
| 175   struct MediaDevicesRequestInfo; |  | 
| 176   typedef ScopedVector<MediaDevicesRequestInfo> MediaDevicesRequests; |  | 
| 177 |  | 
| 178   // Creates a WebKit representation of stream sources based on | 168   // Creates a WebKit representation of stream sources based on | 
| 179   // |devices| from the MediaStreamDispatcher. | 169   // |devices| from the MediaStreamDispatcher. | 
| 180   void InitializeSourceObject( | 170   void InitializeSourceObject( | 
| 181       const StreamDeviceInfo& device, | 171       const StreamDeviceInfo& device, | 
| 182       blink::WebMediaStreamSource::Type type, | 172       blink::WebMediaStreamSource::Type type, | 
| 183       const blink::WebMediaConstraints& constraints, | 173       const blink::WebMediaConstraints& constraints, | 
| 184       blink::WebFrame* frame, | 174       blink::WebFrame* frame, | 
| 185       blink::WebMediaStreamSource* webkit_source); | 175       blink::WebMediaStreamSource* webkit_source); | 
| 186 | 176 | 
| 187   void CreateVideoTracks( | 177   void CreateVideoTracks( | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
| 200   // underlying media sources and tracks have been created and started. | 190   // underlying media sources and tracks have been created and started. | 
| 201   void OnCreateNativeTracksCompleted( | 191   void OnCreateNativeTracksCompleted( | 
| 202       UserMediaRequestInfo* request, | 192       UserMediaRequestInfo* request, | 
| 203       content::MediaStreamRequestResult result); | 193       content::MediaStreamRequestResult result); | 
| 204 | 194 | 
| 205   UserMediaRequestInfo* FindUserMediaRequestInfo(int request_id); | 195   UserMediaRequestInfo* FindUserMediaRequestInfo(int request_id); | 
| 206   UserMediaRequestInfo* FindUserMediaRequestInfo( | 196   UserMediaRequestInfo* FindUserMediaRequestInfo( | 
| 207       const blink::WebUserMediaRequest& request); | 197       const blink::WebUserMediaRequest& request); | 
| 208   void DeleteUserMediaRequestInfo(UserMediaRequestInfo* request); | 198   void DeleteUserMediaRequestInfo(UserMediaRequestInfo* request); | 
| 209 | 199 | 
| 210   MediaDevicesRequestInfo* FindMediaDevicesRequestInfo(int request_id); |  | 
| 211   MediaDevicesRequestInfo* FindMediaDevicesRequestInfo( |  | 
| 212       const blink::WebMediaDevicesRequest& request); |  | 
| 213   void DeleteMediaDevicesRequestInfo(MediaDevicesRequestInfo* request); |  | 
| 214 |  | 
| 215   // Returns the source that use a device with |device.session_id| | 200   // Returns the source that use a device with |device.session_id| | 
| 216   // and |device.device.id|. NULL if such source doesn't exist. | 201   // and |device.device.id|. NULL if such source doesn't exist. | 
| 217   const blink::WebMediaStreamSource* FindLocalSource( | 202   const blink::WebMediaStreamSource* FindLocalSource( | 
| 218       const StreamDeviceInfo& device) const; | 203       const StreamDeviceInfo& device) const; | 
| 219 | 204 | 
| 220   void StopLocalSource(const blink::WebMediaStreamSource& source, | 205   void StopLocalSource(const blink::WebMediaStreamSource& source, | 
| 221                        bool notify_dispatcher); | 206                        bool notify_dispatcher); | 
| 222 | 207 | 
| 223   // Weak ref to a PeerConnectionDependencyFactory, owned by the RenderThread. | 208   // Weak ref to a PeerConnectionDependencyFactory, owned by the RenderThread. | 
| 224   // It's valid for the lifetime of RenderThread. | 209   // It's valid for the lifetime of RenderThread. | 
| 225   // TODO(xians): Remove this dependency once audio do not need it for local | 210   // TODO(xians): Remove this dependency once audio do not need it for local | 
| 226   // audio. | 211   // audio. | 
| 227   PeerConnectionDependencyFactory* dependency_factory_; | 212   PeerConnectionDependencyFactory* dependency_factory_; | 
| 228 | 213 | 
| 229   // media_stream_dispatcher_ is a weak reference, owned by RenderView. It's | 214   // media_stream_dispatcher_ is a weak reference, owned by RenderView. It's | 
| 230   // valid for the lifetime of RenderView. | 215   // valid for the lifetime of RenderView. | 
| 231   MediaStreamDispatcher* media_stream_dispatcher_; | 216   MediaStreamDispatcher* media_stream_dispatcher_; | 
| 232 | 217 | 
| 233   LocalStreamSources local_sources_; | 218   LocalStreamSources local_sources_; | 
| 234 | 219 | 
| 235   UserMediaRequests user_media_requests_; | 220   UserMediaRequests user_media_requests_; | 
| 236 | 221 | 
| 237   // Requests to enumerate media devices. |  | 
| 238   MediaDevicesRequests media_devices_requests_; |  | 
| 239 |  | 
| 240   DISALLOW_COPY_AND_ASSIGN(MediaStreamImpl); | 222   DISALLOW_COPY_AND_ASSIGN(MediaStreamImpl); | 
| 241 }; | 223 }; | 
| 242 | 224 | 
| 243 }  // namespace content | 225 }  // namespace content | 
| 244 | 226 | 
| 245 #endif  // CONTENT_RENDERER_MEDIA_MEDIA_STREAM_IMPL_H_ | 227 #endif  // CONTENT_RENDERER_MEDIA_MEDIA_STREAM_IMPL_H_ | 
| OLD | NEW | 
|---|