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

Unified 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: Addressed last round of comments from xjz and emircan. 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 side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698