FIX: VideoCapture::read() was returning empty image for camera captures
authorAlexander Mordvintsev <no@email>
Tue, 22 May 2012 07:58:31 +0000 (07:58 +0000)
committerAlexander Mordvintsev <no@email>
Tue, 22 May 2012 07:58:31 +0000 (07:58 +0000)
modules/highgui/src/cap.cpp

index 45ef082..6c2cd9a 100644 (file)
@@ -494,11 +494,15 @@ bool VideoCapture::retrieve(Mat& image, int channel)
 
 bool VideoCapture::read(Mat& image)
 {
-    if (get(CV_CAP_PROP_POS_FRAMES) < get(CV_CAP_PROP_FRAME_COUNT))
-    if(!grab())
-        image.release();
-    else
-        retrieve(image);
+    double frame_pos = get(CV_CAP_PROP_POS_FRAMES);
+    double frame_count = get(CV_CAP_PROP_FRAME_COUNT);
+    if (frame_pos < frame_count || frame_pos < 0 || frame_count < 0)
+    {
+        if(grab())
+            retrieve(image);
+        else
+            image.release();
+    }
     else
         image.release();
     return !image.empty();
@@ -506,10 +510,7 @@ bool VideoCapture::read(Mat& image)
     
 VideoCapture& VideoCapture::operator >> (Mat& image)
 {
-    if(!grab())
-        image.release();
-    else
-        retrieve(image);
+    read(image);
     return *this;
 }