summaryrefslogtreecommitdiff
path: root/video_engine/vie_capturer.cc
diff options
context:
space:
mode:
Diffstat (limited to 'video_engine/vie_capturer.cc')
-rw-r--r--video_engine/vie_capturer.cc18
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