Resolve a crash when EyeToy is opened the second time (#3972)

* Resolve a crash when EyeToy is opened the second time

* Replace NULL/0 with nullptr

Co-authored-by: Florin9doi <Florin9doi@users.noreply.github.com>
This commit is contained in:
Florin9doi 2020-12-17 01:29:14 +02:00 committed by GitHub
parent 271f60b65a
commit bf8fb7bad6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 44 additions and 44 deletions

View File

@ -55,7 +55,7 @@ namespace usb_eyetoy
{ {
std::vector<std::wstring> devList; std::vector<std::wstring> devList;
ICreateDevEnum* pCreateDevEnum = 0; ICreateDevEnum* pCreateDevEnum = nullptr;
HRESULT hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pCreateDevEnum)); HRESULT hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pCreateDevEnum));
if (FAILED(hr)) if (FAILED(hr))
{ {
@ -63,7 +63,7 @@ namespace usb_eyetoy
return devList; return devList;
} }
IEnumMoniker* pEnum = 0; IEnumMoniker* pEnum = nullptr;
hr = pCreateDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory, &pEnum, 0); hr = pCreateDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory, &pEnum, 0);
if (hr != S_OK) if (hr != S_OK)
{ {
@ -71,11 +71,11 @@ namespace usb_eyetoy
return devList; return devList;
}; };
IMoniker* pMoniker = NULL; IMoniker* pMoniker = nullptr;
while (pEnum->Next(1, &pMoniker, NULL) == S_OK) while (pEnum->Next(1, &pMoniker, NULL) == S_OK)
{ {
IPropertyBag* pPropBag; IPropertyBag* pPropBag = nullptr;
HRESULT hr = pMoniker->BindToStorage(0, 0, IID_PPV_ARGS(&pPropBag)); hr = pMoniker->BindToStorage(0, 0, IID_PPV_ARGS(&pPropBag));
if (FAILED(hr)) if (FAILED(hr))
{ {
pMoniker->Release(); pMoniker->Release();
@ -112,7 +112,7 @@ namespace usb_eyetoy
HRESULT hr = CoCreateInstance(CLSID_CaptureGraphBuilder2, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pGraphBuilder)); HRESULT hr = CoCreateInstance(CLSID_CaptureGraphBuilder2, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pGraphBuilder));
if (FAILED(hr)) if (FAILED(hr))
{ {
Console.Warning("CoCreateInstance CLSID_CaptureGraphBuilder2 err : %x\n", hr); Console.Warning("CoCreateInstance CLSID_CaptureGraphBuilder2 err : %x", hr);
return -1; return -1;
} }
@ -120,26 +120,26 @@ namespace usb_eyetoy
hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pGraph)); hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pGraph));
if (FAILED(hr)) if (FAILED(hr))
{ {
Console.Warning("CoCreateInstance CLSID_FilterGraph err : %x\n", hr); Console.Warning("CoCreateInstance CLSID_FilterGraph err : %x", hr);
return -1; return -1;
} }
hr = pGraphBuilder->SetFiltergraph(pGraph); hr = pGraphBuilder->SetFiltergraph(pGraph);
if (FAILED(hr)) if (FAILED(hr))
{ {
Console.Warning("SetFiltergraph err : %x\n", hr); Console.Warning("SetFiltergraph err : %x", hr);
return -1; return -1;
} }
hr = pGraph->QueryInterface(IID_IMediaControl, (void**)&pControl); hr = pGraph->QueryInterface(IID_IMediaControl, (void**)&pControl);
if (FAILED(hr)) if (FAILED(hr))
{ {
Console.Warning("QueryInterface IID_IMediaControl err : %x\n", hr); Console.Warning("QueryInterface IID_IMediaControl err : %x", hr);
return -1; return -1;
} }
// enumerate all video capture devices // enumerate all video capture devices
ICreateDevEnum* pCreateDevEnum = 0; ICreateDevEnum* pCreateDevEnum = nullptr;
hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pCreateDevEnum)); hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pCreateDevEnum));
if (FAILED(hr)) if (FAILED(hr))
{ {
@ -147,7 +147,7 @@ namespace usb_eyetoy
return -1; return -1;
} }
IEnumMoniker* pEnum = 0; IEnumMoniker* pEnum = nullptr;
hr = pCreateDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory, &pEnum, 0); hr = pCreateDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory, &pEnum, 0);
if (hr != S_OK) if (hr != S_OK)
{ {
@ -157,20 +157,19 @@ namespace usb_eyetoy
pEnum->Reset(); pEnum->Reset();
IMoniker* pMoniker; IMoniker* pMoniker = nullptr;
while (pEnum->Next(1, &pMoniker, NULL) == S_OK && sourcefilter == NULL) while (pEnum->Next(1, &pMoniker, NULL) == S_OK && sourcefilter == nullptr)
{ {
IPropertyBag* pPropBag = 0; IPropertyBag* pPropBag = nullptr;
hr = pMoniker->BindToStorage(0, 0, IID_PPV_ARGS(&pPropBag)); hr = pMoniker->BindToStorage(0, 0, IID_PPV_ARGS(&pPropBag));
if (FAILED(hr)) if (FAILED(hr))
{ {
Console.Warning("BindToStorage err : %x\n", hr); Console.Warning("BindToStorage err : %x", hr);
goto freeMoniker; goto freeMoniker;
} }
VARIANT var; VARIANT var;
VariantInit(&var); VariantInit(&var);
hr = pPropBag->Read(L"Description", &var, 0); hr = pPropBag->Read(L"Description", &var, 0);
if (FAILED(hr)) if (FAILED(hr))
{ {
@ -178,10 +177,10 @@ namespace usb_eyetoy
} }
if (FAILED(hr)) if (FAILED(hr))
{ {
Console.Warning("Read name err : %x\n", hr); Console.Warning("Read name err : %x", hr);
goto freeVar; goto freeVar;
} }
Console.Warning("Camera: '%ls'\n", var.bstrVal); Console.Warning("Camera: '%ls'", var.bstrVal);
if (!selectedDevice.empty() && selectedDevice != var.bstrVal) if (!selectedDevice.empty() && selectedDevice != var.bstrVal)
{ {
goto freeVar; goto freeVar;
@ -191,7 +190,7 @@ namespace usb_eyetoy
hr = pGraph->AddSourceFilterForMoniker(pMoniker, NULL, L"sourcefilter", &sourcefilter); hr = pGraph->AddSourceFilterForMoniker(pMoniker, NULL, L"sourcefilter", &sourcefilter);
if (FAILED(hr)) if (FAILED(hr))
{ {
Console.Warning("AddSourceFilterForMoniker err : %x\n", hr); Console.Warning("AddSourceFilterForMoniker err : %x", hr);
goto freeVar; goto freeVar;
} }
@ -210,7 +209,7 @@ namespace usb_eyetoy
VIDEO_STREAM_CONFIG_CAPS scc; VIDEO_STREAM_CONFIG_CAPS scc;
AM_MEDIA_TYPE* pmtConfig; AM_MEDIA_TYPE* pmtConfig;
hr = pSourceConfig->GetStreamCaps(iFormat, &pmtConfig, (BYTE*)&scc); hr = pSourceConfig->GetStreamCaps(iFormat, &pmtConfig, (BYTE*)&scc);
Console.Warning("GetStreamCaps min=%dx%d max=%dx%d, fmt=%x\n", Console.Warning("GetStreamCaps min=%dx%d max=%dx%d, fmt=%x",
scc.MinOutputSize.cx, scc.MinOutputSize.cy, scc.MinOutputSize.cx, scc.MinOutputSize.cy,
scc.MaxOutputSize.cx, scc.MaxOutputSize.cy, scc.MaxOutputSize.cx, scc.MaxOutputSize.cy,
pmtConfig->subtype); pmtConfig->subtype);
@ -220,7 +219,7 @@ namespace usb_eyetoy
if ((pmtConfig->majortype == MEDIATYPE_Video) && if ((pmtConfig->majortype == MEDIATYPE_Video) &&
(pmtConfig->formattype == FORMAT_VideoInfo) && (pmtConfig->formattype == FORMAT_VideoInfo) &&
(pmtConfig->cbFormat >= sizeof(VIDEOINFOHEADER)) && (pmtConfig->cbFormat >= sizeof(VIDEOINFOHEADER)) &&
(pmtConfig->pbFormat != NULL)) (pmtConfig->pbFormat != nullptr))
{ {
VIDEOINFOHEADER* pVih = (VIDEOINFOHEADER*)pmtConfig->pbFormat; VIDEOINFOHEADER* pVih = (VIDEOINFOHEADER*)pmtConfig->pbFormat;
@ -239,14 +238,14 @@ namespace usb_eyetoy
hr = CoCreateInstance(CLSID_SampleGrabber, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&samplegrabberfilter)); hr = CoCreateInstance(CLSID_SampleGrabber, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&samplegrabberfilter));
if (FAILED(hr)) if (FAILED(hr))
{ {
Console.Warning("CoCreateInstance CLSID_SampleGrabber err : %x\n", hr); Console.Warning("CoCreateInstance CLSID_SampleGrabber err : %x", hr);
goto freeVar; goto freeVar;
} }
hr = pGraph->AddFilter(samplegrabberfilter, L"samplegrabberfilter"); hr = pGraph->AddFilter(samplegrabberfilter, L"samplegrabberfilter");
if (FAILED(hr)) if (FAILED(hr))
{ {
Console.Warning("AddFilter samplegrabberfilter err : %x\n", hr); Console.Warning("AddFilter samplegrabberfilter err : %x", hr);
goto freeVar; goto freeVar;
} }
@ -254,7 +253,7 @@ namespace usb_eyetoy
hr = samplegrabberfilter->QueryInterface(IID_PPV_ARGS(&samplegrabber)); hr = samplegrabberfilter->QueryInterface(IID_PPV_ARGS(&samplegrabber));
if (FAILED(hr)) if (FAILED(hr))
{ {
Console.Warning("QueryInterface err : %x\n", hr); Console.Warning("QueryInterface err : %x", hr);
goto freeVar; goto freeVar;
} }
@ -265,7 +264,7 @@ namespace usb_eyetoy
hr = samplegrabber->SetMediaType(&mt); hr = samplegrabber->SetMediaType(&mt);
if (FAILED(hr)) if (FAILED(hr))
{ {
Console.Warning("SetMediaType err : %x\n", hr); Console.Warning("SetMediaType err : %x", hr);
goto freeVar; goto freeVar;
} }
@ -273,7 +272,7 @@ namespace usb_eyetoy
hr = samplegrabber->SetCallback(callbackhandler, 0); hr = samplegrabber->SetCallback(callbackhandler, 0);
if (hr != S_OK) if (hr != S_OK)
{ {
Console.Warning("SetCallback err : %x\n", hr); Console.Warning("SetCallback err : %x", hr);
goto freeVar; goto freeVar;
} }
@ -281,14 +280,14 @@ namespace usb_eyetoy
hr = CoCreateInstance(CLSID_NullRenderer, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&nullrenderer)); hr = CoCreateInstance(CLSID_NullRenderer, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&nullrenderer));
if (FAILED(hr)) if (FAILED(hr))
{ {
Console.Warning("CoCreateInstance CLSID_NullRenderer err : %x\n", hr); Console.Warning("CoCreateInstance CLSID_NullRenderer err : %x", hr);
goto freeVar; goto freeVar;
} }
hr = pGraph->AddFilter(nullrenderer, L"nullrenderer"); hr = pGraph->AddFilter(nullrenderer, L"nullrenderer");
if (FAILED(hr)) if (FAILED(hr))
{ {
Console.Warning("AddFilter nullrenderer err : %x\n", hr); Console.Warning("AddFilter nullrenderer err : %x", hr);
goto freeVar; goto freeVar;
} }
@ -296,7 +295,7 @@ namespace usb_eyetoy
hr = pGraphBuilder->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video, sourcefilter, samplegrabberfilter, nullrenderer); hr = pGraphBuilder->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video, sourcefilter, samplegrabberfilter, nullrenderer);
if (FAILED(hr)) if (FAILED(hr))
{ {
Console.Warning("RenderStream err : %x\n", hr); Console.Warning("RenderStream err : %x", hr);
goto freeVar; goto freeVar;
} }
@ -305,7 +304,7 @@ namespace usb_eyetoy
hr = pGraphBuilder->ControlStream(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video, sourcefilter, &start, &stop, 1, 2); hr = pGraphBuilder->ControlStream(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video, sourcefilter, &start, &stop, 1, 2);
if (FAILED(hr)) if (FAILED(hr))
{ {
Console.Warning("ControlStream err : %x\n", hr); Console.Warning("ControlStream err : %x", hr);
goto freeVar; goto freeVar;
} }
@ -317,7 +316,7 @@ namespace usb_eyetoy
pMoniker->Release(); pMoniker->Release();
} }
pEnum->Release(); pEnum->Release();
if (sourcefilter == NULL) if (sourcefilter == nullptr)
{ {
return -1; return -1;
} }
@ -376,7 +375,7 @@ namespace usb_eyetoy
} }
else else
{ {
Console.Warning("dshow_callback: unk format: len=%d bpp=%d\n", len, bitsperpixel); Console.Warning("dshow_callback: unk format: len=%d bpp=%d", len, bitsperpixel);
} }
} }
@ -408,14 +407,14 @@ namespace usb_eyetoy
DirectShow::DirectShow(int port) DirectShow::DirectShow(int port)
{ {
mPort = port; mPort = port;
pGraphBuilder = NULL; pGraphBuilder = nullptr;
pGraph = NULL; pGraph = nullptr;
pControl = NULL; pControl = nullptr;
sourcefilter = NULL; sourcefilter = nullptr;
samplegrabberfilter = NULL; samplegrabberfilter = nullptr;
nullrenderer = NULL; nullrenderer = nullptr;
pSourceConfig = NULL; pSourceConfig = nullptr;
samplegrabber = NULL; samplegrabber = nullptr;
callbackhandler = new CallbackHandler(); callbackhandler = new CallbackHandler();
CoInitialize(NULL); CoInitialize(NULL);
} }
@ -431,7 +430,7 @@ namespace usb_eyetoy
int ret = InitializeDevice(selectedDevice); int ret = InitializeDevice(selectedDevice);
if (ret < 0) if (ret < 0)
{ {
Console.Warning("Camera: cannot find '%ls'\n", selectedDevice.c_str()); Console.Warning("Camera: cannot find '%ls'", selectedDevice.c_str());
return -1; return -1;
} }
@ -445,7 +444,7 @@ namespace usb_eyetoy
int DirectShow::Close() int DirectShow::Close()
{ {
if (sourcefilter != NULL) if (sourcefilter != nullptr)
{ {
this->Stop(); this->Stop();
pControl->Stop(); pControl->Stop();
@ -455,16 +454,17 @@ namespace usb_eyetoy
samplegrabberfilter->Release(); samplegrabberfilter->Release();
samplegrabber->Release(); samplegrabber->Release();
nullrenderer->Release(); nullrenderer->Release();
sourcefilter = nullptr;
} }
pGraphBuilder->Release(); pGraphBuilder->Release();
pGraph->Release(); pGraph->Release();
pControl->Release(); pControl->Release();
if (mpeg_buffer.start != NULL) if (mpeg_buffer.start != nullptr)
{ {
free(mpeg_buffer.start); free(mpeg_buffer.start);
mpeg_buffer.start = NULL; mpeg_buffer.start = nullptr;
} }
return 0; return 0;
}; };