diff --git a/modules/highgui/src/cap_dshow.cpp b/modules/highgui/src/cap_dshow.cpp index b1b142c79..c2513d788 100644 --- a/modules/highgui/src/cap_dshow.cpp +++ b/modules/highgui/src/cap_dshow.cpp @@ -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; }