Chromium Code Reviews| Index: media/capture/content/thread_safe_capture_oracle.cc |
| diff --git a/media/capture/content/thread_safe_capture_oracle.cc b/media/capture/content/thread_safe_capture_oracle.cc |
| index 7e368f597451e0e190f53ec139a79d4a41ba58f7..909b5b11bd4365a5e277f423a04b67ac6a9d8130 100644 |
| --- a/media/capture/content/thread_safe_capture_oracle.cc |
| +++ b/media/capture/content/thread_safe_capture_oracle.cc |
| @@ -45,7 +45,8 @@ ThreadSafeCaptureOracle::ThreadSafeCaptureOracle( |
| params.requested_format.frame_size, |
| params.resolution_change_policy, |
| enable_auto_throttling), |
| - params_(params) {} |
| + params_(params), |
| + capture_(false) {} |
| ThreadSafeCaptureOracle::~ThreadSafeCaptureOracle() { |
| } |
| @@ -187,6 +188,7 @@ void ThreadSafeCaptureOracle::UpdateCaptureSize(const gfx::Size& source_size) { |
| void ThreadSafeCaptureOracle::Stop() { |
| base::AutoLock guard(lock_); |
| + capture_ = false; |
| client_.reset(); |
| } |
| @@ -198,6 +200,13 @@ void ThreadSafeCaptureOracle::ReportError( |
| client_->OnError(from_here, reason); |
| } |
| +void ThreadSafeCaptureOracle::ReportStarted() { |
| + base::AutoLock guard(lock_); |
| + if (client_) |
| + client_->OnStarted(); |
| + capture_ = true; |
| +} |
| + |
| void ThreadSafeCaptureOracle::DidCaptureFrame( |
| int frame_number, |
| VideoCaptureDevice::Client::Buffer buffer, |
| @@ -218,7 +227,7 @@ void ThreadSafeCaptureOracle::DidCaptureFrame( |
| TRACE_EVENT_INSTANT0("gpu.capture", "CaptureSucceeded", |
| TRACE_EVENT_SCOPE_THREAD); |
| - if (!client_) |
| + if (!client_ || !capture_) |
|
miu
2017/02/18 01:18:45
Dropping frames at this stage could break things (
braveyao
2017/02/22 18:06:44
Acknowledged.
|
| return; // Capture is stopped. |
| frame->metadata()->SetDouble(VideoFrameMetadata::FRAME_RATE, |