mirror of
https://github.com/opencv/opencv.git
synced 2025-06-13 04:52:53 +08:00
Fix for unhandled error cases when using Media Foundation
Some function calls to Media Foundation can fail and retrun null pointers. They should be checked before being dereferenced to avoid a crash.
This commit is contained in:
parent
2fded5d8fb
commit
166d75e3c5
@ -1986,13 +1986,17 @@ long videoDevice::resetDevice(IMFActivate *pActivate)
|
|||||||
&vd_pFriendlyName,
|
&vd_pFriendlyName,
|
||||||
NULL
|
NULL
|
||||||
);
|
);
|
||||||
hr = pActivate->ActivateObject(
|
if (SUCCEEDED(hr))
|
||||||
__uuidof(IMFMediaSource),
|
hr = pActivate->ActivateObject(
|
||||||
(void**)&pSource
|
__uuidof(IMFMediaSource),
|
||||||
);
|
(void**)&pSource
|
||||||
enumerateCaptureFormats(pSource);
|
);
|
||||||
buildLibraryofTypes();
|
if (SUCCEEDED(hr) && pSource)
|
||||||
SafeRelease(&pSource);
|
{
|
||||||
|
enumerateCaptureFormats(pSource);
|
||||||
|
buildLibraryofTypes();
|
||||||
|
SafeRelease(&pSource);
|
||||||
|
}//end if (SUCCEEDED(hr) && pSource)
|
||||||
if(FAILED(hr))
|
if(FAILED(hr))
|
||||||
{
|
{
|
||||||
vd_pFriendlyName = NULL;
|
vd_pFriendlyName = NULL;
|
||||||
@ -2638,7 +2642,12 @@ HRESULT videoDevice::enumerateCaptureFormats(IMFMediaSource *pSource)
|
|||||||
_ComPtr<IMFStreamDescriptor> pSD = NULL;
|
_ComPtr<IMFStreamDescriptor> pSD = NULL;
|
||||||
_ComPtr<IMFMediaTypeHandler> pHandler = NULL;
|
_ComPtr<IMFMediaTypeHandler> pHandler = NULL;
|
||||||
_ComPtr<IMFMediaType> pType = NULL;
|
_ComPtr<IMFMediaType> pType = NULL;
|
||||||
HRESULT hr = pSource->CreatePresentationDescriptor(pPD.GetAddressOf());
|
HRESULT hr = !pSource ? E_POINTER : S_OK;
|
||||||
|
if (FAILED(hr))
|
||||||
|
{
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
hr = pSource->CreatePresentationDescriptor(pPD.GetAddressOf());
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
{
|
{
|
||||||
goto done;
|
goto done;
|
||||||
@ -3815,7 +3824,12 @@ HRESULT CvCaptureFile_MSMF::enumerateCaptureFormats(IMFMediaSource *pSource)
|
|||||||
_ComPtr<IMFStreamDescriptor> pSD = NULL;
|
_ComPtr<IMFStreamDescriptor> pSD = NULL;
|
||||||
_ComPtr<IMFMediaTypeHandler> pHandler = NULL;
|
_ComPtr<IMFMediaTypeHandler> pHandler = NULL;
|
||||||
_ComPtr<IMFMediaType> pType = NULL;
|
_ComPtr<IMFMediaType> pType = NULL;
|
||||||
HRESULT hr = pSource->CreatePresentationDescriptor(pPD.GetAddressOf());
|
HRESULT hr = !pSource ? E_POINTER : S_OK;
|
||||||
|
if (FAILED(hr))
|
||||||
|
{
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
hr = pSource->CreatePresentationDescriptor(pPD.GetAddressOf());
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
{
|
{
|
||||||
goto done;
|
goto done;
|
||||||
|
Loading…
Reference in New Issue
Block a user