diff --git a/src/video/videobuffer.cpp b/src/video/videobuffer.cpp index 301c621..d5363be 100644 --- a/src/video/videobuffer.cpp +++ b/src/video/videobuffer.cpp @@ -149,8 +149,11 @@ void imageCollectionThread(void* arg) // it returns so that the video capture can be recreated. void getALPRImages(cv::VideoCapture cap, VideoDispatcher* dispatcher) { - cv::Mat frame; - + cv::Mat frame1; + cv::Mat frame2; + cv::Mat* receiveframe; + bool receiveframeisframe1 = true; + while (dispatcher->active) { while (dispatcher->active) @@ -159,9 +162,11 @@ void getALPRImages(cv::VideoCapture cap, VideoDispatcher* dispatcher) bool hasImage = false; try { - hasImage = cap.read(frame); - // Double check the image to make sure it's valid. - if (!frame.data || frame.empty()) + if (receiveframeisframe1) receiveframe = &frame1; + else receiveframe = &frame2; + hasImage = cap.read(*receiveframe); + // Double check the image to make sure it's valid. + if (!(*receiveframe).data || (*receiveframe).empty()) { std::stringstream ss; ss << "Stream " << dispatcher->mjpeg_url << " received invalid frame"; @@ -170,8 +175,9 @@ void getALPRImages(cv::VideoCapture cap, VideoDispatcher* dispatcher) } dispatcher->mMutex.lock(); - dispatcher->setLatestFrame(&frame); + dispatcher->setLatestFrame(receiveframe); dispatcher->mMutex.unlock(); + receiveframeisframe1 = !receiveframeisframe1; } catch (const std::runtime_error& error) {