| 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 |