[PATCH 1/6] quartz: Support IFilterMapper3 interface
Maarten Lankhorst
m.b.lankhorst at gmail.com
Fri Dec 3 02:38:08 CST 2010
---
dlls/quartz/filtermapper.c | 124 ++++++++++++++++++++++++--------------------
1 files changed, 67 insertions(+), 57 deletions(-)
diff --git a/dlls/quartz/filtermapper.c b/dlls/quartz/filtermapper.c
index aeacfac..30434db 100644
--- a/dlls/quartz/filtermapper.c
+++ b/dlls/quartz/filtermapper.c
@@ -1,5 +1,5 @@
/*
- * IFilterMapper & IFilterMapper2 Implementations
+ * IFilterMapper & IFilterMapper3 Implementations
*
* Copyright 2003 Robert Shearman
* Copyright 2004 Christian Costa
@@ -86,9 +86,9 @@ static const GUID IID_IAMFilterData = {
};
-typedef struct FilterMapper2Impl
+typedef struct FilterMapper3Impl
{
- const IFilterMapper2Vtbl *lpVtbl;
+ const IFilterMapper3Vtbl *lpVtbl;
const IFilterMapperVtbl *lpVtblFilterMapper;
const IAMFilterDataVtbl *lpVtblAMFilterData;
const IUnknownVtbl *IInner_vtbl;
@@ -96,26 +96,26 @@ typedef struct FilterMapper2Impl
IUnknown * pUnkOuter;
BOOL bUnkOuterValid;
BOOL bAggregatable;
-} FilterMapper2Impl;
+} FilterMapper3Impl;
static const IUnknownVtbl IInner_VTable;
-static const IFilterMapper2Vtbl fm2vtbl;
+static const IFilterMapper3Vtbl fm3vtbl;
static const IFilterMapperVtbl fmvtbl;
static const IAMFilterDataVtbl AMFilterDataVtbl;
-static inline FilterMapper2Impl *impl_from_IFilterMapper( IFilterMapper *iface )
+static inline FilterMapper3Impl *impl_from_IFilterMapper( IFilterMapper *iface )
{
- return (FilterMapper2Impl *)((char*)iface - FIELD_OFFSET(FilterMapper2Impl, lpVtblFilterMapper));
+ return (FilterMapper3Impl *)((char*)iface - FIELD_OFFSET(FilterMapper3Impl, lpVtblFilterMapper));
}
-static inline FilterMapper2Impl *impl_from_IAMFilterData( IAMFilterData *iface )
+static inline FilterMapper3Impl *impl_from_IAMFilterData( IAMFilterData *iface )
{
- return (FilterMapper2Impl *)((char*)iface - FIELD_OFFSET(FilterMapper2Impl, lpVtblAMFilterData));
+ return (FilterMapper3Impl *)((char*)iface - FIELD_OFFSET(FilterMapper3Impl, lpVtblAMFilterData));
}
-static inline FilterMapper2Impl *impl_from_inner_IUnknown( IUnknown *iface )
+static inline FilterMapper3Impl *impl_from_inner_IUnknown( IUnknown *iface )
{
- return (FilterMapper2Impl *)((char*)iface - FIELD_OFFSET(FilterMapper2Impl, IInner_vtbl));
+ return (FilterMapper3Impl *)((char*)iface - FIELD_OFFSET(FilterMapper3Impl, IInner_vtbl));
}
static const WCHAR wszClsidSlash[] = {'C','L','S','I','D','\\',0};
@@ -220,7 +220,7 @@ static void delete_vector(struct Vector * v)
HRESULT FilterMapper2_create(IUnknown *pUnkOuter, LPVOID *ppObj)
{
- FilterMapper2Impl * pFM2impl;
+ FilterMapper3Impl * pFM2impl;
TRACE("(%p, %p)\n", pUnkOuter, ppObj);
@@ -232,7 +232,7 @@ HRESULT FilterMapper2_create(IUnknown *pUnkOuter, LPVOID *ppObj)
pFM2impl->bUnkOuterValid = FALSE;
pFM2impl->bAggregatable = FALSE;
pFM2impl->IInner_vtbl = &IInner_VTable;
- pFM2impl->lpVtbl = &fm2vtbl;
+ pFM2impl->lpVtbl = &fm3vtbl;
pFM2impl->lpVtblFilterMapper = &fmvtbl;
pFM2impl->lpVtblAMFilterData = &AMFilterDataVtbl;
pFM2impl->refCount = 1;
@@ -246,7 +246,7 @@ HRESULT FilterMapper2_create(IUnknown *pUnkOuter, LPVOID *ppObj)
HRESULT FilterMapper_create(IUnknown *pUnkOuter, LPVOID *ppObj)
{
- FilterMapper2Impl *pFM2impl;
+ FilterMapper3Impl *pFM2impl;
HRESULT hr;
TRACE("(%p, %p)\n", pUnkOuter, ppObj);
@@ -264,7 +264,7 @@ HRESULT FilterMapper_create(IUnknown *pUnkOuter, LPVOID *ppObj)
static HRESULT WINAPI Inner_QueryInterface(IUnknown * iface, REFIID riid, LPVOID * ppv)
{
- FilterMapper2Impl *This = impl_from_inner_IUnknown(iface);
+ FilterMapper3Impl *This = impl_from_inner_IUnknown(iface);
TRACE("(%p)->(%s, %p)\n", This, debugstr_guid(riid), ppv);
if (This->bAggregatable)
@@ -274,7 +274,8 @@ static HRESULT WINAPI Inner_QueryInterface(IUnknown * iface, REFIID riid, LPVOID
if (IsEqualIID(riid, &IID_IUnknown))
*ppv = &This->IInner_vtbl;
- else if (IsEqualIID(riid, &IID_IFilterMapper2))
+ else if (IsEqualIID(riid, &IID_IFilterMapper2) ||
+ IsEqualIID(riid, &IID_IFilterMapper3))
*ppv = This;
else if (IsEqualIID(riid, &IID_IFilterMapper))
*ppv = &This->lpVtblFilterMapper;
@@ -293,7 +294,7 @@ static HRESULT WINAPI Inner_QueryInterface(IUnknown * iface, REFIID riid, LPVOID
static ULONG WINAPI Inner_AddRef(IUnknown * iface)
{
- FilterMapper2Impl *This = impl_from_inner_IUnknown(iface);
+ FilterMapper3Impl *This = impl_from_inner_IUnknown(iface);
ULONG refCount = InterlockedIncrement(&This->refCount);
TRACE("(%p)->() AddRef from %d\n", This, refCount - 1);
@@ -303,7 +304,7 @@ static ULONG WINAPI Inner_AddRef(IUnknown * iface)
static ULONG WINAPI Inner_Release(IUnknown * iface)
{
- FilterMapper2Impl *This = impl_from_inner_IUnknown(iface);
+ FilterMapper3Impl *This = impl_from_inner_IUnknown(iface);
ULONG refCount = InterlockedDecrement(&This->refCount);
TRACE("(%p)->() Release from %d\n", This, refCount + 1);
@@ -323,9 +324,9 @@ static const IUnknownVtbl IInner_VTable =
Inner_Release
};
-static HRESULT WINAPI FilterMapper2_QueryInterface(IFilterMapper2 * iface, REFIID riid, LPVOID *ppv)
+static HRESULT WINAPI FilterMapper3_QueryInterface(IFilterMapper3 * iface, REFIID riid, LPVOID *ppv)
{
- FilterMapper2Impl *This = (FilterMapper2Impl *)iface;
+ FilterMapper3Impl *This = (FilterMapper3Impl *)iface;
if (This->bAggregatable)
This->bUnkOuterValid = TRUE;
@@ -353,28 +354,28 @@ static HRESULT WINAPI FilterMapper2_QueryInterface(IFilterMapper2 * iface, REFII
return IUnknown_QueryInterface((IUnknown *)&(This->IInner_vtbl), riid, ppv);
}
-static ULONG WINAPI FilterMapper2_AddRef(IFilterMapper2 * iface)
+static ULONG WINAPI FilterMapper3_AddRef(IFilterMapper3 * iface)
{
- FilterMapper2Impl *This = (FilterMapper2Impl *)iface;
+ FilterMapper3Impl *This = (FilterMapper3Impl *)iface;
if (This->pUnkOuter && This->bUnkOuterValid)
return IUnknown_AddRef(This->pUnkOuter);
return IUnknown_AddRef((IUnknown *)&(This->IInner_vtbl));
}
-static ULONG WINAPI FilterMapper2_Release(IFilterMapper2 * iface)
+static ULONG WINAPI FilterMapper3_Release(IFilterMapper3 * iface)
{
- FilterMapper2Impl *This = (FilterMapper2Impl *)iface;
+ FilterMapper3Impl *This = (FilterMapper3Impl *)iface;
if (This->pUnkOuter && This->bUnkOuterValid)
return IUnknown_Release(This->pUnkOuter);
return IUnknown_Release((IUnknown *)&(This->IInner_vtbl));
}
-/*** IFilterMapper2 methods ***/
+/*** IFilterMapper3 methods ***/
-static HRESULT WINAPI FilterMapper2_CreateCategory(
- IFilterMapper2 * iface,
+static HRESULT WINAPI FilterMapper3_CreateCategory(
+ IFilterMapper3 * iface,
REFCLSID clsidCategory,
DWORD dwCategoryMerit,
LPCWSTR szDescription)
@@ -431,8 +432,8 @@ static HRESULT WINAPI FilterMapper2_CreateCategory(
return hr;
}
-static HRESULT WINAPI FilterMapper2_UnregisterFilter(
- IFilterMapper2 * iface,
+static HRESULT WINAPI FilterMapper3_UnregisterFilter(
+ IFilterMapper3 * iface,
const CLSID *pclsidCategory,
const OLECHAR *szInstance,
REFCLSID Filter)
@@ -740,8 +741,8 @@ static void FM2_DeleteRegFilter(REGFILTER2 * prf2)
CoTaskMemFree((LPVOID)prf2->u.s1.rgPins2);
}
-static HRESULT WINAPI FilterMapper2_RegisterFilter(
- IFilterMapper2 * iface,
+static HRESULT WINAPI FilterMapper3_RegisterFilter(
+ IFilterMapper3 * iface,
REFCLSID clsidFilter,
LPCWSTR szName,
IMoniker **ppMoniker,
@@ -992,8 +993,8 @@ static int mm_compare(const void * left, const void * right)
* meaning match any input/output pin as long as one exists), otherwise match any
* filter that meets the rest of the requirements.
*/
-static HRESULT WINAPI FilterMapper2_EnumMatchingFilters(
- IFilterMapper2 * iface,
+static HRESULT WINAPI FilterMapper3_EnumMatchingFilters(
+ IFilterMapper3 * iface,
IEnumMoniker **ppEnum,
DWORD dwFlags,
BOOL bExactMatch,
@@ -1204,42 +1205,51 @@ static HRESULT WINAPI FilterMapper2_EnumMatchingFilters(
return hr;
}
-static const IFilterMapper2Vtbl fm2vtbl =
+static HRESULT WINAPI FilterMapper3_GetICreateDevEnum(IFilterMapper3 *iface, ICreateDevEnum **ppEnum)
+{
+ TRACE("(%p, %p)\n", iface, ppEnum);
+ if (!ppEnum)
+ return E_POINTER;
+ return CoCreateInstance(&CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC, &IID_ICreateDevEnum, (void**)ppEnum);
+}
+
+static const IFilterMapper3Vtbl fm3vtbl =
{
- FilterMapper2_QueryInterface,
- FilterMapper2_AddRef,
- FilterMapper2_Release,
+ FilterMapper3_QueryInterface,
+ FilterMapper3_AddRef,
+ FilterMapper3_Release,
- FilterMapper2_CreateCategory,
- FilterMapper2_UnregisterFilter,
- FilterMapper2_RegisterFilter,
- FilterMapper2_EnumMatchingFilters
+ FilterMapper3_CreateCategory,
+ FilterMapper3_UnregisterFilter,
+ FilterMapper3_RegisterFilter,
+ FilterMapper3_EnumMatchingFilters,
+ FilterMapper3_GetICreateDevEnum
};
/*** IUnknown methods ***/
static HRESULT WINAPI FilterMapper_QueryInterface(IFilterMapper * iface, REFIID riid, LPVOID *ppv)
{
- FilterMapper2Impl *This = impl_from_IFilterMapper(iface);
+ FilterMapper3Impl *This = impl_from_IFilterMapper(iface);
TRACE("(%p)->(%s, %p)\n", This, debugstr_guid(riid), ppv);
- return FilterMapper2_QueryInterface((IFilterMapper2*)&This->lpVtbl, riid, ppv);
+ return FilterMapper3_QueryInterface((IFilterMapper3*)&This->lpVtbl, riid, ppv);
}
static ULONG WINAPI FilterMapper_AddRef(IFilterMapper * iface)
{
- FilterMapper2Impl *This = impl_from_IFilterMapper(iface);
+ FilterMapper3Impl *This = impl_from_IFilterMapper(iface);
- return FilterMapper2_AddRef((IFilterMapper2*)This);
+ return FilterMapper3_AddRef((IFilterMapper3*)This);
}
static ULONG WINAPI FilterMapper_Release(IFilterMapper * iface)
{
- FilterMapper2Impl *This = impl_from_IFilterMapper(iface);
+ FilterMapper3Impl *This = impl_from_IFilterMapper(iface);
- return FilterMapper2_Release((IFilterMapper2*)This);
+ return FilterMapper3_Release((IFilterMapper3*)This);
}
/*** IFilterMapper methods ***/
@@ -1256,7 +1266,7 @@ static HRESULT WINAPI FilterMapper_EnumMatchingFilters(
CLSID clsOutMaj,
CLSID clsOutSub)
{
- FilterMapper2Impl *This = impl_from_IFilterMapper(iface);
+ FilterMapper3Impl *This = impl_from_IFilterMapper(iface);
GUID InputType[2];
GUID OutputType[2];
IEnumMoniker* ppEnumMoniker;
@@ -1285,7 +1295,7 @@ static HRESULT WINAPI FilterMapper_EnumMatchingFilters(
*ppEnum = NULL;
- hr = IFilterMapper2_EnumMatchingFilters((IFilterMapper2*)This,
+ hr = IFilterMapper3_EnumMatchingFilters((IFilterMapper3*)This,
&ppEnumMoniker,
0,
TRUE,
@@ -1745,23 +1755,23 @@ static const IFilterMapperVtbl fmvtbl =
/*** IUnknown methods ***/
static HRESULT WINAPI AMFilterData_QueryInterface(IAMFilterData * iface, REFIID riid, LPVOID *ppv)
{
- FilterMapper2Impl *This = impl_from_IAMFilterData(iface);
+ FilterMapper3Impl *This = impl_from_IAMFilterData(iface);
- return FilterMapper2_QueryInterface((IFilterMapper2*)This, riid, ppv);
+ return FilterMapper3_QueryInterface((IFilterMapper3*)This, riid, ppv);
}
static ULONG WINAPI AMFilterData_AddRef(IAMFilterData * iface)
{
- FilterMapper2Impl *This = impl_from_IAMFilterData(iface);
+ FilterMapper3Impl *This = impl_from_IAMFilterData(iface);
- return FilterMapper2_AddRef((IFilterMapper2*)This);
+ return FilterMapper3_AddRef((IFilterMapper3*)This);
}
static ULONG WINAPI AMFilterData_Release(IAMFilterData * iface)
{
- FilterMapper2Impl *This = impl_from_IAMFilterData(iface);
+ FilterMapper3Impl *This = impl_from_IAMFilterData(iface);
- return FilterMapper2_Release((IFilterMapper2*)This);
+ return FilterMapper3_Release((IFilterMapper3*)This);
}
/*** IAMFilterData methods ***/
@@ -1769,7 +1779,7 @@ static HRESULT WINAPI AMFilterData_ParseFilterData(IAMFilterData* iface,
BYTE *pData, ULONG cb,
BYTE **ppRegFilter2)
{
- FilterMapper2Impl *This = impl_from_IAMFilterData(iface);
+ FilterMapper3Impl *This = impl_from_IAMFilterData(iface);
HRESULT hr = S_OK;
REGFILTER2 *prf2;
@@ -1795,7 +1805,7 @@ static HRESULT WINAPI AMFilterData_CreateFilterData(IAMFilterData* iface,
BYTE **pRegFilterData,
ULONG *pcb)
{
- FilterMapper2Impl *This = impl_from_IAMFilterData(iface);
+ FilterMapper3Impl *This = impl_from_IAMFilterData(iface);
TRACE("(%p/%p)->(%p, %p, %p)\n", This, iface, prf2, pRegFilterData, pcb);
--
1.7.1
More information about the wine-patches
mailing list