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

Unified Diff: content/renderer/media/media_stream_video_track.h

Issue 155853002: Chrome MediaStream VideoTrack implementation. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Removed whitespaces... Created 6 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: content/renderer/media/media_stream_video_track.h
diff --git a/content/renderer/media/media_stream_video_track.h b/content/renderer/media/media_stream_video_track.h
index 25995906905fdc2d35afa9c7e415191c28e08d21..16c0a912404a0e1f454a766b0a3d312f238eb513 100644
--- a/content/renderer/media/media_stream_video_track.h
+++ b/content/renderer/media/media_stream_video_track.h
@@ -5,12 +5,15 @@
#ifndef CONTENT_RENDERER_MEDIA_MEDIA_STREAM_VIDEO_TRACK_H_
#define CONTENT_RENDERER_MEDIA_MEDIA_STREAM_VIDEO_TRACK_H_
+#include <vector>
+
#include "base/compiler_specific.h"
#include "base/memory/scoped_vector.h"
#include "base/threading/thread_checker.h"
#include "content/common/content_export.h"
#include "content/public/renderer/media_stream_video_sink.h"
#include "content/renderer/media/media_stream_track.h"
+#include "content/renderer/media/media_stream_video_source.h"
namespace webrtc {
class VideoTrackInterface;
@@ -24,23 +27,58 @@ class WebRtcVideoSinkAdapter;
// MediaStreamVideoTrack is a video specific representation of a
// blink::WebMediaStreamTrack in content. It is owned by the blink object
// and can be retrieved from a blink object using
-// WebMediaStreamTrack::extraData()
+// WebMediaStreamTrack::extraData() or MediaStreamVideoTrack::GetVideoTrack.
class CONTENT_EXPORT MediaStreamVideoTrack : public MediaStreamTrack {
public:
+ // Help method to create a blink::WebMediaStreamTrack and a
+ // MediaStreamVideoTrack instance. The MediaStreamVideoTrack object is owned
+ // by the blink object in its WebMediaStreamTrack::ExtraData member.
+ // |callback| is triggered if the track is added to the source
+ // successfully and will receive video frames that match |constraints|
+ // or if the source fail to provide video frames.
+ // If |enabled| is true, sinks added to the track will
+ // receive video frames when the source deliver frames to the track.
+ static blink::WebMediaStreamTrack CreateVideoTrack(
+ MediaStreamVideoSource* source,
+ const blink::WebMediaConstraints& constraints,
+ const MediaStreamVideoSource::ConstraintsCallback& callback,
+ bool enabled,
+ MediaStreamDependencyFactory* factory);
+
+ static MediaStreamVideoTrack* GetVideoTrack(
+ const blink::WebMediaStreamTrack& track);
+
// Constructor for local video tracks.
- explicit MediaStreamVideoTrack(MediaStreamDependencyFactory* factory);
- // Constructor for remote video tracks.
- explicit MediaStreamVideoTrack(webrtc::VideoTrackInterface* track);
+ MediaStreamVideoTrack(
+ MediaStreamVideoSource* source,
+ const blink::WebMediaConstraints& constraints,
+ const MediaStreamVideoSource::ConstraintsCallback& callback,
+ bool enabled,
+ MediaStreamDependencyFactory* factory);
virtual ~MediaStreamVideoTrack();
- void AddSink(MediaStreamVideoSink* sink);
- void RemoveSink(MediaStreamVideoSink* sink);
+ virtual void AddSink(MediaStreamVideoSink* sink);
+ virtual void RemoveSink(MediaStreamVideoSink* sink);
+ // TODO(perkj): GetVideoAdapter is webrtc specific. Move GetVideoAdapter to
+ // where the track is added to a RTCPeerConnection. crbug/323223.
virtual webrtc::VideoTrackInterface* GetVideoAdapter() OVERRIDE;
+ virtual void SetEnabled(bool enabled) OVERRIDE;
- private:
+ void OnVideoFrame(const scoped_refptr<media::VideoFrame>& frame);
+ void OnReadyStateChanged(blink::WebMediaStreamSource::ReadyState state);
+
+ protected:
// Used to DCHECK that we are called on the correct thread.
base::ThreadChecker thread_checker_;
- ScopedVector<WebRtcVideoSinkAdapter> sinks_;
+
+ private:
+ bool enabled_;
+ std::vector<MediaStreamVideoSink*> sinks_;
+
+ // Weak ref to the source this tracks is connected to. |source_| is owned
+ // by the blink::WebMediaStreamSource and is guaranteed to outlive the
+ // track.
+ MediaStreamVideoSource* source_;
// Weak ref to a MediaStreamDependencyFactory, owned by the RenderThread.
// It's valid for the lifetime of RenderThread.
@@ -49,6 +87,26 @@ class CONTENT_EXPORT MediaStreamVideoTrack : public MediaStreamTrack {
DISALLOW_COPY_AND_ASSIGN(MediaStreamVideoTrack);
};
+// WebRtcMediaStreamVideoTrack is a content representation of a video track.
+// received on a PeerConnection.
+// TODO(perkj): Replace WebRtcMediaStreamVideoTrack with a remote
+// MediaStreamVideoSource class so that all tracks are MediaStreamVideoTracks
+// and new tracks can be cloned from the original remote video track.
+// crbug/334243.
+class CONTENT_EXPORT WebRtcMediaStreamVideoTrack
+ : public MediaStreamVideoTrack {
+ public:
+ explicit WebRtcMediaStreamVideoTrack(webrtc::VideoTrackInterface* track);
+ virtual ~WebRtcMediaStreamVideoTrack();
+ virtual void AddSink(MediaStreamVideoSink* sink) OVERRIDE;
+ virtual void RemoveSink(MediaStreamVideoSink* sink) OVERRIDE;
+
+ private:
+ ScopedVector<WebRtcVideoSinkAdapter> sinks_;
+
+ DISALLOW_COPY_AND_ASSIGN(WebRtcMediaStreamVideoTrack);
+};
+
} // namespace content
#endif // CONTENT_RENDERER_MEDIA_MEDIA_STREAM_VIDEO_TRACK_H_
« no previous file with comments | « content/renderer/media/media_stream_video_source_unittest.cc ('k') | content/renderer/media/media_stream_video_track.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698