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

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

Issue 213423006: Move conversion from YUV420 to YV12 in WebMediaPlayerMs (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: comments Created 6 years, 9 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 {
11 11
12 // Empty method used for keeping a reference to the original media::VideoFrame
13 // in RTCVideoRenderer::OnVideoFrame if a color conversion between I420 and
14 // YV12 is needed.
15 static void ReleaseOriginalFrame(
16 const scoped_refptr<media::VideoFrame>& frame) {
17 }
18
19 //static 12 //static
20 blink::WebMediaStreamTrack MediaStreamVideoTrack::CreateVideoTrack( 13 blink::WebMediaStreamTrack MediaStreamVideoTrack::CreateVideoTrack(
21 MediaStreamVideoSource* source, 14 MediaStreamVideoSource* source,
22 const blink::WebMediaConstraints& constraints, 15 const blink::WebMediaConstraints& constraints,
23 const MediaStreamVideoSource::ConstraintsCallback& callback, 16 const MediaStreamVideoSource::ConstraintsCallback& callback,
24 bool enabled, 17 bool enabled,
25 MediaStreamDependencyFactory* factory) { 18 MediaStreamDependencyFactory* factory) {
26 blink::WebMediaStreamTrack track; 19 blink::WebMediaStreamTrack track;
27 track.initialize(source->owner()); 20 track.initialize(source->owner());
28 track.setExtraData(new MediaStreamVideoTrack(source, 21 track.setExtraData(new MediaStreamVideoTrack(source,
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 (*it)->OnEnabledChanged(enabled); 94 (*it)->OnEnabledChanged(enabled);
102 } 95 }
103 } 96 }
104 97
105 void MediaStreamVideoTrack::OnVideoFrame( 98 void MediaStreamVideoTrack::OnVideoFrame(
106 const scoped_refptr<media::VideoFrame>& frame) { 99 const scoped_refptr<media::VideoFrame>& frame) {
107 DCHECK(thread_checker_.CalledOnValidThread()); 100 DCHECK(thread_checker_.CalledOnValidThread());
108 if (!enabled_) 101 if (!enabled_)
109 return; 102 return;
110 103
111 scoped_refptr<media::VideoFrame> video_frame = frame;
112 if (frame->format() == media::VideoFrame::I420) {
113 // 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.
115 // To solve that the I420 frame is simply wrapped in an YV12 video frame.
116 // crbug/341452.
117 video_frame = media::VideoFrame::WrapExternalYuvData(
118 media::VideoFrame::YV12,
119 frame->coded_size(),
120 frame->visible_rect(),
121 frame->natural_size(),
122 frame->stride(media::VideoFrame::kYPlane),
123 frame->stride(media::VideoFrame::kUPlane),
124 frame->stride(media::VideoFrame::kVPlane),
125 frame->data(media::VideoFrame::kYPlane),
126 frame->data(media::VideoFrame::kUPlane),
127 frame->data(media::VideoFrame::kVPlane),
128 frame->GetTimestamp(),
129 base::Bind(&ReleaseOriginalFrame, frame));
130 }
131
132 for (std::vector<MediaStreamVideoSink*>::iterator it = sinks_.begin(); 104 for (std::vector<MediaStreamVideoSink*>::iterator it = sinks_.begin();
133 it != sinks_.end(); ++it) { 105 it != sinks_.end(); ++it) {
134 (*it)->OnVideoFrame(video_frame); 106 (*it)->OnVideoFrame(frame);
perkj_chrome 2014/03/27 09:25:39 Note that you will have to talk to the Pepper team
135 } 107 }
136 } 108 }
137 109
138 void MediaStreamVideoTrack::OnReadyStateChanged( 110 void MediaStreamVideoTrack::OnReadyStateChanged(
139 blink::WebMediaStreamSource::ReadyState state) { 111 blink::WebMediaStreamSource::ReadyState state) {
140 DCHECK(thread_checker_.CalledOnValidThread()); 112 DCHECK(thread_checker_.CalledOnValidThread());
141 for (std::vector<MediaStreamVideoSink*>::iterator it = sinks_.begin(); 113 for (std::vector<MediaStreamVideoSink*>::iterator it = sinks_.begin();
142 it != sinks_.end(); ++it) { 114 it != sinks_.end(); ++it) {
143 (*it)->OnReadyStateChanged(state); 115 (*it)->OnReadyStateChanged(state);
144 } 116 }
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
177 149
178 void WebRtcMediaStreamVideoTrack::RemoveSink(MediaStreamVideoSink* sink) { 150 void WebRtcMediaStreamVideoTrack::RemoveSink(MediaStreamVideoSink* sink) {
179 DCHECK(thread_checker_.CalledOnValidThread()); 151 DCHECK(thread_checker_.CalledOnValidThread());
180 ScopedVector<WebRtcVideoSinkAdapter>::iterator it = 152 ScopedVector<WebRtcVideoSinkAdapter>::iterator it =
181 std::find_if(sinks_.begin(), sinks_.end(), SinkWrapper(sink)); 153 std::find_if(sinks_.begin(), sinks_.end(), SinkWrapper(sink));
182 DCHECK(it != sinks_.end()); 154 DCHECK(it != sinks_.end());
183 sinks_.erase(it); 155 sinks_.erase(it);
184 } 156 }
185 157
186 } // namespace content 158 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | content/renderer/media/webmediaplayer_ms.cc » ('j') | content/renderer/media/webmediaplayer_ms.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698