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 |