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

Side by Side Diff: content/renderer/media/media_stream_video_track.cc

Issue 218763007: Update MediaStreamTrack::Stop to latest draft. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed review comments and added tests. Created 6 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/media/media_stream_video_track.h" 5 #include "content/renderer/media/media_stream_video_track.h"
6 6
7 #include "content/renderer/media/media_stream_dependency_factory.h" 7 #include "content/renderer/media/media_stream_dependency_factory.h"
8 #include "content/renderer/media/webrtc/webrtc_video_sink_adapter.h" 8 #include "content/renderer/media/webrtc/webrtc_video_sink_adapter.h"
9 9
10 namespace content { 10 namespace content {
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 source_(source), 50 source_(source),
51 factory_(factory) { 51 factory_(factory) {
52 // TODO(perkj): source can be NULL if this is actually a remote video track. 52 // TODO(perkj): source can be NULL if this is actually a remote video track.
53 // Remove as soon as we only have one implementation of video tracks. 53 // Remove as soon as we only have one implementation of video tracks.
54 if (source) 54 if (source)
55 source->AddTrack(this, constraints, callback); 55 source->AddTrack(this, constraints, callback);
56 } 56 }
57 57
58 MediaStreamVideoTrack::~MediaStreamVideoTrack() { 58 MediaStreamVideoTrack::~MediaStreamVideoTrack() {
59 DCHECK(sinks_.empty()); 59 DCHECK(sinks_.empty());
60 // TODO(perkj): source can be NULL if this is actually a remote video track. 60 StopTrack();
61 // Remove as soon as we only have one implementation of video tracks.
62 if (source_)
63 source_->RemoveTrack(this);
64 } 61 }
65 62
66 void MediaStreamVideoTrack::AddSink(MediaStreamVideoSink* sink) { 63 void MediaStreamVideoTrack::AddSink(MediaStreamVideoSink* sink) {
67 DCHECK(thread_checker_.CalledOnValidThread()); 64 DCHECK(thread_checker_.CalledOnValidThread());
68 DCHECK(std::find(sinks_.begin(), sinks_.end(), sink) == sinks_.end()); 65 DCHECK(std::find(sinks_.begin(), sinks_.end(), sink) == sinks_.end());
69 sinks_.push_back(sink); 66 sinks_.push_back(sink);
70 } 67 }
71 68
72 void MediaStreamVideoTrack::RemoveSink(MediaStreamVideoSink* sink) { 69 void MediaStreamVideoTrack::RemoveSink(MediaStreamVideoSink* sink) {
73 DCHECK(thread_checker_.CalledOnValidThread()); 70 DCHECK(thread_checker_.CalledOnValidThread());
(...skipping 21 matching lines...) Expand all
95 void MediaStreamVideoTrack::SetEnabled(bool enabled) { 92 void MediaStreamVideoTrack::SetEnabled(bool enabled) {
96 DCHECK(thread_checker_.CalledOnValidThread()); 93 DCHECK(thread_checker_.CalledOnValidThread());
97 enabled_ = enabled; 94 enabled_ = enabled;
98 MediaStreamTrack::SetEnabled(enabled); 95 MediaStreamTrack::SetEnabled(enabled);
99 for (std::vector<MediaStreamVideoSink*>::iterator it = sinks_.begin(); 96 for (std::vector<MediaStreamVideoSink*>::iterator it = sinks_.begin();
100 it != sinks_.end(); ++it) { 97 it != sinks_.end(); ++it) {
101 (*it)->OnEnabledChanged(enabled); 98 (*it)->OnEnabledChanged(enabled);
102 } 99 }
103 } 100 }
104 101
102 void MediaStreamVideoTrack::StopTrack() {
103 DCHECK(thread_checker_.CalledOnValidThread());
104 if (source_) {
105 source_->RemoveTrack(this);
106 source_ = NULL;
107 }
108 OnReadyStateChanged(blink::WebMediaStreamSource::ReadyStateEnded);
109 }
110
105 void MediaStreamVideoTrack::OnVideoFrame( 111 void MediaStreamVideoTrack::OnVideoFrame(
106 const scoped_refptr<media::VideoFrame>& frame) { 112 const scoped_refptr<media::VideoFrame>& frame) {
107 DCHECK(thread_checker_.CalledOnValidThread()); 113 DCHECK(thread_checker_.CalledOnValidThread());
108 if (!enabled_) 114 if (!enabled_)
109 return; 115 return;
110 116
111 scoped_refptr<media::VideoFrame> video_frame = frame; 117 scoped_refptr<media::VideoFrame> video_frame = frame;
112 if (frame->format() == media::VideoFrame::I420) { 118 if (frame->format() == media::VideoFrame::I420) {
113 // Rendering do not support I420 but video capture use I420. 119 // Rendering do not support I420 but video capture use I420.
114 // The only difference between YV12 and I420 is the order of U and V plane. 120 // The only difference between YV12 and I420 is the order of U and V plane.
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
177 183
178 void WebRtcMediaStreamVideoTrack::RemoveSink(MediaStreamVideoSink* sink) { 184 void WebRtcMediaStreamVideoTrack::RemoveSink(MediaStreamVideoSink* sink) {
179 DCHECK(thread_checker_.CalledOnValidThread()); 185 DCHECK(thread_checker_.CalledOnValidThread());
180 ScopedVector<WebRtcVideoSinkAdapter>::iterator it = 186 ScopedVector<WebRtcVideoSinkAdapter>::iterator it =
181 std::find_if(sinks_.begin(), sinks_.end(), SinkWrapper(sink)); 187 std::find_if(sinks_.begin(), sinks_.end(), SinkWrapper(sink));
182 DCHECK(it != sinks_.end()); 188 DCHECK(it != sinks_.end());
183 sinks_.erase(it); 189 sinks_.erase(it);
184 } 190 }
185 191
186 } // namespace content 192 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698