Chromium Code Reviews| Index: content/renderer/media/media_stream_video_track.cc |
| diff --git a/content/renderer/media/media_stream_video_track.cc b/content/renderer/media/media_stream_video_track.cc |
| index 00e75faba188b6801f73a3f51218854afe3afb9a..4914de050dbddbf6bf108e66fbdd12114c008a38 100644 |
| --- a/content/renderer/media/media_stream_video_track.cc |
| +++ b/content/renderer/media/media_stream_video_track.cc |
| @@ -212,6 +212,10 @@ blink::WebMediaStreamTrack MediaStreamVideoTrack::CreateVideoTrack( |
| // static |
| MediaStreamVideoTrack* MediaStreamVideoTrack::GetVideoTrack( |
| const blink::WebMediaStreamTrack& track) { |
| + if (track.isNull() || |
| + track.source().getType() != blink::WebMediaStreamSource::TypeVideo) { |
| + return nullptr; |
| + } |
| return static_cast<MediaStreamVideoTrack*>(track.getExtraData()); |
| } |
| @@ -236,7 +240,12 @@ MediaStreamVideoTrack::MediaStreamVideoTrack( |
| MediaStreamVideoTrack::~MediaStreamVideoTrack() { |
| DCHECK(main_render_thread_checker_.CalledOnValidThread()); |
| + |
| + // It's critical to check that |sinks_| is empty because a |
| + // MediaStreamVideoSink holds a pointer to this track until it calls |
| + // RemoveSink(). |
|
mcasas
2016/04/05 23:12:52
This is true and unfortunately so because the
owne
miu
2016/04/06 00:03:18
FYI--Your comment here makes me wonder if this cha
|
| DCHECK(sinks_.empty()); |
| + |
| Stop(); |
| DVLOG(3) << "~MediaStreamVideoTrack()"; |
| } |
| @@ -247,9 +256,9 @@ void MediaStreamVideoTrack::AddSink( |
| DCHECK(std::find(sinks_.begin(), sinks_.end(), sink) == sinks_.end()); |
| sinks_.push_back(sink); |
| frame_deliverer_->AddCallback(sink, callback); |
| + |
| // Request source to deliver a frame because a new sink is added. |
| - if (source_) |
| - source_->RequestRefreshFrame(); |
| + RequestRefreshFrame(); |
| } |
| void MediaStreamVideoTrack::RemoveSink(MediaStreamVideoSink* sink) { |
| @@ -284,4 +293,10 @@ void MediaStreamVideoTrack::OnReadyStateChanged( |
| sink->OnReadyStateChanged(state); |
| } |
| +void MediaStreamVideoTrack::RequestRefreshFrame() { |
| + DCHECK(main_render_thread_checker_.CalledOnValidThread()); |
| + if (source_) |
| + source_->RequestRefreshFrame(); |
| +} |
| + |
| } // namespace content |