From 227f8c4f86f6866210ccc206131bd34729c55e10 Mon Sep 17 00:00:00 2001 From: matlabbe Date: Sat, 10 Nov 2018 11:43:58 -0500 Subject: [PATCH] Camera: fixed freezing when changing online frame rate from non zero to zero --- corelib/src/Camera.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/corelib/src/Camera.cpp b/corelib/src/Camera.cpp index cfd55eaf..bf20fa8e 100644 --- a/corelib/src/Camera.cpp +++ b/corelib/src/Camera.cpp @@ -68,9 +68,10 @@ SensorData Camera::takeImage(CameraInfo * info) { bool warnFrameRateTooHigh = false; float actualFrameRate = 0; - if(_imageRate>0) + float imageRate = _imageRate; + if(imageRate>0) { - int sleepTime = (1000.0f/_imageRate - 1000.0f*_frameRateTimer->getElapsedTime()); + int sleepTime = (1000.0f/imageRate - 1000.0f*_frameRateTimer->getElapsedTime()); if(sleepTime > 2) { uSleep(sleepTime-2); @@ -82,14 +83,14 @@ SensorData Camera::takeImage(CameraInfo * info) } // Add precision at the cost of a small overhead - while(_frameRateTimer->getElapsedTime() < 1.0/double(_imageRate)-0.000001) + while(_frameRateTimer->getElapsedTime() < 1.0/double(imageRate)-0.000001) { // } double slept = _frameRateTimer->getElapsedTime(); _frameRateTimer->start(); - UDEBUG("slept=%fs vs target=%fs", slept, 1.0/double(_imageRate)); + UDEBUG("slept=%fs vs target=%fs", slept, 1.0/double(imageRate)); } UTimer timer; @@ -98,7 +99,7 @@ SensorData Camera::takeImage(CameraInfo * info) if(warnFrameRateTooHigh) { UWARN("Camera: Cannot reach target image rate %f Hz, current rate is %f Hz and capture time = %f s.", - _imageRate, actualFrameRate, captureTime); + imageRate, actualFrameRate, captureTime); } else {