| 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 "media/capture/video/fake_video_capture_device.h" | 5 #include "media/capture/video/fake_video_capture_device.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <algorithm> | 8 #include <algorithm> |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 180 const size_t frame_size = capture_format_.ImageAllocationSize(); | 180 const size_t frame_size = capture_format_.ImageAllocationSize(); |
| 181 memset(fake_frame_.get(), 0, frame_size); | 181 memset(fake_frame_.get(), 0, frame_size); |
| 182 | 182 |
| 183 DrawPacman(false /* use_argb */, fake_frame_.get(), elapsed_time_, | 183 DrawPacman(false /* use_argb */, fake_frame_.get(), elapsed_time_, |
| 184 fake_capture_rate_, capture_format_.frame_size); | 184 fake_capture_rate_, capture_format_.frame_size); |
| 185 | 185 |
| 186 // Give the captured frame to the client. | 186 // Give the captured frame to the client. |
| 187 base::TimeTicks now = base::TimeTicks::Now(); | 187 base::TimeTicks now = base::TimeTicks::Now(); |
| 188 if (first_ref_time_.is_null()) | 188 if (first_ref_time_.is_null()) |
| 189 first_ref_time_ = now; | 189 first_ref_time_ = now; |
| 190 client_->OnIncomingCapturedData( | 190 client_->OnIncomingCapturedData(fake_frame_.get(), frame_size, |
| 191 fake_frame_.get(), static_cast<int>(frame_size), capture_format_, | 191 capture_format_, 0 /* rotation */, now, |
| 192 0u /* rotation */, now, now - first_ref_time_); | 192 now - first_ref_time_); |
| 193 BeepAndScheduleNextCapture( | 193 BeepAndScheduleNextCapture( |
| 194 expected_execution_time, | 194 expected_execution_time, |
| 195 base::Bind(&FakeVideoCaptureDevice::CaptureUsingOwnBuffers, | 195 base::Bind(&FakeVideoCaptureDevice::CaptureUsingOwnBuffers, |
| 196 weak_factory_.GetWeakPtr())); | 196 weak_factory_.GetWeakPtr())); |
| 197 } | 197 } |
| 198 | 198 |
| 199 void FakeVideoCaptureDevice::CaptureUsingClientBuffers( | 199 void FakeVideoCaptureDevice::CaptureUsingClientBuffers( |
| 200 base::TimeTicks expected_execution_time) { | 200 base::TimeTicks expected_execution_time) { |
| 201 DCHECK(thread_checker_.CalledOnValidThread()); | 201 DCHECK(thread_checker_.CalledOnValidThread()); |
| 202 | 202 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 215 DrawPacman(false /* use_argb */, fake_frame_.get(), elapsed_time_, | 215 DrawPacman(false /* use_argb */, fake_frame_.get(), elapsed_time_, |
| 216 fake_capture_rate_, capture_format_.frame_size); | 216 fake_capture_rate_, capture_format_.frame_size); |
| 217 | 217 |
| 218 // Copy data from |fake_frame_| into the reserved planes of GpuMemoryBuffer. | 218 // Copy data from |fake_frame_| into the reserved planes of GpuMemoryBuffer. |
| 219 size_t offset = 0; | 219 size_t offset = 0; |
| 220 for (size_t i = 0; i < VideoFrame::NumPlanes(PIXEL_FORMAT_I420); ++i) { | 220 for (size_t i = 0; i < VideoFrame::NumPlanes(PIXEL_FORMAT_I420); ++i) { |
| 221 const size_t plane_size = | 221 const size_t plane_size = |
| 222 VideoFrame::PlaneSize(PIXEL_FORMAT_I420, i, | 222 VideoFrame::PlaneSize(PIXEL_FORMAT_I420, i, |
| 223 capture_format_.frame_size) | 223 capture_format_.frame_size) |
| 224 .GetArea(); | 224 .GetArea(); |
| 225 memcpy(capture_buffer->data(i), fake_frame_.get() + offset, | 225 memcpy(capture_buffer->data(i), fake_frame_.get() + offset, plane_size); |
| 226 static_cast<int>(plane_size)); | |
| 227 offset += plane_size; | 226 offset += plane_size; |
| 228 } | 227 } |
| 229 } else { | 228 } else { |
| 230 DCHECK_EQ(capture_format_.pixel_storage, PIXEL_STORAGE_CPU); | 229 DCHECK_EQ(capture_format_.pixel_storage, PIXEL_STORAGE_CPU); |
| 231 DCHECK_EQ(capture_format_.pixel_format, PIXEL_FORMAT_ARGB); | 230 DCHECK_EQ(capture_format_.pixel_format, PIXEL_FORMAT_ARGB); |
| 232 uint8_t* data_ptr = static_cast<uint8_t*>(capture_buffer->data()); | 231 uint8_t* data_ptr = static_cast<uint8_t*>(capture_buffer->data()); |
| 233 memset(data_ptr, 0, capture_buffer->mapped_size()); | 232 memset(data_ptr, 0, capture_buffer->mapped_size()); |
| 234 DrawPacman(true /* use_argb */, data_ptr, elapsed_time_, fake_capture_rate_, | 233 DrawPacman(true /* use_argb */, data_ptr, elapsed_time_, fake_capture_rate_, |
| 235 capture_format_.frame_size); | 234 capture_format_.frame_size); |
| 236 } | 235 } |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 269 // Don't accumulate any debt if we are lagging behind - just post the next | 268 // Don't accumulate any debt if we are lagging behind - just post the next |
| 270 // frame immediately and continue as normal. | 269 // frame immediately and continue as normal. |
| 271 const base::TimeTicks next_execution_time = | 270 const base::TimeTicks next_execution_time = |
| 272 std::max(current_time, expected_execution_time + frame_interval); | 271 std::max(current_time, expected_execution_time + frame_interval); |
| 273 const base::TimeDelta delay = next_execution_time - current_time; | 272 const base::TimeDelta delay = next_execution_time - current_time; |
| 274 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( | 273 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( |
| 275 FROM_HERE, base::Bind(next_capture, next_execution_time), delay); | 274 FROM_HERE, base::Bind(next_capture, next_execution_time), delay); |
| 276 } | 275 } |
| 277 | 276 |
| 278 } // namespace media | 277 } // namespace media |
| OLD | NEW |