probably fixed multi-threaded capturing from DShow cameras (ticket #1470)

pull/13383/head
Vadim Pisarevsky 13 years ago
parent b2a6a257b7
commit 8513ed08d0
  1. 20
      modules/highgui/src/cap_dshow.cpp

@ -384,7 +384,7 @@ typedef _AMMediaType AM_MEDIA_TYPE;
//keeps track of how many instances of VI are being used
//don't touch
static int comInitCount = 0;
//static int comInitCount = 0;
//////////////////////////////////////// VIDEO DEVICE ///////////////////////////////////
@ -1915,7 +1915,7 @@ videoInput::~videoInput(){
// ----------------------------------------------------------------------
bool videoInput::comInit(){
HRESULT hr = NOERROR;
/*HRESULT hr = NOERROR;
//no need for us to start com more than once
if(comInitCount == 0 ){
@ -1935,7 +1935,7 @@ bool videoInput::comInit(){
}
}
comInitCount++;
comInitCount++;*/
return true;
}
@ -1946,14 +1946,15 @@ bool videoInput::comInit(){
// ----------------------------------------------------------------------
bool videoInput::comUnInit(){
if(comInitCount > 0)comInitCount--; //decrease the count of instances using com
/*if(comInitCount > 0)comInitCount--; //decrease the count of instances using com
if(comInitCount == 0){
CoUninitialize(); //if there are no instances left - uninitialize com
return true;
}
return false;
return false;*/
return true;
}
@ -2912,7 +2913,7 @@ class CvCaptureCAM_DShow : public CvCapture
{
public:
CvCaptureCAM_DShow();
virtual ~CvCaptureCAM_DShow() { close(); }
virtual ~CvCaptureCAM_DShow();
virtual bool open( int index );
virtual void close();
@ -2944,6 +2945,13 @@ CvCaptureCAM_DShow::CvCaptureCAM_DShow()
index = -1;
frame = 0;
width = height = -1;
CoInitialize(0);
}
CvCaptureCAM_DShow::~CvCaptureCAM_DShow()
{
close();
CoUninitialize();
}
void CvCaptureCAM_DShow::close()

Loading…
Cancel
Save