From 108fc3f4feeb45b4ad0391605838a729ce405277 Mon Sep 17 00:00:00 2001 From: Vadim Pisarevsky Date: Sun, 19 Jun 2011 22:35:24 +0000 Subject: [PATCH] fixed problem with non 4:3 cameras (ticket #142) --- modules/highgui/src/cap_dshow.cpp | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/modules/highgui/src/cap_dshow.cpp b/modules/highgui/src/cap_dshow.cpp index 8c162cd..935473d 100644 --- a/modules/highgui/src/cap_dshow.cpp +++ b/modules/highgui/src/cap_dshow.cpp @@ -2893,7 +2893,7 @@ public: protected: void init(); - int index; + int index, width, height; IplImage* frame; static videoInput VI; }; @@ -2911,6 +2911,7 @@ CvCaptureCAM_DShow::CvCaptureCAM_DShow() { index = -1; frame = 0; + width = height = -1; } void CvCaptureCAM_DShow::close() @@ -2921,6 +2922,7 @@ void CvCaptureCAM_DShow::close() index = -1; cvReleaseImage(&frame); } + width = height = -1; } // Initialize camera input @@ -2977,27 +2979,28 @@ double CvCaptureCAM_DShow::getProperty( int property_id ) bool CvCaptureCAM_DShow::setProperty( int property_id, double value ) { - int width = 0, height = 0; - switch( property_id ) { case CV_CAP_PROP_FRAME_WIDTH: width = cvRound(value); - height = width*3/4; break; case CV_CAP_PROP_FRAME_HEIGHT: height = cvRound(value); - width = height*4/3; default: return false; } - if( width != VI.getWidth(index) || height != VI.getHeight(index) ) + if( width > 0 && height > 0 ) { - VI.stopDevice(index); - VI.setupDevice(index, width, height); + if( width != VI.getWidth(index) || height != VI.getHeight(index) ) + { + VI.stopDevice(index); + VI.setupDevice(index, width, height); + } + width = height = -1; + return VI.isDeviceSetup(index); } - return VI.isDeviceSetup(index); + return true; } -- 2.7.4