OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/content/thread_safe_capture_oracle.h" | 5 #include "media/capture/content/thread_safe_capture_oracle.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include <memory> | 9 #include <memory> |
10 #include <utility> | 10 #include <utility> |
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
161 const base::TimeTicks refresh_time = base::TimeTicks::Now(); | 161 const base::TimeTicks refresh_time = base::TimeTicks::Now(); |
162 | 162 |
163 scoped_refptr<VideoFrame> frame; | 163 scoped_refptr<VideoFrame> frame; |
164 CaptureFrameCallback capture_callback; | 164 CaptureFrameCallback capture_callback; |
165 if (!ObserveEventAndDecideCapture(VideoCaptureOracle::kPassiveRefreshRequest, | 165 if (!ObserveEventAndDecideCapture(VideoCaptureOracle::kPassiveRefreshRequest, |
166 gfx::Rect(), refresh_time, &frame, | 166 gfx::Rect(), refresh_time, &frame, |
167 &capture_callback)) { | 167 &capture_callback)) { |
168 return false; | 168 return false; |
169 } | 169 } |
170 | 170 |
171 capture_callback.Run(frame, refresh_time, true); | 171 capture_callback.Run(std::move(frame), refresh_time, true); |
172 return true; | 172 return true; |
173 } | 173 } |
174 | 174 |
175 gfx::Size ThreadSafeCaptureOracle::GetCaptureSize() const { | 175 gfx::Size ThreadSafeCaptureOracle::GetCaptureSize() const { |
176 base::AutoLock guard(lock_); | 176 base::AutoLock guard(lock_); |
177 return oracle_.capture_size(); | 177 return oracle_.capture_size(); |
178 } | 178 } |
179 | 179 |
180 void ThreadSafeCaptureOracle::UpdateCaptureSize(const gfx::Size& source_size) { | 180 void ThreadSafeCaptureOracle::UpdateCaptureSize(const gfx::Size& source_size) { |
181 base::AutoLock guard(lock_); | 181 base::AutoLock guard(lock_); |
(...skipping 12 matching lines...) Expand all Loading... |
194 base::AutoLock guard(lock_); | 194 base::AutoLock guard(lock_); |
195 if (client_) | 195 if (client_) |
196 client_->OnError(from_here, reason); | 196 client_->OnError(from_here, reason); |
197 } | 197 } |
198 | 198 |
199 void ThreadSafeCaptureOracle::DidCaptureFrame( | 199 void ThreadSafeCaptureOracle::DidCaptureFrame( |
200 int frame_number, | 200 int frame_number, |
201 std::unique_ptr<VideoCaptureDevice::Client::Buffer> buffer, | 201 std::unique_ptr<VideoCaptureDevice::Client::Buffer> buffer, |
202 base::TimeTicks capture_begin_time, | 202 base::TimeTicks capture_begin_time, |
203 base::TimeDelta estimated_frame_duration, | 203 base::TimeDelta estimated_frame_duration, |
204 const scoped_refptr<VideoFrame>& frame, | 204 scoped_refptr<VideoFrame> frame, |
205 base::TimeTicks reference_time, | 205 base::TimeTicks reference_time, |
206 bool success) { | 206 bool success) { |
207 TRACE_EVENT_ASYNC_END2("gpu.capture", "Capture", buffer.get(), "success", | 207 TRACE_EVENT_ASYNC_END2("gpu.capture", "Capture", buffer.get(), "success", |
208 success, "timestamp", | 208 success, "timestamp", |
209 reference_time.ToInternalValue()); | 209 reference_time.ToInternalValue()); |
210 | 210 |
211 base::AutoLock guard(lock_); | 211 base::AutoLock guard(lock_); |
212 | 212 |
213 if (oracle_.CompleteCapture(frame_number, success, &reference_time)) { | 213 if (oracle_.CompleteCapture(frame_number, success, &reference_time)) { |
214 TRACE_EVENT_INSTANT0("gpu.capture", "CaptureSucceeded", | 214 TRACE_EVENT_INSTANT0("gpu.capture", "CaptureSucceeded", |
(...skipping 10 matching lines...) Expand all Loading... |
225 base::TimeTicks::Now()); | 225 base::TimeTicks::Now()); |
226 frame->metadata()->SetTimeDelta(VideoFrameMetadata::FRAME_DURATION, | 226 frame->metadata()->SetTimeDelta(VideoFrameMetadata::FRAME_DURATION, |
227 estimated_frame_duration); | 227 estimated_frame_duration); |
228 frame->metadata()->SetTimeTicks(VideoFrameMetadata::REFERENCE_TIME, | 228 frame->metadata()->SetTimeTicks(VideoFrameMetadata::REFERENCE_TIME, |
229 reference_time); | 229 reference_time); |
230 | 230 |
231 frame->AddDestructionObserver( | 231 frame->AddDestructionObserver( |
232 base::Bind(&ThreadSafeCaptureOracle::DidConsumeFrame, this, | 232 base::Bind(&ThreadSafeCaptureOracle::DidConsumeFrame, this, |
233 frame_number, frame->metadata())); | 233 frame_number, frame->metadata())); |
234 | 234 |
235 client_->OnIncomingCapturedVideoFrame(std::move(buffer), frame); | 235 client_->OnIncomingCapturedVideoFrame(std::move(buffer), std::move(frame)); |
236 } | 236 } |
237 } | 237 } |
238 | 238 |
239 void ThreadSafeCaptureOracle::DidConsumeFrame( | 239 void ThreadSafeCaptureOracle::DidConsumeFrame( |
240 int frame_number, | 240 int frame_number, |
241 const media::VideoFrameMetadata* metadata) { | 241 const media::VideoFrameMetadata* metadata) { |
242 // Note: This function may be called on any thread by the VideoFrame | 242 // Note: This function may be called on any thread by the VideoFrame |
243 // destructor. |metadata| is still valid for read-access at this point. | 243 // destructor. |metadata| is still valid for read-access at this point. |
244 double utilization = -1.0; | 244 double utilization = -1.0; |
245 if (metadata->GetDouble(media::VideoFrameMetadata::RESOURCE_UTILIZATION, | 245 if (metadata->GetDouble(media::VideoFrameMetadata::RESOURCE_UTILIZATION, |
246 &utilization)) { | 246 &utilization)) { |
247 base::AutoLock guard(lock_); | 247 base::AutoLock guard(lock_); |
248 oracle_.RecordConsumerFeedback(frame_number, utilization); | 248 oracle_.RecordConsumerFeedback(frame_number, utilization); |
249 } | 249 } |
250 } | 250 } |
251 | 251 |
252 } // namespace media | 252 } // namespace media |
OLD | NEW |