fixed problem with non 4:3 cameras (ticket #142)

pull/13383/head
Vadim Pisarevsky 14 years ago
parent 873b72edd9
commit 108fc3f4fe
  1. 21
      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;
}

Loading…
Cancel
Save