Chromium Code Reviews| Index: content/public/renderer/media_stream_video_sink.cc |
| diff --git a/content/public/renderer/media_stream_video_sink.cc b/content/public/renderer/media_stream_video_sink.cc |
| index 118d732c6b3b090e9d737e9d2579bdc345201c76..94e4d4b78b043ac2d37338368359733767bcfaea 100644 |
| --- a/content/public/renderer/media_stream_video_sink.cc |
| +++ b/content/public/renderer/media_stream_video_sink.cc |
| @@ -4,29 +4,42 @@ |
| #include "content/public/renderer/media_stream_video_sink.h" |
| -#include "base/logging.h" |
| #include "content/renderer/media/media_stream_video_track.h" |
| -#include "third_party/WebKit/public/platform/WebMediaStreamTrack.h" |
| namespace content { |
| -void MediaStreamVideoSink::AddToVideoTrack( |
| - MediaStreamVideoSink* sink, |
| - const VideoCaptureDeliverFrameCB& callback, |
| - const blink::WebMediaStreamTrack& track) { |
| - DCHECK_EQ(blink::WebMediaStreamSource::TypeVideo, track.source().getType()); |
| +MediaStreamVideoSink::MediaStreamVideoSink() : MediaStreamSink() {} |
| + |
| +MediaStreamVideoSink::~MediaStreamVideoSink() { |
| + // Ensure this sink has disconnected from the track. |
| + DisconnectFromTrack(); |
| +} |
| + |
| +void MediaStreamVideoSink::ConnectToTrack( |
| + const blink::WebMediaStreamTrack& track, |
| + const VideoCaptureDeliverFrameCB& callback) { |
| + DCHECK(connected_track_.isNull()); |
| + connected_track_ = track; |
| + |
| + MediaStreamVideoTrack* const video_track = |
| + MediaStreamVideoTrack::GetVideoTrack(connected_track_); |
| + DCHECK(video_track); |
| + video_track->AddSink(this, callback); |
| +} |
| + |
| +void MediaStreamVideoSink::DisconnectFromTrack() { |
|
xjz
2016/04/01 19:10:04
nit: maybe early return if connected_track_.isNull
miu
2016/04/01 23:24:27
The GetVideoTrack() call checks that for us.
|
| MediaStreamVideoTrack* const video_track = |
| - static_cast<MediaStreamVideoTrack*>(track.getExtraData()); |
| - video_track->AddSink(sink, callback); |
| + MediaStreamVideoTrack::GetVideoTrack(connected_track_); |
| + if (video_track) |
| + video_track->RemoveSink(this); |
| + connected_track_.reset(); |
| } |
| -void MediaStreamVideoSink::RemoveFromVideoTrack( |
| - MediaStreamVideoSink* sink, |
| - const blink::WebMediaStreamTrack& track) { |
| - DCHECK_EQ(blink::WebMediaStreamSource::TypeVideo, track.source().getType()); |
| +void MediaStreamVideoSink::RequestRefreshFrame() { |
| MediaStreamVideoTrack* const video_track = |
| - static_cast<MediaStreamVideoTrack*>(track.getExtraData()); |
| - video_track->RemoveSink(sink); |
| + MediaStreamVideoTrack::GetVideoTrack(connected_track_); |
| + if (video_track) |
| + video_track->RequestRefreshFrame(); |
| } |
| } // namespace content |