| OLD | NEW |
| 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 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 222 MediaStreamVideoTrack::MediaStreamVideoTrack( | 222 MediaStreamVideoTrack::MediaStreamVideoTrack( |
| 223 MediaStreamVideoSource* source, | 223 MediaStreamVideoSource* source, |
| 224 const blink::WebMediaConstraints& constraints, | 224 const blink::WebMediaConstraints& constraints, |
| 225 const MediaStreamVideoSource::ConstraintsCallback& callback, | 225 const MediaStreamVideoSource::ConstraintsCallback& callback, |
| 226 bool enabled) | 226 bool enabled) |
| 227 : MediaStreamTrack(true), | 227 : MediaStreamTrack(true), |
| 228 frame_deliverer_( | 228 frame_deliverer_( |
| 229 new MediaStreamVideoTrack::FrameDeliverer(source->io_task_runner(), | 229 new MediaStreamVideoTrack::FrameDeliverer(source->io_task_runner(), |
| 230 enabled)), | 230 enabled)), |
| 231 constraints_(constraints), | 231 constraints_(constraints), |
| 232 source_(source) { | 232 source_(source), |
| 233 secure_tracker_(new CapturingLinkSecureTracker<MediaStreamVideoSink>()) { |
| 233 DCHECK(!constraints.isNull()); | 234 DCHECK(!constraints.isNull()); |
| 234 source->AddTrack(this, | 235 source->AddTrack(this, |
| 235 base::Bind( | 236 base::Bind( |
| 236 &MediaStreamVideoTrack::FrameDeliverer::DeliverFrameOnIO, | 237 &MediaStreamVideoTrack::FrameDeliverer::DeliverFrameOnIO, |
| 237 frame_deliverer_), | 238 frame_deliverer_), |
| 238 constraints, callback); | 239 constraints, callback); |
| 239 } | 240 } |
| 240 | 241 |
| 241 MediaStreamVideoTrack::~MediaStreamVideoTrack() { | 242 MediaStreamVideoTrack::~MediaStreamVideoTrack() { |
| 242 DCHECK(main_render_thread_checker_.CalledOnValidThread()); | 243 DCHECK(main_render_thread_checker_.CalledOnValidThread()); |
| 243 DCHECK(sinks_.empty()); | 244 DCHECK(sinks_.empty()); |
| 244 Stop(); | 245 Stop(); |
| 245 DVLOG(3) << "~MediaStreamVideoTrack()"; | 246 DVLOG(3) << "~MediaStreamVideoTrack()"; |
| 246 } | 247 } |
| 247 | 248 |
| 248 void MediaStreamVideoTrack::AddSink( | 249 void MediaStreamVideoTrack::AddSink(MediaStreamVideoSink* sink, |
| 249 MediaStreamVideoSink* sink, const VideoCaptureDeliverFrameCB& callback) { | 250 const VideoCaptureDeliverFrameCB& callback, |
| 251 bool is_sink_secure) { |
| 250 DCHECK(main_render_thread_checker_.CalledOnValidThread()); | 252 DCHECK(main_render_thread_checker_.CalledOnValidThread()); |
| 251 DCHECK(std::find(sinks_.begin(), sinks_.end(), sink) == sinks_.end()); | 253 DCHECK(std::find(sinks_.begin(), sinks_.end(), sink) == sinks_.end()); |
| 252 sinks_.push_back(sink); | 254 sinks_.push_back(sink); |
| 253 frame_deliverer_->AddCallback(sink, callback); | 255 frame_deliverer_->AddCallback(sink, callback); |
| 256 secure_tracker_->AddLinkSecure(sink, is_sink_secure); |
| 254 // Request source to deliver a frame because a new sink is added. | 257 // Request source to deliver a frame because a new sink is added. |
| 255 if (source_) | 258 if (source_) { |
| 256 source_->RequestRefreshFrame(); | 259 source_->RequestRefreshFrame(); |
| 260 source_->UpdateCapturingLinkSecure(this, |
| 261 secure_tracker_->is_capturing_secure()); |
| 262 } |
| 257 } | 263 } |
| 258 | 264 |
| 259 void MediaStreamVideoTrack::RemoveSink(MediaStreamVideoSink* sink) { | 265 void MediaStreamVideoTrack::RemoveSink(MediaStreamVideoSink* sink) { |
| 260 DCHECK(main_render_thread_checker_.CalledOnValidThread()); | 266 DCHECK(main_render_thread_checker_.CalledOnValidThread()); |
| 261 std::vector<MediaStreamVideoSink*>::iterator it = | 267 std::vector<MediaStreamVideoSink*>::iterator it = |
| 262 std::find(sinks_.begin(), sinks_.end(), sink); | 268 std::find(sinks_.begin(), sinks_.end(), sink); |
| 263 DCHECK(it != sinks_.end()); | 269 DCHECK(it != sinks_.end()); |
| 264 sinks_.erase(it); | 270 sinks_.erase(it); |
| 265 frame_deliverer_->RemoveCallback(sink); | 271 frame_deliverer_->RemoveCallback(sink); |
| 272 secure_tracker_->RemoveLinkSecure(sink); |
| 273 if (source_) |
| 274 source_->UpdateCapturingLinkSecure(this, |
| 275 secure_tracker_->is_capturing_secure()); |
| 266 } | 276 } |
| 267 | 277 |
| 268 void MediaStreamVideoTrack::SetEnabled(bool enabled) { | 278 void MediaStreamVideoTrack::SetEnabled(bool enabled) { |
| 269 DCHECK(main_render_thread_checker_.CalledOnValidThread()); | 279 DCHECK(main_render_thread_checker_.CalledOnValidThread()); |
| 270 frame_deliverer_->SetEnabled(enabled); | 280 frame_deliverer_->SetEnabled(enabled); |
| 271 for (auto* sink : sinks_) | 281 for (auto* sink : sinks_) |
| 272 sink->OnEnabledChanged(enabled); | 282 sink->OnEnabledChanged(enabled); |
| 273 } | 283 } |
| 274 | 284 |
| 275 void MediaStreamVideoTrack::Stop() { | 285 void MediaStreamVideoTrack::Stop() { |
| 276 DCHECK(main_render_thread_checker_.CalledOnValidThread()); | 286 DCHECK(main_render_thread_checker_.CalledOnValidThread()); |
| 277 if (source_) { | 287 if (source_) { |
| 278 source_->RemoveTrack(this); | 288 source_->RemoveTrack(this); |
| 279 source_ = NULL; | 289 source_ = NULL; |
| 280 } | 290 } |
| 281 OnReadyStateChanged(blink::WebMediaStreamSource::ReadyStateEnded); | 291 OnReadyStateChanged(blink::WebMediaStreamSource::ReadyStateEnded); |
| 282 } | 292 } |
| 283 | 293 |
| 284 void MediaStreamVideoTrack::OnReadyStateChanged( | 294 void MediaStreamVideoTrack::OnReadyStateChanged( |
| 285 blink::WebMediaStreamSource::ReadyState state) { | 295 blink::WebMediaStreamSource::ReadyState state) { |
| 286 DCHECK(main_render_thread_checker_.CalledOnValidThread()); | 296 DCHECK(main_render_thread_checker_.CalledOnValidThread()); |
| 287 for (auto* sink : sinks_) | 297 for (auto* sink : sinks_) |
| 288 sink->OnReadyStateChanged(state); | 298 sink->OnReadyStateChanged(state); |
| 289 } | 299 } |
| 290 | 300 |
| 291 } // namespace content | 301 } // namespace content |
| OLD | NEW |