| OLD | NEW | 
|---|
| 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  Loading... | 
| 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  Loading... | 
| 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 } | 
|  | 109 | 
| 105 void MediaStreamVideoTrack::OnVideoFrame( | 110 void MediaStreamVideoTrack::OnVideoFrame( | 
| 106     const scoped_refptr<media::VideoFrame>& frame) { | 111     const scoped_refptr<media::VideoFrame>& frame) { | 
| 107   DCHECK(thread_checker_.CalledOnValidThread()); | 112   DCHECK(thread_checker_.CalledOnValidThread()); | 
| 108   if (!enabled_) | 113   if (!enabled_) | 
| 109     return; | 114     return; | 
| 110 | 115 | 
| 111   scoped_refptr<media::VideoFrame> video_frame = frame; | 116   scoped_refptr<media::VideoFrame> video_frame = frame; | 
| 112   if (frame->format() == media::VideoFrame::I420) { | 117   if (frame->format() == media::VideoFrame::I420) { | 
| 113     // Rendering do not support I420 but video capture use I420. | 118     // 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. | 119     // 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  Loading... | 
| 177 | 182 | 
| 178 void WebRtcMediaStreamVideoTrack::RemoveSink(MediaStreamVideoSink* sink) { | 183 void WebRtcMediaStreamVideoTrack::RemoveSink(MediaStreamVideoSink* sink) { | 
| 179   DCHECK(thread_checker_.CalledOnValidThread()); | 184   DCHECK(thread_checker_.CalledOnValidThread()); | 
| 180   ScopedVector<WebRtcVideoSinkAdapter>::iterator it = | 185   ScopedVector<WebRtcVideoSinkAdapter>::iterator it = | 
| 181       std::find_if(sinks_.begin(), sinks_.end(), SinkWrapper(sink)); | 186       std::find_if(sinks_.begin(), sinks_.end(), SinkWrapper(sink)); | 
| 182   DCHECK(it != sinks_.end()); | 187   DCHECK(it != sinks_.end()); | 
| 183   sinks_.erase(it); | 188   sinks_.erase(it); | 
| 184 } | 189 } | 
| 185 | 190 | 
| 186 }  // namespace content | 191 }  // namespace content | 
| OLD | NEW | 
|---|