diff --git a/modules/highgui/src/cap_qtkit.mm b/modules/highgui/src/cap_qtkit.mm index ef7b42aa44..6b915977fe 100644 --- a/modules/highgui/src/cap_qtkit.mm +++ b/modules/highgui/src/cap_qtkit.mm @@ -179,6 +179,7 @@ private: int changedPos; int started; + QTTime endOfMovie; }; @@ -673,6 +674,8 @@ CvCaptureFile::CvCaptureFile(const char* filename) { return; } + [mCaptureSession gotoEnd]; + endOfMovie = [mCaptureSession currentTime]; [mCaptureSession gotoBeginning]; @@ -709,6 +712,11 @@ int CvCaptureFile::didStart() { bool CvCaptureFile::grabFrame() { NSAutoreleasePool* localpool = [[NSAutoreleasePool alloc] init]; double t1 = getProperty(CV_CAP_PROP_POS_MSEC); + + QTTime curTime; + curTime = [mCaptureSession currentTime]; + bool isEnd=(QTTimeCompare(curTime,endOfMovie) == NSOrderedSame); + [mCaptureSession stepForward]; double t2 = getProperty(CV_CAP_PROP_POS_MSEC); if (t2>t1 && !changedPos) { @@ -718,7 +726,7 @@ bool CvCaptureFile::grabFrame() { } changedPos = 0; [localpool drain]; - return 1; + return !isEnd; }