Vitaliy Margolen : dxdiagn: DirectShowFilters should go under numbered sub-containers.

Alexandre Julliard julliard at winehq.org
Mon May 18 08:13:13 CDT 2009


Module: wine
Branch: master
Commit: 806ea86be2f2f1bbea09d39b242816624bef2b26
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=806ea86be2f2f1bbea09d39b242816624bef2b26

Author: Vitaliy Margolen <wine-patches at 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;
 	}




More information about the wine-cvs mailing list