Fixed MSMF file capture error while opening the file containing unsupported video stream format

pull/3260/head
Artur Wieczorek 11 years ago
parent 562ff9d111
commit 5bf1a4c08c
  1. 21
      modules/highgui/src/cap_msmf.cpp

@ -3847,18 +3847,25 @@ bool CvCaptureFile_MSMF::open(const char* filename)
hr = enumerateCaptureFormats(videoFileSource); hr = enumerateCaptureFormats(videoFileSource);
} }
if (SUCCEEDED(hr)) if( captureFormats.empty() )
{
isOpened = false;
}
else
{ {
hr = ImageGrabberThread::CreateInstance(&grabberThread, videoFileSource, (unsigned int)-2, true); if (SUCCEEDED(hr))
{
hr = ImageGrabberThread::CreateInstance(&grabberThread, videoFileSource, (unsigned int)-2, true);
}
isOpened = SUCCEEDED(hr);
} }
if (SUCCEEDED(hr)) if (isOpened)
{ {
grabberThread->start(); grabberThread->start();
} }
isOpened = SUCCEEDED(hr);
return isOpened; return isOpened;
} }
@ -3990,7 +3997,9 @@ HRESULT CvCaptureFile_MSMF::enumerateCaptureFormats(IMFMediaSource *pSource)
goto done; goto done;
} }
MediaType MT = FormatReader::Read(pType.Get()); MediaType MT = FormatReader::Read(pType.Get());
captureFormats.push_back(MT); // We can capture only RGB video.
if( MT.MF_MT_SUBTYPE == MFVideoFormat_RGB24 )
captureFormats.push_back(MT);
} }
done: done:

Loading…
Cancel
Save