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

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

Issue 2365223002: Video Capture: Allow suspension of individual devices. (Closed)
Patch Set: REBASE, and clean-ups+tests suggested by chfremer@. Created 4 years, 2 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 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 245
246 void MediaStreamVideoTrack::AddSink(MediaStreamVideoSink* sink, 246 void MediaStreamVideoTrack::AddSink(MediaStreamVideoSink* sink,
247 const VideoCaptureDeliverFrameCB& callback, 247 const VideoCaptureDeliverFrameCB& callback,
248 bool is_sink_secure) { 248 bool is_sink_secure) {
249 DCHECK(main_render_thread_checker_.CalledOnValidThread()); 249 DCHECK(main_render_thread_checker_.CalledOnValidThread());
250 DCHECK(std::find(sinks_.begin(), sinks_.end(), sink) == sinks_.end()); 250 DCHECK(std::find(sinks_.begin(), sinks_.end(), sink) == sinks_.end());
251 sinks_.push_back(sink); 251 sinks_.push_back(sink);
252 frame_deliverer_->AddCallback(sink, callback); 252 frame_deliverer_->AddCallback(sink, callback);
253 secure_tracker_.Add(sink, is_sink_secure); 253 secure_tracker_.Add(sink, is_sink_secure);
254 // 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.
255 if (source_) { 255 if (source_) {
mcasas 2016/09/28 21:34:44 Heh I feel like a scratched record, but, early ret
miu 2016/09/28 22:35:15 Done.
256 source_->UpdateHasConsumers(this, true);
256 source_->RequestRefreshFrame(); 257 source_->RequestRefreshFrame();
257 source_->UpdateCapturingLinkSecure(this, 258 source_->UpdateCapturingLinkSecure(this,
258 secure_tracker_.is_capturing_secure()); 259 secure_tracker_.is_capturing_secure());
259 } 260 }
260 } 261 }
261 262
262 void MediaStreamVideoTrack::RemoveSink(MediaStreamVideoSink* sink) { 263 void MediaStreamVideoTrack::RemoveSink(MediaStreamVideoSink* sink) {
263 DCHECK(main_render_thread_checker_.CalledOnValidThread()); 264 DCHECK(main_render_thread_checker_.CalledOnValidThread());
264 std::vector<MediaStreamVideoSink*>::iterator it = 265 std::vector<MediaStreamVideoSink*>::iterator it =
265 std::find(sinks_.begin(), sinks_.end(), sink); 266 std::find(sinks_.begin(), sinks_.end(), sink);
266 DCHECK(it != sinks_.end()); 267 DCHECK(it != sinks_.end());
267 sinks_.erase(it); 268 sinks_.erase(it);
268 frame_deliverer_->RemoveCallback(sink); 269 frame_deliverer_->RemoveCallback(sink);
269 secure_tracker_.Remove(sink); 270 secure_tracker_.Remove(sink);
270 if (source_) 271 if (source_) {
272 if (sinks_.empty())
273 source_->UpdateHasConsumers(this, false);
271 source_->UpdateCapturingLinkSecure(this, 274 source_->UpdateCapturingLinkSecure(this,
272 secure_tracker_.is_capturing_secure()); 275 secure_tracker_.is_capturing_secure());
276 }
273 } 277 }
274 278
275 void MediaStreamVideoTrack::SetEnabled(bool enabled) { 279 void MediaStreamVideoTrack::SetEnabled(bool enabled) {
276 DCHECK(main_render_thread_checker_.CalledOnValidThread()); 280 DCHECK(main_render_thread_checker_.CalledOnValidThread());
277 frame_deliverer_->SetEnabled(enabled); 281 frame_deliverer_->SetEnabled(enabled);
278 for (auto* sink : sinks_) 282 for (auto* sink : sinks_)
279 sink->OnEnabledChanged(enabled); 283 sink->OnEnabledChanged(enabled);
280 } 284 }
281 285
282 void MediaStreamVideoTrack::Stop() { 286 void MediaStreamVideoTrack::Stop() {
(...skipping 20 matching lines...) Expand all
303 } 307 }
304 308
305 void MediaStreamVideoTrack::OnReadyStateChanged( 309 void MediaStreamVideoTrack::OnReadyStateChanged(
306 blink::WebMediaStreamSource::ReadyState state) { 310 blink::WebMediaStreamSource::ReadyState state) {
307 DCHECK(main_render_thread_checker_.CalledOnValidThread()); 311 DCHECK(main_render_thread_checker_.CalledOnValidThread());
308 for (auto* sink : sinks_) 312 for (auto* sink : sinks_)
309 sink->OnReadyStateChanged(state); 313 sink->OnReadyStateChanged(state);
310 } 314 }
311 315
312 } // namespace content 316 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698