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

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

Issue 155853002: Chrome MediaStream VideoTrack implementation. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed a comment. 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/rtc_video_renderer.h" 5 #include "content/renderer/media/rtc_video_renderer.h"
6 6
7 #include "base/debug/trace_event.h" 7 #include "base/debug/trace_event.h"
8 #include "base/message_loop/message_loop_proxy.h" 8 #include "base/message_loop/message_loop_proxy.h"
9 #include "media/base/video_frame.h" 9 #include "media/base/video_frame.h"
10 #include "media/base/video_util.h" 10 #include "media/base/video_util.h"
11 11
12 namespace content { 12 namespace content {
13 13
14 // Empty method used for keeping a reference to the original media::VideoFrame
15 // in RTCVideoRenderer::OnVideoFrame if a color conversion between I420 and
16 // YV12 is needed.
17 static void ReleaseOriginalFrame(
18 const scoped_refptr<media::VideoFrame>& frame) {
19 }
20
14 RTCVideoRenderer::RTCVideoRenderer( 21 RTCVideoRenderer::RTCVideoRenderer(
15 const blink::WebMediaStreamTrack& video_track, 22 const blink::WebMediaStreamTrack& video_track,
16 const base::Closure& error_cb, 23 const base::Closure& error_cb,
17 const RepaintCB& repaint_cb) 24 const RepaintCB& repaint_cb)
18 : error_cb_(error_cb), 25 : error_cb_(error_cb),
19 repaint_cb_(repaint_cb), 26 repaint_cb_(repaint_cb),
20 message_loop_proxy_(base::MessageLoopProxy::current()), 27 message_loop_proxy_(base::MessageLoopProxy::current()),
21 state_(STOPPED), 28 state_(STOPPED),
22 first_frame_rendered_(false), 29 first_frame_rendered_(false),
23 video_track_(video_track) { 30 video_track_(video_track) {
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 DCHECK(message_loop_proxy_->BelongsToCurrentThread()); 88 DCHECK(message_loop_proxy_->BelongsToCurrentThread());
82 if (state_ != STARTED) { 89 if (state_ != STARTED) {
83 return; 90 return;
84 } 91 }
85 92
86 TRACE_EVENT_INSTANT1("rtc_video_renderer", 93 TRACE_EVENT_INSTANT1("rtc_video_renderer",
87 "OnVideoFrame", 94 "OnVideoFrame",
88 TRACE_EVENT_SCOPE_THREAD, 95 TRACE_EVENT_SCOPE_THREAD,
89 "timestamp", 96 "timestamp",
90 frame->GetTimestamp().InMilliseconds()); 97 frame->GetTimestamp().InMilliseconds());
91 repaint_cb_.Run(frame);
92 first_frame_rendered_ = true; 98 first_frame_rendered_ = true;
99
100 if (frame->format() != media::VideoFrame::I420) {
101 repaint_cb_.Run(frame);
Ronghua Wu (Left Chromium) 2014/03/04 01:04:11 what formats are expected here? It seems YV12 wil
perkj_chrome 2014/03/04 10:44:51 That is correct. We need to special handle I420. S
102 return;
103 }
104
105 scoped_refptr<media::VideoFrame> yuv_frame =
Alpha Left Google 2014/03/03 06:45:04 A comment would help to explain what this is doing
perkj_chrome 2014/03/04 10:44:51 Done.
106 media::VideoFrame::WrapExternalYuvData(
107 media::VideoFrame::YV12,
108 frame->coded_size(),
109 frame->visible_rect(),
110 frame->natural_size(),
111 frame->stride(media::VideoFrame::kYPlane),
112 frame->stride(media::VideoFrame::kUPlane),
113 frame->stride(media::VideoFrame::kVPlane),
114 frame->data(media::VideoFrame::kYPlane),
115 frame->data(media::VideoFrame::kUPlane),
116 frame->data(media::VideoFrame::kVPlane),
117 frame->GetTimestamp(),
118 base::Bind(&ReleaseOriginalFrame, frame));
119 repaint_cb_.Run(yuv_frame);
93 } 120 }
94 121
95 void RTCVideoRenderer::MaybeRenderSignalingFrame() { 122 void RTCVideoRenderer::MaybeRenderSignalingFrame() {
96 // Render a small black frame if no frame has been rendered. 123 // Render a small black frame if no frame has been rendered.
97 // This is necessary to make sure audio can play if the video tag src is 124 // This is necessary to make sure audio can play if the video tag src is
98 // a MediaStream video track that has been rejected, ended or disabled. 125 // a MediaStream video track that has been rejected, ended or disabled.
99 if (first_frame_rendered_) 126 if (first_frame_rendered_)
100 return; 127 return;
101 128
102 const int kMinFrameSize = 2; 129 const int kMinFrameSize = 2;
103 const gfx::Size size(kMinFrameSize, kMinFrameSize); 130 const gfx::Size size(kMinFrameSize, kMinFrameSize);
104 scoped_refptr<media::VideoFrame> video_frame = 131 scoped_refptr<media::VideoFrame> video_frame =
105 media::VideoFrame::CreateBlackFrame(size); 132 media::VideoFrame::CreateBlackFrame(size);
106 OnVideoFrame(video_frame); 133 OnVideoFrame(video_frame);
107 } 134 }
108 135
109 } // namespace content 136 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698