Commit 469ec7c5 authored by Maria Dimashova's avatar Maria Dimashova

fixed vfw (#2156)

parent bc3fb347
...@@ -182,6 +182,12 @@ bool CvCaptureAVI_VFW::open( const char* filename ) ...@@ -182,6 +182,12 @@ bool CvCaptureAVI_VFW::open( const char* filename )
getframe = AVIStreamGetFrameOpen( avistream, &bmihdr ); getframe = AVIStreamGetFrameOpen( avistream, &bmihdr );
if( getframe != 0 ) if( getframe != 0 )
return true; 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) ...@@ -201,14 +207,28 @@ IplImage* CvCaptureAVI_VFW::retrieveFrame(int)
{ {
if( avistream && bmih ) if( avistream && bmih )
{ {
bool isColor = bmih->biBitCount == 24;
int nChannels = (isColor) ? 3 : 1;
IplImage src; IplImage src;
cvInitImageHeader( &src, cvSize( bmih->biWidth, bmih->biHeight ), cvInitImageHeader( &src, cvSize( bmih->biWidth, bmih->biHeight ),
IPL_DEPTH_8U, 3, IPL_ORIGIN_BL, 4 ); IPL_DEPTH_8U, nChannels, IPL_ORIGIN_BL, 4 );
cvSetData( &src, (char*)(bmih + 1), src.widthStep );
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 ) if( !frame || frame->width != src.width || frame->height != src.height )
{ {
cvReleaseImage( &frame ); cvReleaseImage( &frame );
frame = cvCreateImage( cvGetSize(&src), 8, 3 ); frame = cvCreateImage( cvGetSize(&src), 8, nChannels );
} }
cvFlip( &src, frame, 0 ); cvFlip( &src, frame, 0 );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment