From 7e6947a940b7b7f41b9949016c43bc201b66eaa1 Mon Sep 17 00:00:00 2001 From: Martijn Liem Date: Wed, 23 Jul 2014 12:33:51 +0200 Subject: [PATCH] Bugfix for bug #3767 Fixed a memory leak in cap_dshow.cpp in videoInput::setVideoSettingCamera(). The leak was caused by not releasing an IBaseFilter object created in a call to getDevice(). Tho object is now properly released. Conflicts: modules/highgui/src/cap_dshow.cpp --- modules/videoio/src/cap_dshow.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/modules/videoio/src/cap_dshow.cpp b/modules/videoio/src/cap_dshow.cpp index c8c63fcb75..88814c83e1 100644 --- a/modules/videoio/src/cap_dshow.cpp +++ b/modules/videoio/src/cap_dshow.cpp @@ -1839,6 +1839,8 @@ bool videoInput::setVideoSettingCamera(int deviceID, long Property, long lValue, hr = VDList[deviceID]->pVideoInputFilter->QueryInterface(IID_IAMCameraControl, (void**)&pIAMCameraControl); if (FAILED(hr)) { DebugPrintOut("Error\n"); + if(VDList[deviceID]->pVideoInputFilter)VDList[deviceID]->pVideoInputFilter->Release(); + if(VDList[deviceID]->pVideoInputFilter)VDList[deviceID]->pVideoInputFilter = NULL; return false; } else @@ -1857,6 +1859,8 @@ bool videoInput::setVideoSettingCamera(int deviceID, long Property, long lValue, pIAMCameraControl->Set(Property, lValue, Flags); } pIAMCameraControl->Release(); + if(VDList[deviceID]->pVideoInputFilter)VDList[deviceID]->pVideoInputFilter->Release(); + if(VDList[deviceID]->pVideoInputFilter)VDList[deviceID]->pVideoInputFilter = NULL; return true; } }