@@ -104,8 +104,6 @@ void VideoExample::SyncProcess()
104104 bool manualMode = false ;
105105#endif
106106
107- cv::Mat frame;
108-
109107 double freq = cv::getTickFrequency ();
110108 int64 allTime = 0 ;
111109
@@ -118,17 +116,35 @@ void VideoExample::SyncProcess()
118116 return ;
119117 }
120118
119+ FrameInfo frameInfo (m_batchSize);
120+ frameInfo.m_frames .resize (frameInfo.m_batchSize );
121+ frameInfo.m_frameInds .resize (frameInfo.m_batchSize );
122+
121123 int64 startLoopTime = cv::getTickCount ();
122124
123125 for (;;)
124126 {
125- capture >> frame;
126- if (frame.empty ())
127- break ;
127+ size_t i = 0 ;
128+ for (; i < m_batchSize; ++i)
129+ {
130+ capture >> frameInfo.m_frames [i].GetMatBGRWrite ();
131+ if (frameInfo.m_frames [i].empty ())
132+ break ;
133+ frameInfo.m_frameInds [i] = framesCounter;
134+
135+ ++framesCounter;
136+ if (m_endFrame && framesCounter > m_endFrame)
137+ {
138+ std::cout << " Process: riched last " << m_endFrame << " frame" << std::endl;
139+ break ;
140+ }
141+ }
142+ if (i < m_batchSize)
143+ break ;
128144
129145 if (!m_isDetectorInitialized || !m_isTrackerInitialized)
130146 {
131- cv::UMat ufirst = frame. getUMat (cv::ACCESS_READ );
147+ cv::UMat ufirst = frameInfo. m_frames [ 0 ]. GetUMatBGR ( );
132148 if (!m_isDetectorInitialized)
133149 {
134150 m_isDetectorInitialized = InitDetector (ufirst);
@@ -149,28 +165,6 @@ void VideoExample::SyncProcess()
149165 }
150166 }
151167
152- FrameInfo frameInfo (m_batchSize);
153- frameInfo.m_frames .emplace_back (frame);
154- frameInfo.m_frameInds .emplace_back (framesCounter);
155- ++framesCounter;
156- for (size_t i = 1 ; i < m_batchSize; ++i)
157- {
158- capture >> frame;
159- if (frame.empty ())
160- break ;
161- frameInfo.m_frames .emplace_back (frame);
162- frameInfo.m_frameInds .emplace_back (framesCounter);
163-
164- ++framesCounter;
165- if (m_endFrame && framesCounter > m_endFrame)
166- {
167- std::cout << " Process: riched last " << m_endFrame << " frame" << std::endl;
168- break ;
169- }
170- }
171- if (frameInfo.m_frames .size () < m_batchSize)
172- break ;
173-
174168 int64 t1 = cv::getTickCount ();
175169
176170 regions_t regions;
@@ -181,12 +175,12 @@ void VideoExample::SyncProcess()
181175 allTime += t2 - t1;
182176 int currTime = cvRound (1000 * (t2 - t1) / freq);
183177
184- for (size_t i = 0 ; i < m_batchSize; ++i)
178+ for (i = 0 ; i < m_batchSize; ++i)
185179 {
186180 DrawData (frameInfo.m_frames [i].GetMatBGR (), frameInfo.m_tracks [i], frameInfo.m_frameInds [i], currTime);
187181
188182#ifndef SILENT_WORK
189- cv::imshow (" Video" , frame );
183+ cv::imshow (" Video" , frameInfo. m_frames [i]. GetMatBGR () );
190184
191185 int waitTime = manualMode ? 0 : 1 ;// std::max<int>(1, cvRound(1000 / m_fps - currTime));
192186 int k = cv::waitKey (waitTime);
@@ -228,14 +222,13 @@ void VideoExample::AsyncProcess()
228222
229223 double freq = cv::getTickFrequency ();
230224
231- int framesCounter = m_startFrame + 1 ;
232-
233225 int64 allTime = 0 ;
234226 int64 startLoopTime = cv::getTickCount ();
235227 size_t processCounter = 0 ;
236228 for (; !stopCapture.load (); )
237229 {
238230 FrameInfo& frameInfo = m_frameInfo[processCounter % 2 ];
231+ // std::cout << "tracking from " << (processCounter % 2) << " ind = " << processCounter << std::endl;
239232 {
240233 std::unique_lock<std::mutex> lock (frameInfo.m_mutex );
241234 if (!frameInfo.m_cond .wait_for (lock, std::chrono::milliseconds (m_captureTimeOut), [&frameInfo]{ return frameInfo.m_captured ; }))
@@ -244,6 +237,7 @@ void VideoExample::AsyncProcess()
244237 break ;
245238 }
246239 }
240+ // std::cout << "tracking from " << (processCounter % 2) << " in process..." << std::endl;
247241
248242 if (!m_isTrackerInitialized)
249243 {
@@ -270,12 +264,10 @@ void VideoExample::AsyncProcess()
270264 int key = 0 ;
271265 for (size_t i = 0 ; i < m_batchSize; ++i)
272266 {
273- DrawData (frameInfo.m_frames [i].GetMatBGR (), frameInfo.m_tracks [i], framesCounter , currTime);
267+ DrawData (frameInfo.m_frames [i].GetMatBGR (), frameInfo.m_tracks [i], frameInfo. m_frameInds [i] , currTime);
274268
275269 WriteFrame (writer, frameInfo.m_frames [i].GetMatBGR ());
276270
277- ++framesCounter;
278-
279271#ifndef SILENT_WORK
280272 cv::imshow (" Video" , frameInfo.m_frames [0 ].GetMatBGR ());
281273
@@ -292,19 +284,16 @@ void VideoExample::AsyncProcess()
292284
293285 {
294286 std::unique_lock<std::mutex> lock (frameInfo.m_mutex );
287+ // std::cout << "tracking m_captured " << (processCounter % 2) << " - " << frameInfo.m_captured << std::endl;
288+ assert (frameInfo.m_captured );
295289 frameInfo.m_captured = false ;
296290 }
297291 frameInfo.m_cond .notify_one ();
298292
299293 if (key == 27 )
300294 break ;
301295
302- if (m_endFrame && framesCounter > m_endFrame)
303- {
304- std::cout << " Process: riched last " << m_endFrame << " frame" << std::endl;
305- break ;
306- }
307- ++processCounter;
296+ ++processCounter;
308297 }
309298 stopCapture = true ;
310299
@@ -342,7 +331,7 @@ void VideoExample::CaptureAndDetect(VideoExample* thisPtr, std::atomic<bool>& st
342331 for (; !stopCapture.load ();)
343332 {
344333 FrameInfo& frameInfo = thisPtr->m_frameInfo [processCounter % 2 ];
345-
334+ // std::cout << "captured to " << (processCounter % 2) << " ind = " << processCounter << std::endl;
346335 {
347336 std::unique_lock<std::mutex> lock (frameInfo.m_mutex );
348337 if (!frameInfo.m_cond .wait_for (lock, std::chrono::milliseconds (trackingTimeOut), [&frameInfo]{ return !frameInfo.m_captured ; }))
@@ -352,14 +341,16 @@ void VideoExample::CaptureAndDetect(VideoExample* thisPtr, std::atomic<bool>& st
352341 break ;
353342 }
354343 }
344+ // std::cout << "capture from " << (processCounter % 2) << " in process..." << std::endl;
355345
356346 if (frameInfo.m_frames .size () < frameInfo.m_batchSize )
357347 {
358348 frameInfo.m_frames .resize (frameInfo.m_batchSize );
359349 frameInfo.m_frameInds .resize (frameInfo.m_batchSize );
360350 }
361351
362- for (size_t i = 1 ; i < frameInfo.m_batchSize ; ++i)
352+ size_t i = 0 ;
353+ for (; i < frameInfo.m_batchSize ; ++i)
363354 {
364355 capture >> frameInfo.m_frames [i].GetMatBGRWrite ();
365356 if (frameInfo.m_frames [i].empty ())
@@ -370,8 +361,14 @@ void VideoExample::CaptureAndDetect(VideoExample* thisPtr, std::atomic<bool>& st
370361 }
371362 frameInfo.m_frameInds [i] = framesCounter;
372363 ++framesCounter;
364+
365+ if (thisPtr->m_endFrame && framesCounter > thisPtr->m_endFrame )
366+ {
367+ std::cout << " Process: riched last " << thisPtr->m_endFrame << " frame" << std::endl;
368+ break ;
369+ }
373370 }
374- if (frameInfo. m_frames . size () < frameInfo.m_batchSize )
371+ if (i < frameInfo.m_batchSize )
375372 break ;
376373
377374 if (!thisPtr->m_isDetectorInitialized )
@@ -392,6 +389,8 @@ void VideoExample::CaptureAndDetect(VideoExample* thisPtr, std::atomic<bool>& st
392389
393390 {
394391 std::unique_lock<std::mutex> lock (frameInfo.m_mutex );
392+ // std::cout << "capture m_captured " << (processCounter % 2) << " - " << frameInfo.m_captured << std::endl;
393+ assert (!frameInfo.m_captured );
395394 frameInfo.m_captured = true ;
396395 }
397396 frameInfo.m_cond .notify_one ();
@@ -438,7 +437,7 @@ void VideoExample::Tracking(FrameInfo& frame)
438437{
439438 assert (frame.m_regions .size () == frame.m_frames .size ());
440439
441- frame.Clean å Tracks ();
440+ frame.CleanTracks ();
442441 for (size_t i = 0 ; i < frame.m_frames .size (); ++i)
443442 {
444443 if (m_tracker->CanColorFrameToTrack ())
0 commit comments