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

Unified Diff: content/renderer/media/media_stream_video_track.cc

Issue 264363005: Cast: deliver video frames on the IO thread (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: ThreadCheckerImpl Created 6 years, 7 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 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);
« no previous file with comments | « content/renderer/media/media_stream_video_track.h ('k') | content/renderer/media/media_stream_video_track_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698