From 543a76d55fc8409113f730e0d6036ca632502770 Mon Sep 17 00:00:00 2001 From: Maarten Lankhorst Date: Tue, 22 Jul 2008 14:38:26 -0700 Subject: [PATCH] qcap: Make the server registration directly register a filter --- dlls/qcap/dllsetup.c | 122 +----------------------------------------------- dlls/qcap/dllsetup.h | 11 +---- dlls/qcap/qcap_main.c | 13 ----- 3 files changed, 4 insertions(+), 142 deletions(-) diff --git a/dlls/qcap/dllsetup.c b/dlls/qcap/dllsetup.c index 6aa1478..a732b73 100644 --- a/dlls/qcap/dllsetup.c +++ b/dlls/qcap/dllsetup.c @@ -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 */ diff --git a/dlls/qcap/dllsetup.h b/dlls/qcap/dllsetup.h index 4b587ac..d582b74 100644 --- a/dlls/qcap/dllsetup.h +++ b/dlls/qcap/dllsetup.h @@ -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; /**************************************************************************** diff --git a/dlls/qcap/qcap_main.c b/dlls/qcap/qcap_main.c index 0d29f58..e5c9e3b 100644 --- a/dlls/qcap/qcap_main.c +++ b/dlls/qcap/qcap_main.c @@ -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 }*/ }; -- 1.5.4.1