[QUARTZ] Add implementation for IFilterMapper interface

Christian Costa titan.costa at wanadoo.fr
Sat Feb 28 17:10:30 CST 2004


Robert Shearman wrote:

>Christian Costa wrote:
>  
>
>>Hi,
>>
>>This patch adds implementation for the IFilterMapper interface.
>>    
>>
>
>Nice. I have few comments (see below).
>
>  
>
>>However filters registered with this interface require some work in
>>devenum to
>>be seen from application. This will be done when time permits.
>>    
>>
>
>Ok. I had assumed devenum was complete, but obviously not. Does it spit out
>any fixme's?
>  
>
No, it doesn't.

In fact, Devenum enumerates entries in:
1) HROOT\CLSID\{"clsid of categories"]\Instance
2) HCURRENTUSER\Software\Microsoft\ActiveMovie\devenum

For Direct Show filters, Devenum retreives filters registered with 
IFilterMapper and recreates entries in ....\devenum
so when enumerating filters  we get the IFilterMapper2 filters followed 
by IFilterMapper ones.
I think this is the same for ICM and ACM filters.

The current code only do 1 or 2 but not both at the same time.

>
>...
>
>  
>
>>@@ -879,7 +893,7 @@
>>             if (SUCCEEDED(hrSub))
>>                 hrSub =
>>ICreateDevEnum_CreateClassEnumerator(pCreateDevEnum, &clsidCat,
>>&pEnum, 0);
>>
>>-            if (SUCCEEDED(hrSub))
>>+            if (SUCCEEDED(hrSub) && (hrSub == S_OK))
>>    
>>
>
>You can remove the SUCCEEDED(hrSub) completely here.
>
>...
>
He! Right! :-)

>
>  
>
>>+        if (SUCCEEDED(hrSub))
>>+	{
>>+	    len = (strlenW((WCHAR*)&V_UNION(&var, bstrVal))+1) *
>>sizeof(WCHAR);
>>+	    if (!(regfilters[idx].Name = CoTaskMemAlloc(len*2)))
>>+		hr = E_OUTOFMEMORY;
>>+	}
>>+
>>+        if (SUCCEEDED(hrSub))
>>+	{
>>+	    memcpy(regfilters[idx].Name, &V_UNION(&var, bstrVal), len);
>>+	    regfilters[idx].Clsid = clsid;
>>+	    idx++;
>>+	}
>>    
>>
>
>Indentation messed up a bit here and many other places.
>  
>
Ok! I will fix that.

>...
>  
>
>>+    if (cFetched > 0)
>>+    {
>>+	for(i = 0; i < cFetched; i++) {
>>+	    /* The string in the REGFILTER structure must be
>>allocated in the same block as the REGFILTER structure itself */
>>+            ppRegFilter[i] =
>>(REGFILTER*)CoTaskMemAlloc(sizeof(REGFILTER)+(strlenW(This->RegFil
>>ters[i].Name)+1)*sizeof(WCHAR));
>>+	    if (!ppRegFilter[i]) {
>>+		while(i) {
>>+		    CoTaskMemFree(ppRegFilter[--i]);
>>+		    ppRegFilter[i] = NULL;
>>+		}
>>+		return E_OUTOFMEMORY;
>>+	    }
>>+	    ppRegFilter[i]->Clsid = This->RegFilters[i].Clsid;
>>+	    ppRegFilter[i]->Name =
>>(WCHAR*)((char*)ppRegFilter[i]+sizeof(REGFILTER));
>>+	    CopyMemory(ppRegFilter[i]->Name,
>>This->RegFilters[i].Name,
>>(strlenW(This->RegFilters[i].Name)+1)*sizeof(WCHAR));
>>+	}
>>    
>>
>
>Please choose one style of bracket placement and stick to it (this occurs in
>a few places too).
>
I tried to stick to your style. It seems I forgot some brackets. :-)

>
>Other than these things, it looks fine.
>
>Rob
>
>
>  
>
Fine.
Thanks Rob,
Christian





More information about the wine-devel mailing list