OLD | NEW |
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/bind.h" | 7 #include "base/bind.h" |
8 #include "base/debug/trace_event.h" | 8 #include "base/debug/trace_event.h" |
9 #include "base/location.h" | 9 #include "base/location.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 19 matching lines...) Expand all Loading... |
30 video_track_(video_track) { | 30 video_track_(video_track) { |
31 } | 31 } |
32 | 32 |
33 RTCVideoRenderer::~RTCVideoRenderer() { | 33 RTCVideoRenderer::~RTCVideoRenderer() { |
34 } | 34 } |
35 | 35 |
36 void RTCVideoRenderer::Start() { | 36 void RTCVideoRenderer::Start() { |
37 DCHECK(message_loop_proxy_->BelongsToCurrentThread()); | 37 DCHECK(message_loop_proxy_->BelongsToCurrentThread()); |
38 DCHECK_EQ(state_, kStopped); | 38 DCHECK_EQ(state_, kStopped); |
39 | 39 |
40 if (video_track_) { | 40 if (video_track_.get()) { |
41 video_track_->AddRenderer(this); | 41 video_track_->AddRenderer(this); |
42 video_track_->RegisterObserver(this); | 42 video_track_->RegisterObserver(this); |
43 } | 43 } |
44 state_ = kStarted; | 44 state_ = kStarted; |
45 MaybeRenderSignalingFrame(); | 45 MaybeRenderSignalingFrame(); |
46 } | 46 } |
47 | 47 |
48 void RTCVideoRenderer::Stop() { | 48 void RTCVideoRenderer::Stop() { |
49 DCHECK(message_loop_proxy_->BelongsToCurrentThread()); | 49 DCHECK(message_loop_proxy_->BelongsToCurrentThread()); |
50 if (video_track_) { | 50 if (video_track_.get()) { |
51 state_ = kStopped; | 51 state_ = kStopped; |
52 video_track_->RemoveRenderer(this); | 52 video_track_->RemoveRenderer(this); |
53 video_track_->UnregisterObserver(this); | 53 video_track_->UnregisterObserver(this); |
54 video_track_ = NULL; | 54 video_track_ = NULL; |
55 } | 55 } |
56 } | 56 } |
57 | 57 |
58 void RTCVideoRenderer::Play() { | 58 void RTCVideoRenderer::Play() { |
59 DCHECK(message_loop_proxy_->BelongsToCurrentThread()); | 59 DCHECK(message_loop_proxy_->BelongsToCurrentThread()); |
60 if (video_track_ && state_ == kPaused) { | 60 if (video_track_.get() && state_ == kPaused) { |
61 state_ = kStarted; | 61 state_ = kStarted; |
62 } | 62 } |
63 } | 63 } |
64 | 64 |
65 void RTCVideoRenderer::Pause() { | 65 void RTCVideoRenderer::Pause() { |
66 DCHECK(message_loop_proxy_->BelongsToCurrentThread()); | 66 DCHECK(message_loop_proxy_->BelongsToCurrentThread()); |
67 if (video_track_ && state_ == kStarted) { | 67 if (video_track_.get() && state_ == kStarted) { |
68 state_ = kPaused; | 68 state_ = kPaused; |
69 } | 69 } |
70 } | 70 } |
71 | 71 |
72 void RTCVideoRenderer::SetSize(int width, int height) { | 72 void RTCVideoRenderer::SetSize(int width, int height) { |
73 } | 73 } |
74 | 74 |
75 void RTCVideoRenderer::RenderFrame(const cricket::VideoFrame* frame) { | 75 void RTCVideoRenderer::RenderFrame(const cricket::VideoFrame* frame) { |
76 base::TimeDelta timestamp = base::TimeDelta::FromMilliseconds( | 76 base::TimeDelta timestamp = base::TimeDelta::FromMilliseconds( |
77 frame->GetTimeStamp() / talk_base::kNumNanosecsPerMillisec); | 77 frame->GetTimeStamp() / talk_base::kNumNanosecsPerMillisec); |
(...skipping 13 matching lines...) Expand all Loading... |
91 gfx::Rect(size), | 91 gfx::Rect(size), |
92 size, | 92 size, |
93 timestamp); | 93 timestamp); |
94 | 94 |
95 // Aspect ratio unsupported; DCHECK when there are non-square pixels. | 95 // Aspect ratio unsupported; DCHECK when there are non-square pixels. |
96 DCHECK_EQ(frame->GetPixelWidth(), 1u); | 96 DCHECK_EQ(frame->GetPixelWidth(), 1u); |
97 DCHECK_EQ(frame->GetPixelHeight(), 1u); | 97 DCHECK_EQ(frame->GetPixelHeight(), 1u); |
98 | 98 |
99 int y_rows = frame->GetHeight(); | 99 int y_rows = frame->GetHeight(); |
100 int uv_rows = frame->GetHeight() / 2; // YV12 format. | 100 int uv_rows = frame->GetHeight() / 2; // YV12 format. |
101 CopyYPlane(frame->GetYPlane(), frame->GetYPitch(), y_rows, video_frame); | 101 CopyYPlane(frame->GetYPlane(), frame->GetYPitch(), y_rows, video_frame.get()); |
102 CopyUPlane(frame->GetUPlane(), frame->GetUPitch(), uv_rows, video_frame); | 102 CopyUPlane( |
103 CopyVPlane(frame->GetVPlane(), frame->GetVPitch(), uv_rows, video_frame); | 103 frame->GetUPlane(), frame->GetUPitch(), uv_rows, video_frame.get()); |
| 104 CopyVPlane( |
| 105 frame->GetVPlane(), frame->GetVPitch(), uv_rows, video_frame.get()); |
104 | 106 |
105 message_loop_proxy_->PostTask( | 107 message_loop_proxy_->PostTask( |
106 FROM_HERE, base::Bind(&RTCVideoRenderer::DoRenderFrameOnMainThread, | 108 FROM_HERE, base::Bind(&RTCVideoRenderer::DoRenderFrameOnMainThread, |
107 this, video_frame)); | 109 this, video_frame)); |
108 } | 110 } |
109 | 111 |
110 void RTCVideoRenderer::OnChanged() { | 112 void RTCVideoRenderer::OnChanged() { |
111 DCHECK(message_loop_proxy_->BelongsToCurrentThread()); | 113 DCHECK(message_loop_proxy_->BelongsToCurrentThread()); |
112 MaybeRenderSignalingFrame(); | 114 MaybeRenderSignalingFrame(); |
113 } | 115 } |
(...skipping 17 matching lines...) Expand all Loading... |
131 | 133 |
132 if (state_ != kStarted) { | 134 if (state_ != kStarted) { |
133 return; | 135 return; |
134 } | 136 } |
135 | 137 |
136 TRACE_EVENT0("video", "DoRenderFrameOnMainThread"); | 138 TRACE_EVENT0("video", "DoRenderFrameOnMainThread"); |
137 repaint_cb_.Run(video_frame); | 139 repaint_cb_.Run(video_frame); |
138 } | 140 } |
139 | 141 |
140 } // namespace content | 142 } // namespace content |
OLD | NEW |