Commit 6032ab4f authored by Maarten Lankhorst's avatar Maarten Lankhorst Committed by Alexandre Julliard

qcap: Make the server directly register a filter instead of the workarounds.

parent 2849333f
......@@ -99,106 +99,6 @@ err_out:
}
/*
* SetupRegisterFilter through IFilterMapper2
*/
static HRESULT SetupRegisterFilter2(const AMOVIESETUP_FILTER * const pSetup,
IFilterMapper2 * pIFM2, BOOL bRegister)
{
HRESULT hr;
if (NULL == pSetup)
return S_FALSE;
/* unregister filter */
hr = IFilterMapper2_UnregisterFilter(pIFM2, 0, 0, pSetup->clsID);
if (bRegister)
{
REGFILTER2 rf2;
rf2.dwVersion = 1;
rf2.dwMerit = pSetup->dwMerit;
rf2.u.s.cPins = pSetup->nPins;
rf2.u.s.rgPins = pSetup->lpPin;
/* register filter */
hr = IFilterMapper2_RegisterFilter(pIFM2, pSetup->clsID,
pSetup->strName, 0, 0, NULL, &rf2);
}
else
{
/* filter not found is ignored here,
but there is no #define for 0x80070002 */
if (HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) == hr)
hr = NOERROR;
}
return hr;
}
/*
* SetupRegisterFilter through IFilterMapper
*/
static HRESULT SetupRegisterFilter(const AMOVIESETUP_FILTER * const pSetup,
IFilterMapper * pIFM, BOOL bRegister)
{
HRESULT hr;
if (NULL == pSetup)
return S_FALSE;
/* unregister filter */
hr = IFilterMapper_UnregisterFilter(pIFM, *pSetup->clsID);
if (bRegister)
{
/* register filter */
hr = IFilterMapper_RegisterFilter(pIFM, *pSetup->clsID,
pSetup->strName, pSetup->dwMerit);
if (SUCCEEDED(hr))
{
const AMOVIESETUP_PIN *lpPin = pSetup->lpPin;
const AMOVIESETUP_MEDIATYPE *lpType;
UINT i, j;
for (i = 0; i < pSetup->nPins; i++, lpPin++)
{
hr = IFilterMapper_RegisterPin(pIFM, *(pSetup->clsID),
lpPin->strName,
lpPin->bRendered,
lpPin->bOutput,
lpPin->bZero,
lpPin->bMany,
*(lpPin->clsConnectsToFilter),
lpPin->strConnectsToPin);
if (SUCCEEDED(hr))
{
lpType = lpPin->lpMediaType;
/* and each pin's media types */
for (j = 0; j < lpPin->nMediaTypes; j++, lpType++)
{
hr = IFilterMapper_RegisterPinType(pIFM, *(pSetup->clsID),
lpPin->strName,
*(lpType->clsMajorType),
*(lpType->clsMinorType));
if (FAILED(hr)) break;
}
if (FAILED(hr)) break;
}
if (FAILED(hr)) break;
}
}
}
else
{
/* filter not registered is ignored here, there is no definition for 0x80070002 */
if (HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) == hr)
hr = NOERROR;
}
return hr;
}
/*
* RegisterAllClasses()
*/
static HRESULT SetupRegisterAllClasses(const CFactoryTemplate * pList, int num,
......@@ -246,7 +146,6 @@ HRESULT SetupRegisterServers(const CFactoryTemplate * pList, int num,
static const WCHAR szFileName[] = {'q','c','a','p','.','d','l','l',0};
HRESULT hr = NOERROR;
IFilterMapper2 *pIFM2 = NULL;
IFilterMapper *pIFM = NULL;
/* first register all server classes, just to make sure */
if (bRegister)
......@@ -260,13 +159,6 @@ HRESULT SetupRegisterServers(const CFactoryTemplate * pList, int num,
TRACE("Getting IFilterMapper2\r\n");
hr = CoCreateInstance(&CLSID_FilterMapper2, NULL, CLSCTX_INPROC_SERVER,
&IID_IFilterMapper2, (void **)&pIFM2);
if (FAILED(hr))
{
TRACE("- trying IFilterMapper instead\r\n");
hr = CoCreateInstance(&CLSID_FilterMapper, NULL, CLSCTX_INPROC_SERVER,
&IID_IFilterMapper, (void **)&pIFM);
}
if (SUCCEEDED(hr))
{
......@@ -275,14 +167,9 @@ HRESULT SetupRegisterServers(const CFactoryTemplate * pList, int num,
/* scan through array of CFactoryTemplates registering all filters */
for (i = 0; i < num; i++, pList++)
{
if (NULL != pList->m_pAMovieSetup_Filter)
if (pList->m_pAMovieSetup_Filter.dwVersion)
{
if (pIFM2)
hr = SetupRegisterFilter2(pList->m_pAMovieSetup_Filter,
pIFM2, bRegister);
else
hr = SetupRegisterFilter(pList->m_pAMovieSetup_Filter,
pIFM, bRegister);
hr = IFilterMapper2_RegisterFilter(pIFM2, pList->m_ClsID, pList->m_Name, NULL, &CLSID_LegacyAmFilterCategory, NULL, &pList->m_pAMovieSetup_Filter);
}
/* check final error for this pass and break loop if we failed */
......@@ -291,10 +178,7 @@ HRESULT SetupRegisterServers(const CFactoryTemplate * pList, int num,
}
/* release interface */
if (pIFM2)
IFilterMapper2_Release(pIFM2);
else
IFilterMapper_Release(pIFM);
IFilterMapper2_Release(pIFM2);
}
/* and clear up */
......
......@@ -35,15 +35,6 @@ typedef REGFILTERPINS AMOVIESETUP_PIN,
* PAMOVIESETUP_PIN,
* LPAMOVIESETUP_PIN;
typedef struct _AMOVIESETUP_FILTER
{
const CLSID *clsID;
const WCHAR *strName;
DWORD dwMerit;
UINT nPins;
const AMOVIESETUP_PIN *lpPin;
} AMOVIESETUP_FILTER, * PAMOVIESETUP_FILTER, * LPAMOVIESETUP_FILTER;
/* This needs to go into Combase.h */
typedef IUnknown *(CALLBACK *LPFNNewCOMObject)(LPUNKNOWN pUnkOuter, HRESULT *phr);
typedef void (CALLBACK *LPFNInitRoutine)(BOOL bLoading, const CLSID *rclsid);
......@@ -53,7 +44,7 @@ typedef struct tagCFactoryTemplate {
const CLSID *m_ClsID;
LPFNNewCOMObject m_lpfnNew;
LPFNInitRoutine m_lpfnInit;
const AMOVIESETUP_FILTER *m_pAMovieSetup_Filter;
const REGFILTER2 m_pAMovieSetup_Filter;
} CFactoryTemplate;
/****************************************************************************
......
......@@ -83,79 +83,66 @@ static CFactoryTemplate const g_cTemplates[] = {
wAudioCaptureFilter,
&CLSID_AudioCaptureFilter,
QCAP_createAudioCaptureFilter,
NULL,
NULL
},{
wAVICompressor,
&CLSID_AVICompressor,
QCAP_createAVICompressor,
NULL,
NULL
},*/{
wVFWCaptFilter,
&CLSID_VfwCapture,
QCAP_createVFWCaptureFilter,
NULL,
NULL
},/*{
wVFWCaptFilterProp,
&CLSID_VFWCaptureFilterPropertyPage,
QCAP_createVFWCaptureFilterPropertyPage,
NULL,
NULL
},{
wAVIMux,
&CLSID_AVImux,
QCAP_createAVImux,
NULL,
NULL
},{
wAVIMuxPropPage,
&CLSID_AVImuxPropertyPage,
QCAP_createAVImuxPropertyPage,
NULL,
NULL
},{
wAVIMuxPropPage1,
&CLSID_AVImuxPropertyPage1,
QCAP_createAVImuxPropertyPage1,
NULL,
NULL
},{
wFileWriter,
&CLSID_FileWriter,
QCAP_createFileWriter,
NULL,
NULL
},*/{
wCaptGraphBuilder,
&CLSID_CaptureGraphBuilder,
QCAP_createCaptureGraphBuilder2,
NULL,
NULL
},{
wCaptGraphBuilder2,
&CLSID_CaptureGraphBuilder2,
QCAP_createCaptureGraphBuilder2,
NULL,
NULL
}/*,{
wInfPinTeeFilter,
&CLSID_InfinitePinTeeFilter,
QCAP_createInfinitePinTeeFilter,
NULL,
NULL
},{
wSmartTeeFilter,
&CLSID_SmartTeeFilter,
QCAP_createSmartTeeFilter,
NULL,
NULL
},{
wAudioInMixerProp,
&CLSID_AudioInputMixerPropertyPage,
QCAP_createAudioInputMixerPropertyPage,
NULL,
NULL
}*/
};
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment