Commit eb1f3733 authored by Alexander Alekhin's avatar Alexander Alekhin

videoio(dc1394): use lazy initialization on demand

parent d993b9c1
...@@ -192,7 +192,11 @@ CvDC1394::~CvDC1394() ...@@ -192,7 +192,11 @@ CvDC1394::~CvDC1394()
dc = 0; dc = 0;
} }
static CvDC1394 dc1394; static CvDC1394& getDC1394()
{
static CvDC1394 dc1394;
return dc1394;
}
class CvCaptureCAM_DC1394_v2_CPP : public CvCapture class CvCaptureCAM_DC1394_v2_CPP : public CvCapture
{ {
...@@ -451,7 +455,7 @@ bool CvCaptureCAM_DC1394_v2_CPP::startCapture() ...@@ -451,7 +455,7 @@ bool CvCaptureCAM_DC1394_v2_CPP::startCapture()
code = dc1394_capture_setup(dcCam, nDMABufs, DC1394_CAPTURE_FLAGS_DEFAULT); code = dc1394_capture_setup(dcCam, nDMABufs, DC1394_CAPTURE_FLAGS_DEFAULT);
if (code >= 0) if (code >= 0)
{ {
FD_SET(dc1394_capture_get_fileno(dcCam), &dc1394.camFds); FD_SET(dc1394_capture_get_fileno(dcCam), &getDC1394().camFds);
dc1394_video_set_transmission(dcCam, DC1394_ON); dc1394_video_set_transmission(dcCam, DC1394_ON);
if (cameraId == VIDERE) if (cameraId == VIDERE)
{ {
...@@ -477,15 +481,15 @@ bool CvCaptureCAM_DC1394_v2_CPP::open(int index) ...@@ -477,15 +481,15 @@ bool CvCaptureCAM_DC1394_v2_CPP::open(int index)
close(); close();
if (!dc1394.dc) if (!getDC1394().dc)
goto _exit_; goto _exit_;
err = dc1394_camera_enumerate(dc1394.dc, &cameraList); err = dc1394_camera_enumerate(getDC1394().dc, &cameraList);
if (err < 0 || !cameraList || (unsigned)index >= (unsigned)cameraList->num) if (err < 0 || !cameraList || (unsigned)index >= (unsigned)cameraList->num)
goto _exit_; goto _exit_;
guid = cameraList->ids[index].guid; guid = cameraList->ids[index].guid;
dcCam = dc1394_camera_new(dc1394.dc, guid); dcCam = dc1394_camera_new(getDC1394().dc, guid);
if (!dcCam) if (!dcCam)
goto _exit_; goto _exit_;
...@@ -510,8 +514,8 @@ void CvCaptureCAM_DC1394_v2_CPP::close() ...@@ -510,8 +514,8 @@ void CvCaptureCAM_DC1394_v2_CPP::close()
// check for fileno valid before using // check for fileno valid before using
int fileno=dc1394_capture_get_fileno(dcCam); int fileno=dc1394_capture_get_fileno(dcCam);
if (fileno>=0 && FD_ISSET(fileno, &dc1394.camFds)) if (fileno>=0 && FD_ISSET(fileno, &getDC1394().camFds))
FD_CLR(fileno, &dc1394.camFds); FD_CLR(fileno, &getDC1394().camFds);
dc1394_video_set_transmission(dcCam, DC1394_OFF); dc1394_video_set_transmission(dcCam, DC1394_OFF);
dc1394_capture_stop(dcCam); dc1394_capture_stop(dcCam);
dc1394_camera_free(dcCam); dc1394_camera_free(dcCam);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment