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

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

Issue 1849003002: Add video frame refresh to MediaStream and VideoCapture stacks. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 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
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 <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/location.h" 10 #include "base/location.h"
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 track.setExtraData(new MediaStreamVideoTrack(source, 205 track.setExtraData(new MediaStreamVideoTrack(source,
206 constraints, 206 constraints,
207 callback, 207 callback,
208 enabled)); 208 enabled));
209 return track; 209 return track;
210 } 210 }
211 211
212 // static 212 // static
213 MediaStreamVideoTrack* MediaStreamVideoTrack::GetVideoTrack( 213 MediaStreamVideoTrack* MediaStreamVideoTrack::GetVideoTrack(
214 const blink::WebMediaStreamTrack& track) { 214 const blink::WebMediaStreamTrack& track) {
215 if (track.isNull() ||
216 track.source().getType() != blink::WebMediaStreamSource::TypeVideo) {
217 return nullptr;
218 }
215 return static_cast<MediaStreamVideoTrack*>(track.getExtraData()); 219 return static_cast<MediaStreamVideoTrack*>(track.getExtraData());
216 } 220 }
217 221
218 MediaStreamVideoTrack::MediaStreamVideoTrack( 222 MediaStreamVideoTrack::MediaStreamVideoTrack(
219 MediaStreamVideoSource* source, 223 MediaStreamVideoSource* source,
220 const blink::WebMediaConstraints& constraints, 224 const blink::WebMediaConstraints& constraints,
221 const MediaStreamVideoSource::ConstraintsCallback& callback, 225 const MediaStreamVideoSource::ConstraintsCallback& callback,
222 bool enabled) 226 bool enabled)
223 : MediaStreamTrack(true), 227 : MediaStreamTrack(true),
224 frame_deliverer_( 228 frame_deliverer_(
(...skipping 16 matching lines...) Expand all
241 DVLOG(3) << "~MediaStreamVideoTrack()"; 245 DVLOG(3) << "~MediaStreamVideoTrack()";
242 } 246 }
243 247
244 void MediaStreamVideoTrack::AddSink( 248 void MediaStreamVideoTrack::AddSink(
245 MediaStreamVideoSink* sink, const VideoCaptureDeliverFrameCB& callback) { 249 MediaStreamVideoSink* sink, const VideoCaptureDeliverFrameCB& callback) {
246 DCHECK(main_render_thread_checker_.CalledOnValidThread()); 250 DCHECK(main_render_thread_checker_.CalledOnValidThread());
247 DCHECK(std::find(sinks_.begin(), sinks_.end(), sink) == sinks_.end()); 251 DCHECK(std::find(sinks_.begin(), sinks_.end(), sink) == sinks_.end());
248 sinks_.push_back(sink); 252 sinks_.push_back(sink);
249 frame_deliverer_->AddCallback(sink, callback); 253 frame_deliverer_->AddCallback(sink, callback);
250 // Request source to deliver a frame because a new sink is added. 254 // Request source to deliver a frame because a new sink is added.
251 if (source_) 255 if (source_)
xjz 2016/04/01 19:10:04 nit: maybe just call RequestRefreshFrame() now?
miu 2016/04/01 23:24:27 Done.
252 source_->RequestRefreshFrame(); 256 source_->RequestRefreshFrame();
253 } 257 }
254 258
255 void MediaStreamVideoTrack::RemoveSink(MediaStreamVideoSink* sink) { 259 void MediaStreamVideoTrack::RemoveSink(MediaStreamVideoSink* sink) {
256 DCHECK(main_render_thread_checker_.CalledOnValidThread()); 260 DCHECK(main_render_thread_checker_.CalledOnValidThread());
257 std::vector<MediaStreamVideoSink*>::iterator it = 261 std::vector<MediaStreamVideoSink*>::iterator it =
258 std::find(sinks_.begin(), sinks_.end(), sink); 262 std::find(sinks_.begin(), sinks_.end(), sink);
259 DCHECK(it != sinks_.end()); 263 DCHECK(it != sinks_.end());
260 sinks_.erase(it); 264 sinks_.erase(it);
261 frame_deliverer_->RemoveCallback(sink); 265 frame_deliverer_->RemoveCallback(sink);
262 } 266 }
263 267
264 void MediaStreamVideoTrack::SetEnabled(bool enabled) { 268 void MediaStreamVideoTrack::SetEnabled(bool enabled) {
265 DCHECK(main_render_thread_checker_.CalledOnValidThread()); 269 DCHECK(main_render_thread_checker_.CalledOnValidThread());
266 frame_deliverer_->SetEnabled(enabled); 270 frame_deliverer_->SetEnabled(enabled);
267 for (auto* sink : sinks_) 271 for (auto* sink : sinks_)
268 sink->OnEnabledChanged(enabled); 272 sink->OnEnabledChanged(enabled);
269 } 273 }
270 274
275 void MediaStreamVideoTrack::RequestRefreshFrame() {
276 DCHECK(main_render_thread_checker_.CalledOnValidThread());
277 if (source_)
278 source_->RequestRefreshFrame();
279 }
280
271 void MediaStreamVideoTrack::Stop() { 281 void MediaStreamVideoTrack::Stop() {
272 DCHECK(main_render_thread_checker_.CalledOnValidThread()); 282 DCHECK(main_render_thread_checker_.CalledOnValidThread());
273 if (source_) { 283 if (source_) {
274 source_->RemoveTrack(this); 284 source_->RemoveTrack(this);
275 source_ = NULL; 285 source_ = NULL;
276 } 286 }
277 OnReadyStateChanged(blink::WebMediaStreamSource::ReadyStateEnded); 287 OnReadyStateChanged(blink::WebMediaStreamSource::ReadyStateEnded);
278 } 288 }
279 289
280 void MediaStreamVideoTrack::OnReadyStateChanged( 290 void MediaStreamVideoTrack::OnReadyStateChanged(
281 blink::WebMediaStreamSource::ReadyState state) { 291 blink::WebMediaStreamSource::ReadyState state) {
282 DCHECK(main_render_thread_checker_.CalledOnValidThread()); 292 DCHECK(main_render_thread_checker_.CalledOnValidThread());
283 for (auto* sink : sinks_) 293 for (auto* sink : sinks_)
284 sink->OnReadyStateChanged(state); 294 sink->OnReadyStateChanged(state);
285 } 295 }
286 296
287 } // namespace content 297 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698