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 577c7dca65ce0f6e77867b114606d15cdd349388..32c19c9ece60f9100e8fcbbad34ea1d77ee1f40e 100644 |
--- a/content/renderer/media/media_stream_video_track.cc |
+++ b/content/renderer/media/media_stream_video_track.cc |
@@ -11,7 +11,7 @@ |
namespace content { |
// Helper class used for delivering video frames to MediaStreamSinks on the |
-// IO-thread and MediaStreamVideoSinks on the main render thread. |
+// IO-thread. |
// Frames are delivered to an instance of this class from a |
// MediaStreamVideoSource on the IO-thread to the method DeliverFrameOnIO. |
// Frames are only delivered to the sinks if the track is enabled. |
@@ -24,19 +24,14 @@ class MediaStreamVideoTrack::FrameDeliverer : public VideoFrameDeliverer { |
enabled_(enabled) { |
} |
- // Add |sink| to receive frames and state changes on the main render thread. |
- void AddSink(MediaStreamVideoSink* sink) { |
+ // Add |sink| to receive state changes on the main render thread. |
+ // Video frames will be delivered to |callback| on the IO thread. |
+ void AddSink(MediaStreamVideoSink* sink, |
+ const VideoCaptureDeliverFrameCB& callback) { |
DCHECK(thread_checker().CalledOnValidThread()); |
DCHECK(std::find(sinks_.begin(), sinks_.end(), sink) == sinks_.end()); |
- if (sinks_.empty()) { |
- VideoCaptureDeliverFrameCB frame_callback = media::BindToCurrentLoop( |
- base::Bind( |
- &MediaStreamVideoTrack::FrameDeliverer::OnVideoFrameOnMainThread, |
- this)); |
- AddCallback(this, frame_callback); |
- } |
- |
sinks_.push_back(sink); |
+ AddCallback(sink, callback); |
} |
void RemoveSink(MediaStreamVideoSink* sink) { |
@@ -45,21 +40,7 @@ class MediaStreamVideoTrack::FrameDeliverer : public VideoFrameDeliverer { |
std::find(sinks_.begin(), sinks_.end(), sink); |
DCHECK(it != sinks_.end()); |
sinks_.erase(it); |
- if (sinks_.empty()) { |
- RemoveCallback(this); |
- } |
- } |
- |
- // Called when a video frame is received on the main render thread. |
- // It delivers the received frames to the registered MediaStreamVideo sinks. |
- void OnVideoFrameOnMainThread( |
- const scoped_refptr<media::VideoFrame>& frame, |
- const media::VideoCaptureFormat& format) { |
- DCHECK(thread_checker().CalledOnValidThread()); |
- for (std::vector<MediaStreamVideoSink*>::iterator it = sinks_.begin(); |
- it != sinks_.end(); ++it) { |
- (*it)->OnVideoFrame(frame); |
- } |
+ RemoveCallback(sink); |
} |
void SetEnabled(bool enabled) { |
@@ -145,9 +126,10 @@ MediaStreamVideoTrack::~MediaStreamVideoTrack() { |
DVLOG(3) << "~MediaStreamVideoTrack()"; |
} |
-void MediaStreamVideoTrack::AddSink(MediaStreamVideoSink* sink) { |
+void MediaStreamVideoTrack::AddSink( |
+ MediaStreamVideoSink* sink, const VideoCaptureDeliverFrameCB& callback) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
- frame_deliverer_->AddSink(sink); |
+ frame_deliverer_->AddSink(sink, callback); |
} |
void MediaStreamVideoTrack::RemoveSink(MediaStreamVideoSink* sink) { |
@@ -155,17 +137,6 @@ void MediaStreamVideoTrack::RemoveSink(MediaStreamVideoSink* sink) { |
frame_deliverer_->RemoveSink(sink); |
} |
-void MediaStreamVideoTrack::AddSink( |
- MediaStreamSink* sink, const VideoCaptureDeliverFrameCB& callback) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- frame_deliverer_->AddCallback(sink, callback); |
-} |
- |
-void MediaStreamVideoTrack::RemoveSink(MediaStreamSink* sink) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- frame_deliverer_->RemoveCallback(sink); |
-} |
- |
void MediaStreamVideoTrack::SetEnabled(bool enabled) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
MediaStreamTrack::SetEnabled(enabled); |