Fixed VideoCapture::open() does not release previous capture sources (Bug #3150).
authorNikita Manovich <nikita.manovich@gmail.com>
Wed, 10 Jul 2013 13:43:47 +0000 (17:43 +0400)
committerNikita Manovich <nikita.manovich@gmail.com>
Wed, 10 Jul 2013 13:48:44 +0000 (17:48 +0400)
VideoCapture didn't call release method and just ignored the new capture sources.
OpenCV documentation:
  bool VideoCapture::open(const string& filename);
  bool VideoCapture::open(int device);

The methods first call VideoCapture::release() to close the already opened file or camera.

modules/highgui/src/cap.cpp

index a76cb42..ac3d658 100644 (file)
@@ -490,14 +490,14 @@ VideoCapture::~VideoCapture()
 
 bool VideoCapture::open(const String& filename)
 {
-    if (!isOpened())
+    if (isOpened()) release();
     cap = cvCreateFileCapture(filename.c_str());
     return isOpened();
 }
 
 bool VideoCapture::open(int device)
 {
-    if (!isOpened())
+    if (isOpened()) release();
     cap = cvCreateCameraCapture(device);
     return isOpened();
 }