Module: wine Branch: master Commit: 806ea86be2f2f1bbea09d39b242816624bef2b26 URL: http://source.winehq.org/git/wine.git/?a=commit;h=806ea86be2f2f1bbea09d39b24...
Author: Vitaliy Margolen wine-patches@kievinfo.com Date: Sun May 17 16:02:22 2009 -0600
dxdiagn: DirectShowFilters should go under numbered sub-containers.
---
dlls/dxdiagn/provider.c | 31 ++++++++++++++++++++++--------- 1 files changed, 22 insertions(+), 9 deletions(-)
diff --git a/dlls/dxdiagn/provider.c b/dlls/dxdiagn/provider.c index a6d1066..d3f0a26 100644 --- a/dlls/dxdiagn/provider.c +++ b/dlls/dxdiagn/provider.c @@ -613,9 +613,11 @@ static HRESULT DXDiag_InitDXDiagDirectShowFiltersContainer(IDxDiagContainer* pSu static const WCHAR wszClsidName[] = {'C','L','S','I','D',0}; static const WCHAR wszFriendlyName[] = {'F','r','i','e','n','d','l','y','N','a','m','e',0}; static const WCHAR wszFilterDataName[] = {'F','i','l','t','e','r','D','a','t','a',0}; - /*static const WCHAR wszMeritName[] = {'M','e','r','i','t',0};*/
static const WCHAR szVersionFormat[] = {'v','%','d',0}; + static const WCHAR szIdFormat[] = {'%','d',0}; + int i = 0; +
ICreateDevEnum* pCreateDevEnum = NULL; IEnumMoniker* pEmCat = NULL; @@ -676,28 +678,37 @@ static HRESULT DXDiag_InitDXDiagDirectShowFiltersContainer(IDxDiagContainer* pSu DWORD dwNOutputs = 0; DWORD dwNInputs = 0; WCHAR bufferW[10]; + IDxDiagContainer *pDShowSubCont = NULL;
- add_prop_str(pSubCont, szCatName, wszCatName); - add_prop_str(pSubCont, ClsidCatW, wszCatClsid); + snprintfW(bufferW, sizeof(bufferW)/sizeof(bufferW[0]), szIdFormat, i); + if (FAILED(DXDiag_CreateDXDiagContainer(&IID_IDxDiagContainer, (void**) &pDShowSubCont)) || + FAILED(IDxDiagContainerImpl_AddChildContainer(pSubCont, bufferW, pDShowSubCont))) + { + IPropertyBag_Release(pPropFilterBag); + if (pDShowSubCont) IUnknown_Release(pDShowSubCont); + continue; + }
hr = IPropertyBag_Read(pPropFilterBag, wszFriendlyName, &v, 0); - hr = IDxDiagContainerImpl_AddProp(pSubCont, szName, &v); + hr = IDxDiagContainerImpl_AddProp(pDShowSubCont, szName, &v); TRACE("\tName:%s\n", debugstr_w(V_BSTR(&v))); VariantClear(&v);
hr = IPropertyBag_Read(pPropFilterBag, wszClsidName, &v, 0); TRACE("\tClsid:%s\n", debugstr_w(V_BSTR(&v))); - hr = IDxDiagContainerImpl_AddProp(pSubCont, ClsidFilterW, &v); + hr = IDxDiagContainerImpl_AddProp(pDShowSubCont, ClsidFilterW, &v); VariantClear(&v);
+ add_prop_str(pDShowSubCont, szCatName, wszCatName); + add_prop_str(pDShowSubCont, ClsidCatW, wszCatClsid); + hr = IPropertyBag_Read(pPropFilterBag, wszFilterDataName, &v, NULL); hr = SafeArrayAccessData(V_UNION(&v, parray), (LPVOID*) &pData); prrf = (struct REG_RF*) pData; pCurrent = pData;
snprintfW(bufferW, sizeof(bufferW)/sizeof(bufferW[0]), szVersionFormat, prrf->dwVersion); - add_prop_str(pSubCont, szVersionW, bufferW); - add_prop_ui4(pSubCont, dwMerit, prrf->dwMerit); + add_prop_str(pDShowSubCont, szVersionW, bufferW);
pCurrent += sizeof(struct REG_RF); for (it = 0; it < prrf->dwPins; ++it) { @@ -721,11 +732,13 @@ static HRESULT DXDiag_InitDXDiagDirectShowFiltersContainer(IDxDiagContainer* pSu } }
- add_prop_ui4(pSubCont, dwInputs, dwNInputs); - add_prop_ui4(pSubCont, dwOutputs, dwNOutputs); + add_prop_ui4(pDShowSubCont, dwInputs, dwNInputs); + add_prop_ui4(pDShowSubCont, dwOutputs, dwNOutputs); + add_prop_ui4(pDShowSubCont, dwMerit, prrf->dwMerit);
SafeArrayUnaccessData(V_UNION(&v, parray)); VariantClear(&v); + i++; } IPropertyBag_Release(pPropFilterBag); pPropFilterBag = NULL; }