STDAPI DllUnregisterServer() { HRESULT hr; IFilterMapper2* locFilterMapper = NULL; hr = AMovieDllRegisterServer2(FALSE); if (FAILED(hr)) { return hr; } hr = CoCreateInstance(CLSID_FilterMapper2, NULL, CLSCTX_INPROC_SERVER, IID_IFilterMapper2, (void **)&locFilterMapper); if (FAILED(hr)) { return hr; } hr = locFilterMapper->UnregisterFilter(&CLSID_LegacyAmFilterCategory, L"Annodex Demux Source Filter", CLSID_AnxDemuxSourceFilter); // locFilterMapper->Release(); return hr; }
STDAPI RegisterFilters( BOOL bRegister ) { HRESULT hr = NOERROR; WCHAR achFileName[MAX_PATH]; char achTemp[MAX_PATH]; ASSERT(g_hInst != 0); if( 0 == GetModuleFileNameA(g_hInst, achTemp, sizeof(achTemp))) return AmHresultFromWin32(GetLastError()); MultiByteToWideChar(CP_ACP, 0L, achTemp, lstrlenA(achTemp) + 1, achFileName, NUMELMS(achFileName)); hr = CoInitialize(0); if(bRegister) { hr = AMovieSetupRegisterServer(CLSID_OgamaCaptureDesktop, L"OgamaCapture", achFileName, L"Both", L"InprocServer32"); } if( SUCCEEDED(hr) ) { IFilterMapper2 *fm = 0; hr = CreateComObject( CLSID_FilterMapper2, IID_IFilterMapper2, fm ); if( SUCCEEDED(hr) ) { if(bRegister) { IMoniker *pMoniker = 0; REGFILTER2 rf2; rf2.dwVersion = 1; rf2.dwMerit = MERIT_DO_NOT_USE; rf2.cPins = 1; rf2.rgPins = &sudOutputPinDesktop; // this is the name that actually shows up in VLC et al. weird hr = fm->RegisterFilter(CLSID_OgamaCaptureDesktop, L"OgamaCapture", &pMoniker, &CLSID_VideoInputDeviceCategory, NULL, &rf2); } else { hr = fm->UnregisterFilter(&CLSID_VideoInputDeviceCategory, 0, CLSID_OgamaCaptureDesktop); } } // release interface // if(fm) fm->Release(); } if( SUCCEEDED(hr) && !bRegister ) hr = AMovieSetupUnregisterServer( CLSID_OgamaCaptureDesktop ); CoFreeUnusedLibraries(); CoUninitialize(); return hr; }
// // DllUnregisterServer // STDAPI DllUnregisterServer() { CoInitialize(0); IFilterMapper2 *fm = NULL; HRESULT hr = CoCreateInstance(CLSID_FilterMapper2, NULL, CLSCTX_INPROC_SERVER, IID_IFilterMapper2,(LPVOID*)&fm); if( FAILED(hr) ) { CoFreeUnusedLibraries(); CoUninitialize(); return AMovieDllRegisterServer2(FALSE); } fm->UnregisterFilter(&CLSID_VideoInputDeviceCategory, g_videoName, CLSID_OpenNIVideo); return AMovieDllRegisterServer2(FALSE); } // DllUnregisterServer