mirror of https://github.com/PCSX2/pcsx2.git
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:
parent
271f60b65a
commit
bf8fb7bad6
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue