fixed vfw (#2156)
This commit is contained in:
parent
bc3fb347a3
commit
469ec7c522
@ -182,6 +182,12 @@ bool CvCaptureAVI_VFW::open( const char* filename )
|
||||
getframe = AVIStreamGetFrameOpen( avistream, &bmihdr );
|
||||
if( getframe != 0 )
|
||||
return true;
|
||||
|
||||
// Attempt to open as 8-bit AVI.
|
||||
bmihdr = icvBitmapHeader( size.width, size.height, 8);
|
||||
getframe = AVIStreamGetFrameOpen( avistream, &bmihdr );
|
||||
if( getframe != 0 )
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -201,14 +207,28 @@ IplImage* CvCaptureAVI_VFW::retrieveFrame(int)
|
||||
{
|
||||
if( avistream && bmih )
|
||||
{
|
||||
bool isColor = bmih->biBitCount == 24;
|
||||
int nChannels = (isColor) ? 3 : 1;
|
||||
IplImage src;
|
||||
cvInitImageHeader( &src, cvSize( bmih->biWidth, bmih->biHeight ),
|
||||
IPL_DEPTH_8U, 3, IPL_ORIGIN_BL, 4 );
|
||||
cvSetData( &src, (char*)(bmih + 1), src.widthStep );
|
||||
IPL_DEPTH_8U, nChannels, IPL_ORIGIN_BL, 4 );
|
||||
|
||||
char* dataPtr = (char*)(bmih + 1);
|
||||
|
||||
// Only account for the color map size if we are an 8-bit image and the color map is used
|
||||
if (!isColor)
|
||||
{
|
||||
static int RGBQUAD_SIZE_PER_BYTE = sizeof(RGBQUAD)/sizeof(BYTE);
|
||||
int offsetFromColormapToData = (int)bmih->biClrUsed*RGBQUAD_SIZE_PER_BYTE;
|
||||
dataPtr += offsetFromColormapToData;
|
||||
}
|
||||
|
||||
cvSetData( &src, dataPtr, src.widthStep );
|
||||
|
||||
if( !frame || frame->width != src.width || frame->height != src.height )
|
||||
{
|
||||
cvReleaseImage( &frame );
|
||||
frame = cvCreateImage( cvGetSize(&src), 8, 3 );
|
||||
frame = cvCreateImage( cvGetSize(&src), 8, nChannels );
|
||||
}
|
||||
|
||||
cvFlip( &src, frame, 0 );
|
||||
|
Loading…
Reference in New Issue
Block a user