diff options
Diffstat (limited to 'video_engine/vie_capturer.cc')
-rw-r--r-- | video_engine/vie_capturer.cc | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/video_engine/vie_capturer.cc b/video_engine/vie_capturer.cc index cc08ffaa..8629a1cd 100644 --- a/video_engine/vie_capturer.cc +++ b/video_engine/vie_capturer.cc @@ -511,13 +511,7 @@ bool ViECapturer::ViECaptureThreadFunction(void* obj) { bool ViECapturer::ViECaptureProcess() { if (capture_event_.Wait(kThreadWaitTimeMs) == kEventSignaled) { deliver_cs_->Enter(); - if (!captured_frame_.IsZeroSize()) { - // New I420 frame. - capture_cs_->Enter(); - deliver_frame_.SwapFrame(&captured_frame_); - captured_frame_.ResetSize(); - capture_cs_->Leave(); - + if (MaybeSwapCapturedToDeliverFrame()) { DeliverI420Frame(&deliver_frame_); } deliver_cs_->Leave(); @@ -652,4 +646,14 @@ void ViECapturer::OnNoPictureAlarm(const int32_t id, observer_->NoPictureAlarm(id, vie_alarm); } +bool ViECapturer::MaybeSwapCapturedToDeliverFrame() { + CriticalSectionScoped cs(capture_cs_.get()); + if (captured_frame_.IsZeroSize()) + return false; + + deliver_frame_.SwapFrame(&captured_frame_); + captured_frame_.ResetSize(); + return true; +} + } // namespace webrtc |