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

Side by Side Diff: media/capture/video/fake_video_capture_device.cc

Issue 1685713003: Remove V4L2CaptureDelegate{Single,Multi}Plane, VCD::Client::OnIncomingCapturedYuvData() (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: perkj@ comments and reverted change to WeakPtr Created 4 years, 10 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
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 "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 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 const int frame_count = elapsed_time.InMilliseconds() * frame_rate / 1000; 66 const int frame_count = elapsed_time.InMilliseconds() * frame_rate / 1000;
67 67
68 const std::string time_string = 68 const std::string time_string =
69 base::StringPrintf("%d:%02d:%02d:%03d %d", hours, minutes, seconds, 69 base::StringPrintf("%d:%02d:%02d:%03d %d", hours, minutes, seconds,
70 milliseconds, frame_count); 70 milliseconds, frame_count);
71 canvas.scale(3, 3); 71 canvas.scale(3, 3);
72 canvas.drawText(time_string.data(), time_string.length(), 30, 20, paint); 72 canvas.drawText(time_string.data(), time_string.length(), 30, 20, paint);
73 } 73 }
74 74
75 FakeVideoCaptureDevice::FakeVideoCaptureDevice(BufferOwnership buffer_ownership, 75 FakeVideoCaptureDevice::FakeVideoCaptureDevice(BufferOwnership buffer_ownership,
76 BufferPlanarity planarity,
77 float fake_capture_rate) 76 float fake_capture_rate)
78 : buffer_ownership_(buffer_ownership), 77 : buffer_ownership_(buffer_ownership),
79 planarity_(planarity),
80 fake_capture_rate_(fake_capture_rate), 78 fake_capture_rate_(fake_capture_rate),
81 weak_factory_(this) {} 79 weak_factory_(this) {}
82 80
83 FakeVideoCaptureDevice::~FakeVideoCaptureDevice() { 81 FakeVideoCaptureDevice::~FakeVideoCaptureDevice() {
84 DCHECK(thread_checker_.CalledOnValidThread()); 82 DCHECK(thread_checker_.CalledOnValidThread());
85 } 83 }
86 84
87 void FakeVideoCaptureDevice::AllocateAndStart( 85 void FakeVideoCaptureDevice::AllocateAndStart(
88 const VideoCaptureParams& params, 86 const VideoCaptureParams& params,
89 scoped_ptr<VideoCaptureDevice::Client> client) { 87 scoped_ptr<VideoCaptureDevice::Client> client) {
90 DCHECK(thread_checker_.CalledOnValidThread()); 88 DCHECK(thread_checker_.CalledOnValidThread());
91 89
92 client_ = std::move(client); 90 client_ = std::move(client);
93 91
94 // Incoming |params| can be none of the supported formats, so we get the 92 // Incoming |params| can be none of the supported formats, so we get the
95 // closest thing rounded up. TODO(mcasas): Use the |params|, if they belong to 93 // closest thing rounded up. TODO(mcasas): Use the |params|, if they belong to
96 // the supported ones, when http://crbug.com/309554 is verified. 94 // the supported ones, when http://crbug.com/309554 is verified.
97 capture_format_.frame_rate = fake_capture_rate_; 95 capture_format_.frame_rate = fake_capture_rate_;
98 if (params.requested_format.frame_size.width() > 1280) 96 if (params.requested_format.frame_size.width() > 1280)
99 capture_format_.frame_size.SetSize(1920, 1080); 97 capture_format_.frame_size.SetSize(1920, 1080);
100 else if (params.requested_format.frame_size.width() > 640) 98 else if (params.requested_format.frame_size.width() > 640)
101 capture_format_.frame_size.SetSize(1280, 720); 99 capture_format_.frame_size.SetSize(1280, 720);
102 else if (params.requested_format.frame_size.width() > 320) 100 else if (params.requested_format.frame_size.width() > 320)
103 capture_format_.frame_size.SetSize(640, 480); 101 capture_format_.frame_size.SetSize(640, 480);
104 else 102 else
105 capture_format_.frame_size.SetSize(320, 240); 103 capture_format_.frame_size.SetSize(320, 240);
106 104
107 if (buffer_ownership_ == BufferOwnership::CLIENT_BUFFERS) { 105 if (buffer_ownership_ == BufferOwnership::CLIENT_BUFFERS) {
108 if (planarity_ == BufferPlanarity::PACKED) { 106 capture_format_.pixel_storage = PIXEL_STORAGE_CPU;
109 capture_format_.pixel_storage = PIXEL_STORAGE_CPU; 107 capture_format_.pixel_format = PIXEL_FORMAT_ARGB;
110 capture_format_.pixel_format = PIXEL_FORMAT_ARGB; 108 DVLOG(1) << "starting with client argb buffers";
111 DVLOG(1) << "starting with client argb buffers";
112 } else if (planarity_ == BufferPlanarity::TRIPLANAR) {
113 capture_format_.pixel_storage = PIXEL_STORAGE_GPUMEMORYBUFFER;
114 capture_format_.pixel_format = PIXEL_FORMAT_I420;
115 DVLOG(1) << "starting with gmb I420 buffers";
116 }
117 } else if (buffer_ownership_ == BufferOwnership::OWN_BUFFERS) { 109 } else if (buffer_ownership_ == BufferOwnership::OWN_BUFFERS) {
118 capture_format_.pixel_storage = PIXEL_STORAGE_CPU; 110 capture_format_.pixel_storage = PIXEL_STORAGE_CPU;
119 capture_format_.pixel_format = PIXEL_FORMAT_I420; 111 capture_format_.pixel_format = PIXEL_FORMAT_I420;
120 DVLOG(1) << "starting with own I420 buffers"; 112 DVLOG(1) << "starting with own I420 buffers";
121 } 113 }
122 114
123 if (capture_format_.pixel_format == PIXEL_FORMAT_I420) { 115 if (capture_format_.pixel_format == PIXEL_FORMAT_I420) {
124 fake_frame_.reset(new uint8_t[VideoFrame::AllocationSize( 116 fake_frame_.reset(new uint8_t[VideoFrame::AllocationSize(
125 PIXEL_FORMAT_I420, capture_format_.frame_size)]); 117 PIXEL_FORMAT_I420, capture_format_.frame_size)]);
126 } 118 }
(...skipping 21 matching lines...) Expand all
148 void FakeVideoCaptureDevice::CaptureUsingOwnBuffers( 140 void FakeVideoCaptureDevice::CaptureUsingOwnBuffers(
149 base::TimeTicks expected_execution_time) { 141 base::TimeTicks expected_execution_time) {
150 DCHECK(thread_checker_.CalledOnValidThread()); 142 DCHECK(thread_checker_.CalledOnValidThread());
151 const size_t frame_size = capture_format_.ImageAllocationSize(); 143 const size_t frame_size = capture_format_.ImageAllocationSize();
152 memset(fake_frame_.get(), 0, frame_size); 144 memset(fake_frame_.get(), 0, frame_size);
153 145
154 DrawPacman(false /* use_argb */, fake_frame_.get(), elapsed_time_, 146 DrawPacman(false /* use_argb */, fake_frame_.get(), elapsed_time_,
155 fake_capture_rate_, capture_format_.frame_size); 147 fake_capture_rate_, capture_format_.frame_size);
156 148
157 // Give the captured frame to the client. 149 // Give the captured frame to the client.
158 if (planarity_ == BufferPlanarity::PACKED) { 150 client_->OnIncomingCapturedData(fake_frame_.get(), frame_size,
159 client_->OnIncomingCapturedData(fake_frame_.get(), frame_size, 151 capture_format_, 0 /* rotation */,
160 capture_format_, 0 /* rotation */, 152 base::TimeTicks::Now());
161 base::TimeTicks::Now());
162 } else if (planarity_ == BufferPlanarity::TRIPLANAR) {
163 client_->OnIncomingCapturedYuvData(
164 fake_frame_.get(),
165 fake_frame_.get() + capture_format_.frame_size.GetArea(),
166 fake_frame_.get() + capture_format_.frame_size.GetArea() * 5 / 4,
167 capture_format_.frame_size.width(),
168 capture_format_.frame_size.width() / 2,
169 capture_format_.frame_size.width() / 2, capture_format_,
170 0 /* rotation */, base::TimeTicks::Now());
171 }
172 BeepAndScheduleNextCapture( 153 BeepAndScheduleNextCapture(
173 expected_execution_time, 154 expected_execution_time,
174 base::Bind(&FakeVideoCaptureDevice::CaptureUsingOwnBuffers, 155 base::Bind(&FakeVideoCaptureDevice::CaptureUsingOwnBuffers,
175 weak_factory_.GetWeakPtr())); 156 weak_factory_.GetWeakPtr()));
176 } 157 }
177 158
178 void FakeVideoCaptureDevice::CaptureUsingClientBuffers( 159 void FakeVideoCaptureDevice::CaptureUsingClientBuffers(
179 base::TimeTicks expected_execution_time) { 160 base::TimeTicks expected_execution_time) {
180 DCHECK(thread_checker_.CalledOnValidThread()); 161 DCHECK(thread_checker_.CalledOnValidThread());
181 162
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
244 // Don't accumulate any debt if we are lagging behind - just post the next 225 // Don't accumulate any debt if we are lagging behind - just post the next
245 // frame immediately and continue as normal. 226 // frame immediately and continue as normal.
246 const base::TimeTicks next_execution_time = 227 const base::TimeTicks next_execution_time =
247 std::max(current_time, expected_execution_time + frame_interval); 228 std::max(current_time, expected_execution_time + frame_interval);
248 const base::TimeDelta delay = next_execution_time - current_time; 229 const base::TimeDelta delay = next_execution_time - current_time;
249 base::MessageLoop::current()->PostDelayedTask( 230 base::MessageLoop::current()->PostDelayedTask(
250 FROM_HERE, base::Bind(next_capture, next_execution_time), delay); 231 FROM_HERE, base::Bind(next_capture, next_execution_time), delay);
251 } 232 }
252 233
253 } // namespace media 234 } // namespace media
OLDNEW
« no previous file with comments | « media/capture/video/fake_video_capture_device.h ('k') | media/capture/video/fake_video_capture_device_factory.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698