Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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_VIDEO_SOURCE_H_ | 5 #ifndef CONTENT_RENDERER_MEDIA_MEDIA_STREAM_VIDEO_SOURCE_H_ |
| 6 #define CONTENT_RENDERER_MEDIA_MEDIA_STREAM_VIDEO_SOURCE_H_ | 6 #define CONTENT_RENDERER_MEDIA_MEDIA_STREAM_VIDEO_SOURCE_H_ |
| 7 | 7 |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/compiler_specific.h" | 10 #include "base/compiler_specific.h" |
| 11 #include "content/common/content_export.h" | 11 #include "content/common/content_export.h" |
| 12 #include "content/renderer/media/media_stream_dependency_factory.h" | 12 #include "content/renderer/media/media_stream_dependency_factory.h" |
| 13 #include "content/renderer/media/media_stream_source.h" | 13 #include "content/renderer/media/media_stream_source.h" |
| 14 #include "content/renderer/media/media_stream_video_track.h" | |
| 14 #include "media/base/video_frame.h" | 15 #include "media/base/video_frame.h" |
| 15 #include "media/video/capture/video_capture_types.h" | 16 #include "media/video/capture/video_capture_types.h" |
| 16 #include "third_party/WebKit/public/platform/WebMediaConstraints.h" | 17 #include "third_party/WebKit/public/platform/WebMediaConstraints.h" |
| 17 #include "third_party/WebKit/public/platform/WebMediaStreamSource.h" | 18 #include "third_party/WebKit/public/platform/WebMediaStreamSource.h" |
| 18 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h" | 19 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h" |
| 19 | 20 |
| 20 namespace media { | 21 namespace media { |
| 21 class VideoFrame; | 22 class VideoFrame; |
| 22 } | 23 } |
| 23 | 24 |
| 24 namespace content { | 25 namespace content { |
| 25 | 26 |
| 26 class MediaStreamDependencyFactory; | 27 class MediaStreamDependencyFactory; |
| 28 class MediaStreamVideoTrack; | |
| 27 class WebRtcVideoCapturerAdapter; | 29 class WebRtcVideoCapturerAdapter; |
| 28 | 30 |
| 29 // MediaStreamVideoSource is an interface used for sending video frames to a | 31 // MediaStreamVideoSource is an interface used for sending video frames to a |
| 30 // MediaStreamVideoTrack. | 32 // MediaStreamVideoTrack. |
| 31 // http://dev.w3.org/2011/webrtc/editor/getusermedia.html | 33 // http://dev.w3.org/2011/webrtc/editor/getusermedia.html |
| 32 // The purpose of this base class is to be able to implement different | 34 // The purpose of this base class is to be able to implement different |
| 33 // MediaStreaVideoSources such as local video capture, video sources received | 35 // MediaStreaVideoSources such as local video capture, video sources received |
| 34 // on a PeerConnection or a source created in NaCl. | 36 // on a PeerConnection or a source created in NaCl. |
| 35 // All methods calls will be done from the main render thread. | 37 // All methods calls will be done from the main render thread. |
| 36 // | 38 // |
| 37 // When the first track is added to the source by calling AddTrack | 39 // When the first track is added to the source by calling AddTrack |
| 38 // the MediaStreamVideoSource implementation calls GetCurrentSupportedFormats. | 40 // the MediaStreamVideoSource implementation calls GetCurrentSupportedFormats. |
| 39 // the source implementation must call OnSupportedFormats. | 41 // the source implementation must call OnSupportedFormats. |
| 40 // MediaStreamVideoSource then match the constraints provided in AddTrack with | 42 // MediaStreamVideoSource then match the constraints provided in AddTrack with |
| 41 // the formats and call StartSourceImpl. The source implementation must call | 43 // the formats and call StartSourceImpl. The source implementation must call |
| 42 // OnStartDone when the underlying source has been started or failed to | 44 // OnStartDone when the underlying source has been started or failed to |
| 43 // start. | 45 // start. |
| 44 class CONTENT_EXPORT MediaStreamVideoSource | 46 class CONTENT_EXPORT MediaStreamVideoSource |
| 45 : public MediaStreamSource, | 47 : public MediaStreamSource, |
| 46 NON_EXPORTED_BASE(public base::NonThreadSafe) { | 48 NON_EXPORTED_BASE(public base::NonThreadSafe) { |
| 47 public: | 49 public: |
| 48 explicit MediaStreamVideoSource(MediaStreamDependencyFactory* factory); | 50 explicit MediaStreamVideoSource(MediaStreamDependencyFactory* factory); |
| 49 virtual ~MediaStreamVideoSource(); | 51 virtual ~MediaStreamVideoSource(); |
| 50 | 52 |
| 53 static MediaStreamVideoSource* GetVideoSource( | |
|
Ronghua Wu (Left Chromium)
2014/03/01 01:26:04
Put comments.
perkj_chrome
2014/03/02 09:20:44
Done.
| |
| 54 const blink::WebMediaStreamSource& source); | |
| 55 | |
| 51 // Puts |track| in the registered tracks list. | 56 // Puts |track| in the registered tracks list. |
| 52 virtual void AddTrack(const blink::WebMediaStreamTrack& track, | 57 virtual void AddTrack(const blink::WebMediaStreamTrack& track, |
|
Alpha Left Google
2014/02/28 02:49:22
This is odd. I think it should just take the nativ
Ronghua Wu (Left Chromium)
2014/03/01 01:26:04
Make sense.
And I saw you called RemoveTrack from
perkj_chrome
2014/03/02 09:20:44
I can not call AddTrack in the ctor. gUM needs to
perkj_chrome
2014/03/02 09:20:44
ok - but then I need to change the base class and
Alpha Left Google
2014/03/03 06:45:04
Okay.
| |
| 53 const blink::WebMediaConstraints& constraints, | 58 const blink::WebMediaConstraints& constraints, |
| 54 const ConstraintsCallback& callback) OVERRIDE; | 59 const ConstraintsCallback& callback) OVERRIDE; |
| 55 virtual void RemoveTrack(const blink::WebMediaStreamTrack& track) OVERRIDE; | 60 void RemoveTrack(MediaStreamVideoTrack* track); |
| 56 | 61 |
| 57 // TODO(ronghuawu): Remove webrtc::VideoSourceInterface from the public | 62 // TODO(ronghuawu): Remove webrtc::VideoSourceInterface from the public |
| 58 // interface of this class. | 63 // interface of this class. |
| 59 // This creates a VideoSourceInterface implementation if it does not already | 64 // This creates a VideoSourceInterface implementation if it does not already |
| 60 // exist. | 65 // exist. |
| 61 webrtc::VideoSourceInterface* GetAdapter(); | 66 webrtc::VideoSourceInterface* GetAdapter(); |
| 62 | 67 |
| 63 // Constraint keys used by a video source. | 68 // Constraint keys used by a video source. |
| 64 // Specified by draft-alvestrand-constraints-resolution-00b | 69 // Specified by draft-alvestrand-constraints-resolution-00b |
| 65 static const char kMinAspectRatio[]; // minAspectRatio | 70 static const char kMinAspectRatio[]; // minAspectRatio |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 147 const ConstraintsCallback& callback); | 152 const ConstraintsCallback& callback); |
| 148 ~RequestedConstraints(); | 153 ~RequestedConstraints(); |
| 149 | 154 |
| 150 blink::WebMediaConstraints constraints; | 155 blink::WebMediaConstraints constraints; |
| 151 ConstraintsCallback callback; | 156 ConstraintsCallback callback; |
| 152 }; | 157 }; |
| 153 std::vector<RequestedConstraints> requested_constraints_; | 158 std::vector<RequestedConstraints> requested_constraints_; |
| 154 | 159 |
| 155 media::VideoCaptureFormats supported_formats_; | 160 media::VideoCaptureFormats supported_formats_; |
| 156 | 161 |
| 162 // Tracks that currently are receiving video frames. | |
| 163 std::vector<MediaStreamVideoTrack*> tracks_; | |
| 164 | |
| 157 // TODO(perkj): The below classes use webrtc/libjingle types. The goal is to | 165 // TODO(perkj): The below classes use webrtc/libjingle types. The goal is to |
| 158 // get rid of them as far as possible. | 166 // get rid of them as far as possible. |
| 159 MediaStreamDependencyFactory* factory_; | 167 MediaStreamDependencyFactory* factory_; |
| 160 scoped_refptr<webrtc::VideoSourceInterface> adapter_; | 168 scoped_refptr<webrtc::VideoSourceInterface> adapter_; |
| 161 WebRtcVideoCapturerAdapter* capture_adapter_; | 169 WebRtcVideoCapturerAdapter* capture_adapter_; |
| 162 | 170 |
| 163 DISALLOW_COPY_AND_ASSIGN(MediaStreamVideoSource); | 171 DISALLOW_COPY_AND_ASSIGN(MediaStreamVideoSource); |
| 164 }; | 172 }; |
| 165 | 173 |
| 166 } // namespace content | 174 } // namespace content |
| 167 | 175 |
| 168 #endif // CONTENT_RENDERER_MEDIA_MEDIA_STREAM_VIDEO_SOURCE_H_ | 176 #endif // CONTENT_RENDERER_MEDIA_MEDIA_STREAM_VIDEO_SOURCE_H_ |
| OLD | NEW |