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

Side by Side Diff: content/renderer/media/media_stream_video_track.cc

Issue 201583003: Implement a source for remote video tracks. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased Created 6 years, 8 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 #include "content/renderer/media/media_stream_video_track.h" 5 #include "content/renderer/media/media_stream_video_track.h"
6 6
7 #include "content/renderer/media/media_stream_dependency_factory.h" 7 #include "content/renderer/media/media_stream_dependency_factory.h"
8 #include "content/renderer/media/webrtc/webrtc_video_sink_adapter.h"
9 8
10 namespace content { 9 namespace content {
11 10
12 //static 11 //static
13 blink::WebMediaStreamTrack MediaStreamVideoTrack::CreateVideoTrack( 12 blink::WebMediaStreamTrack MediaStreamVideoTrack::CreateVideoTrack(
14 MediaStreamVideoSource* source, 13 MediaStreamVideoSource* source,
15 const blink::WebMediaConstraints& constraints, 14 const blink::WebMediaConstraints& constraints,
16 const MediaStreamVideoSource::ConstraintsCallback& callback, 15 const MediaStreamVideoSource::ConstraintsCallback& callback,
17 bool enabled, 16 bool enabled,
18 MediaStreamDependencyFactory* factory) { 17 MediaStreamDependencyFactory* factory) {
(...skipping 16 matching lines...) Expand all
35 MediaStreamVideoTrack::MediaStreamVideoTrack( 34 MediaStreamVideoTrack::MediaStreamVideoTrack(
36 MediaStreamVideoSource* source, 35 MediaStreamVideoSource* source,
37 const blink::WebMediaConstraints& constraints, 36 const blink::WebMediaConstraints& constraints,
38 const MediaStreamVideoSource::ConstraintsCallback& callback, 37 const MediaStreamVideoSource::ConstraintsCallback& callback,
39 bool enabled, 38 bool enabled,
40 MediaStreamDependencyFactory* factory) 39 MediaStreamDependencyFactory* factory)
41 : MediaStreamTrack(NULL, true), 40 : MediaStreamTrack(NULL, true),
42 enabled_(enabled), 41 enabled_(enabled),
43 source_(source), 42 source_(source),
44 factory_(factory) { 43 factory_(factory) {
45 // TODO(perkj): source can be NULL if this is actually a remote video track. 44 source->AddTrack(this, constraints, callback);
46 // Remove as soon as we only have one implementation of video tracks.
47 if (source)
48 source->AddTrack(this, constraints, callback);
49 } 45 }
50 46
51 MediaStreamVideoTrack::~MediaStreamVideoTrack() { 47 MediaStreamVideoTrack::~MediaStreamVideoTrack() {
52 DCHECK(sinks_.empty()); 48 DCHECK(sinks_.empty());
53 // TODO(perkj): source can be NULL if this is actually a remote video track. 49 source_->RemoveTrack(this);
54 // Remove as soon as we only have one implementation of video tracks.
55 if (source_)
56 source_->RemoveTrack(this);
57 } 50 }
58 51
59 void MediaStreamVideoTrack::AddSink(MediaStreamVideoSink* sink) { 52 void MediaStreamVideoTrack::AddSink(MediaStreamVideoSink* sink) {
60 DCHECK(thread_checker_.CalledOnValidThread()); 53 DCHECK(thread_checker_.CalledOnValidThread());
61 DCHECK(std::find(sinks_.begin(), sinks_.end(), sink) == sinks_.end()); 54 DCHECK(std::find(sinks_.begin(), sinks_.end(), sink) == sinks_.end());
62 sinks_.push_back(sink); 55 sinks_.push_back(sink);
63 } 56 }
64 57
65 void MediaStreamVideoTrack::RemoveSink(MediaStreamVideoSink* sink) { 58 void MediaStreamVideoTrack::RemoveSink(MediaStreamVideoSink* sink) {
66 DCHECK(thread_checker_.CalledOnValidThread()); 59 DCHECK(thread_checker_.CalledOnValidThread());
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 102
110 void MediaStreamVideoTrack::OnReadyStateChanged( 103 void MediaStreamVideoTrack::OnReadyStateChanged(
111 blink::WebMediaStreamSource::ReadyState state) { 104 blink::WebMediaStreamSource::ReadyState state) {
112 DCHECK(thread_checker_.CalledOnValidThread()); 105 DCHECK(thread_checker_.CalledOnValidThread());
113 for (std::vector<MediaStreamVideoSink*>::iterator it = sinks_.begin(); 106 for (std::vector<MediaStreamVideoSink*>::iterator it = sinks_.begin();
114 it != sinks_.end(); ++it) { 107 it != sinks_.end(); ++it) {
115 (*it)->OnReadyStateChanged(state); 108 (*it)->OnReadyStateChanged(state);
116 } 109 }
117 } 110 }
118 111
119 // Wrapper which allows to use std::find_if() when adding and removing
120 // sinks to/from |sinks_|.
121 struct SinkWrapper {
122 explicit SinkWrapper(MediaStreamVideoSink* sink) : sink_(sink) {}
123 bool operator()(
124 const WebRtcVideoSinkAdapter* owner) {
125 return owner->sink() == sink_;
126 }
127 MediaStreamVideoSink* sink_;
128 };
129
130 WebRtcMediaStreamVideoTrack::WebRtcMediaStreamVideoTrack(
131 webrtc::VideoTrackInterface* track)
132 : MediaStreamVideoTrack(NULL,
133 blink::WebMediaConstraints(),
134 MediaStreamVideoSource::ConstraintsCallback(),
135 track->enabled(),
136 NULL) {
137 track_ = track;
138 }
139
140 WebRtcMediaStreamVideoTrack::~WebRtcMediaStreamVideoTrack() {
141 }
142
143 void WebRtcMediaStreamVideoTrack::AddSink(MediaStreamVideoSink* sink) {
144 DCHECK(thread_checker_.CalledOnValidThread());
145 DCHECK(std::find_if(sinks_.begin(), sinks_.end(),
146 SinkWrapper(sink)) == sinks_.end());
147 sinks_.push_back(new WebRtcVideoSinkAdapter(GetVideoAdapter(), sink));
148 }
149
150 void WebRtcMediaStreamVideoTrack::RemoveSink(MediaStreamVideoSink* sink) {
151 DCHECK(thread_checker_.CalledOnValidThread());
152 ScopedVector<WebRtcVideoSinkAdapter>::iterator it =
153 std::find_if(sinks_.begin(), sinks_.end(), SinkWrapper(sink));
154 DCHECK(it != sinks_.end());
155 sinks_.erase(it);
156 }
157
158 } // namespace content 112 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/media_stream_video_track.h ('k') | content/renderer/media/mock_media_stream_dependency_factory.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698