Fix setting of FPS after frame width and height with DShow cameras

Issue #2114
This commit is contained in:
Andrey Kamaev 2013-02-01 18:01:13 +04:00
parent 9e32c6993a
commit 0cd8684ade

View File

@ -3120,6 +3120,7 @@ protected:
void init();
int index, width, height,fourcc;
int widthSet, heightSet;
IplImage* frame;
static videoInput VI;
};
@ -3138,6 +3139,7 @@ CvCaptureCAM_DShow::CvCaptureCAM_DShow()
index = -1;
frame = 0;
width = height = fourcc = -1;
widthSet = heightSet = -1;
CoInitialize(0);
}
@ -3155,7 +3157,7 @@ void CvCaptureCAM_DShow::close()
index = -1;
cvReleaseImage(&frame);
}
width = height = -1;
widthSet = heightSet = width = height = -1;
}
// Initialize camera input
@ -3282,9 +3284,12 @@ bool CvCaptureCAM_DShow::setProperty( int property_id, double value )
{
VI.stopDevice(index);
VI.setIdealFramerate(index,fps);
VI.setupDevice(index);
if (widthSet > 0 && heightSet > 0)
VI.setupDevice(index, widthSet, heightSet);
else
VI.setupDevice(index);
}
break;
return VI.isDeviceSetup(index);
}
@ -3299,8 +3304,15 @@ bool CvCaptureCAM_DShow::setProperty( int property_id, double value )
VI.setIdealFramerate(index, fps);
VI.setupDeviceFourcc(index, width, height, fourcc);
}
width = height = fourcc = -1;
return VI.isDeviceSetup(index);
bool success = VI.isDeviceSetup(index);
if (success)
{
widthSet = width;
heightSet = height;
width = height = fourcc = -1;
}
return success;
}
return true;
}