OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/video_capture_module_impl.h" | 5 #include "content/renderer/media/video_capture_module_impl.h" |
6 | 6 |
7 #include "base/atomicops.h" | 7 #include "base/atomicops.h" |
8 #include "base/bind.h" | 8 #include "base/bind.h" |
9 #include "content/renderer/media/video_capture_impl_manager.h" | 9 #include "content/renderer/media/video_capture_impl_manager.h" |
10 | 10 |
11 VideoCaptureModuleImpl::VideoCaptureModuleImpl( | 11 VideoCaptureModuleImpl::VideoCaptureModuleImpl( |
12 const media::VideoCaptureSessionId id, | 12 const media::VideoCaptureSessionId id, |
13 VideoCaptureImplManager* vc_manager) | 13 VideoCaptureImplManager* vc_manager) |
14 : webrtc::videocapturemodule::VideoCaptureImpl(id), | 14 : webrtc::videocapturemodule::VideoCaptureImpl(id), |
15 session_id_(id), | 15 session_id_(id), |
16 thread_("VideoCaptureModuleImpl"), | 16 thread_("VideoCaptureModuleImpl"), |
17 vc_manager_(vc_manager), | 17 vc_manager_(vc_manager), |
18 state_(media::VideoCapture::kStopped), | 18 state_(media::VideoCapture::kStopped), |
19 got_first_frame_(false), | |
20 width_(-1), | 19 width_(-1), |
21 height_(-1), | 20 height_(-1), |
22 frame_rate_(-1), | 21 frame_rate_(-1), |
23 video_type_(webrtc::kVideoI420), | 22 video_type_(webrtc::kVideoI420), |
24 capture_engine_(NULL), | 23 capture_engine_(NULL), |
25 pending_start_(false), | 24 pending_start_(false), |
26 ref_count_(0) { | 25 ref_count_(0) { |
27 DCHECK(vc_manager_); | 26 DCHECK(vc_manager_); |
28 Init(); | 27 Init(); |
29 } | 28 } |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
153 width_ = capability.width; | 152 width_ = capability.width; |
154 height_ = capability.height; | 153 height_ = capability.height; |
155 frame_rate_ = capability.maxFPS; | 154 frame_rate_ = capability.maxFPS; |
156 state_ = media::VideoCapture::kStarted; | 155 state_ = media::VideoCapture::kStarted; |
157 | 156 |
158 media::VideoCapture::VideoCaptureCapability cap; | 157 media::VideoCapture::VideoCaptureCapability cap; |
159 cap.width = capability.width; | 158 cap.width = capability.width; |
160 cap.height = capability.height; | 159 cap.height = capability.height; |
161 cap.max_fps = capability.maxFPS; | 160 cap.max_fps = capability.maxFPS; |
162 cap.raw_type = media::VideoFrame::I420; | 161 cap.raw_type = media::VideoFrame::I420; |
163 cap.resolution_fixed = true; | |
164 capture_engine_->StartCapture(this, cap); | 162 capture_engine_->StartCapture(this, cap); |
165 } | 163 } |
166 | 164 |
167 void VideoCaptureModuleImpl::StopCaptureOnCaptureThread() { | 165 void VideoCaptureModuleImpl::StopCaptureOnCaptureThread() { |
168 DCHECK(message_loop_proxy_->BelongsToCurrentThread()); | 166 DCHECK(message_loop_proxy_->BelongsToCurrentThread()); |
169 | 167 |
170 if (pending_start_) { | 168 if (pending_start_) { |
171 VLOG(1) << "Got a StopCapture with one pending start!!! "; | 169 VLOG(1) << "Got a StopCapture with one pending start!!! "; |
172 pending_start_ = false; | 170 pending_start_ = false; |
173 return; | 171 return; |
(...skipping 10 matching lines...) Expand all Loading... |
184 capture_engine_->StopCapture(this); | 182 capture_engine_->StopCapture(this); |
185 return; | 183 return; |
186 } | 184 } |
187 | 185 |
188 void VideoCaptureModuleImpl::OnStoppedOnCaptureThread( | 186 void VideoCaptureModuleImpl::OnStoppedOnCaptureThread( |
189 media::VideoCapture* capture) { | 187 media::VideoCapture* capture) { |
190 DCHECK(message_loop_proxy_->BelongsToCurrentThread()); | 188 DCHECK(message_loop_proxy_->BelongsToCurrentThread()); |
191 | 189 |
192 VLOG(1) << "Capture Stopped!!! "; | 190 VLOG(1) << "Capture Stopped!!! "; |
193 state_ = media::VideoCapture::kStopped; | 191 state_ = media::VideoCapture::kStopped; |
194 got_first_frame_ = false; | |
195 width_ = -1; | 192 width_ = -1; |
196 height_ = -1; | 193 height_ = -1; |
197 frame_rate_ = -1; | 194 frame_rate_ = -1; |
198 | 195 |
199 if (pending_start_) { | 196 if (pending_start_) { |
200 VLOG(1) << "restart pending start "; | 197 VLOG(1) << "restart pending start "; |
201 pending_start_ = false; | 198 pending_start_ = false; |
202 StartCaptureInternal(pending_cap_); | 199 StartCaptureInternal(pending_cap_); |
203 } | 200 } |
204 } | 201 } |
205 | 202 |
206 void VideoCaptureModuleImpl::OnBufferReadyOnCaptureThread( | 203 void VideoCaptureModuleImpl::OnBufferReadyOnCaptureThread( |
207 media::VideoCapture* capture, | 204 media::VideoCapture* capture, |
208 scoped_refptr<media::VideoCapture::VideoFrameBuffer> buf) { | 205 scoped_refptr<media::VideoCapture::VideoFrameBuffer> buf) { |
209 DCHECK(message_loop_proxy_->BelongsToCurrentThread()); | 206 DCHECK(message_loop_proxy_->BelongsToCurrentThread()); |
210 | 207 |
211 if (state_ != media::VideoCapture::kStarted) | 208 if (state_ != media::VideoCapture::kStarted) |
212 return; | 209 return; |
213 | 210 |
214 if (!got_first_frame_) { | |
215 got_first_frame_ = true; | |
216 start_time_ = buf->timestamp; | |
217 } | |
218 | |
219 frameInfo_.width = buf->width; | 211 frameInfo_.width = buf->width; |
220 frameInfo_.height = buf->height; | 212 frameInfo_.height = buf->height; |
221 frameInfo_.rawType = video_type_; | 213 frameInfo_.rawType = video_type_; |
222 | 214 |
223 IncomingFrame( | 215 IncomingFrame( |
224 static_cast<WebRtc_UWord8*>(buf->memory_pointer), | 216 static_cast<WebRtc_UWord8*>(buf->memory_pointer), |
225 static_cast<WebRtc_Word32>(buf->buffer_size), | 217 static_cast<WebRtc_Word32>(buf->buffer_size), |
226 frameInfo_, | 218 frameInfo_, |
227 static_cast<WebRtc_Word64>( | 219 static_cast<WebRtc_Word64>( |
228 (buf->timestamp - start_time_).InMicroseconds())); | 220 (buf->timestamp - start_time_).InMicroseconds())); |
229 | 221 |
230 capture->FeedBuffer(buf); | 222 capture->FeedBuffer(buf); |
231 } | 223 } |
OLD | NEW |