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

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: More cleanup. 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 // Reviewers ? Do you know a better way than to add this noop method?
Jói 2014/02/28 14:52:50 You can use base::DoNothing (which is void DoNothi
perkj_chrome 2014/03/02 09:20:44 After discussion- this is needed to addref and rel
15 static void ReleaseOriginalFrame(const scoped_refptr<media::VideoFrame>& frame) {
16
17 }
18
14 RTCVideoRenderer::RTCVideoRenderer( 19 RTCVideoRenderer::RTCVideoRenderer(
15 const blink::WebMediaStreamTrack& video_track, 20 const blink::WebMediaStreamTrack& video_track,
16 const base::Closure& error_cb, 21 const base::Closure& error_cb,
17 const RepaintCB& repaint_cb) 22 const RepaintCB& repaint_cb)
18 : error_cb_(error_cb), 23 : error_cb_(error_cb),
19 repaint_cb_(repaint_cb), 24 repaint_cb_(repaint_cb),
20 message_loop_proxy_(base::MessageLoopProxy::current()), 25 message_loop_proxy_(base::MessageLoopProxy::current()),
21 state_(STOPPED), 26 state_(STOPPED),
22 first_frame_rendered_(false), 27 first_frame_rendered_(false),
23 video_track_(video_track) { 28 video_track_(video_track) {
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 DCHECK(message_loop_proxy_->BelongsToCurrentThread()); 86 DCHECK(message_loop_proxy_->BelongsToCurrentThread());
82 if (state_ != STARTED) { 87 if (state_ != STARTED) {
83 return; 88 return;
84 } 89 }
85 90
86 TRACE_EVENT_INSTANT1("rtc_video_renderer", 91 TRACE_EVENT_INSTANT1("rtc_video_renderer",
87 "OnVideoFrame", 92 "OnVideoFrame",
88 TRACE_EVENT_SCOPE_THREAD, 93 TRACE_EVENT_SCOPE_THREAD,
89 "timestamp", 94 "timestamp",
90 frame->GetTimestamp().InMilliseconds()); 95 frame->GetTimestamp().InMilliseconds());
91 repaint_cb_.Run(frame);
92 first_frame_rendered_ = true; 96 first_frame_rendered_ = true;
97
98 if (frame->format() == media::VideoFrame::I420) {
99 scoped_refptr<media::VideoFrame> yuv_frame =
100 media::VideoFrame::WrapExternalYuvData(
101 media::VideoFrame::YV12,
102 frame->coded_size(),
103 frame->visible_rect(),
104 frame->natural_size(),
105 frame->stride(media::VideoFrame::kYPlane),
106 frame->stride(media::VideoFrame::kUPlane),
107 frame->stride(media::VideoFrame::kVPlane),
108 frame->data(media::VideoFrame::kYPlane),
109 frame->data(media::VideoFrame::kUPlane),
110 frame->data(media::VideoFrame::kVPlane),
111 frame->GetTimestamp(),
112 // Can this be done without the function? Ie all I want is to add a refence and remove the reference once this callback is triggered.
113 base::Bind(&ReleaseOriginalFrame, frame));
Alpha Left Google 2014/02/28 02:49:22 I'm not sure if this is correct. Does this callba
Jói 2014/02/28 14:52:50 You've bound both parameters so this wouldn't work
Jói 2014/02/28 15:46:10 My mistake, I was assuming the WrapExternalYuvData
perkj_chrome 2014/03/02 09:20:44 Done.
114 repaint_cb_.Run(yuv_frame);
115 } else {
116 repaint_cb_.Run(frame);
Alpha Left Google 2014/02/28 02:49:22 nit: What about: if (frame->format() != media::Vi
perkj_chrome 2014/03/02 09:20:44 Done.
117 }
93 } 118 }
94 119
95 void RTCVideoRenderer::MaybeRenderSignalingFrame() { 120 void RTCVideoRenderer::MaybeRenderSignalingFrame() {
96 // Render a small black frame if no frame has been rendered. 121 // 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 122 // 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. 123 // a MediaStream video track that has been rejected, ended or disabled.
99 if (first_frame_rendered_) 124 if (first_frame_rendered_)
100 return; 125 return;
101 126
102 const int kMinFrameSize = 2; 127 const int kMinFrameSize = 2;
103 const gfx::Size size(kMinFrameSize, kMinFrameSize); 128 const gfx::Size size(kMinFrameSize, kMinFrameSize);
104 scoped_refptr<media::VideoFrame> video_frame = 129 scoped_refptr<media::VideoFrame> video_frame =
105 media::VideoFrame::CreateBlackFrame(size); 130 media::VideoFrame::CreateBlackFrame(size);
106 OnVideoFrame(video_frame); 131 OnVideoFrame(video_frame);
107 } 132 }
108 133
109 } // namespace content 134 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698