void CPPageExternalFilters::OnDoubleClickFilter() { if (FilterOverride* f = GetCurFilter()) { CComPtr<IBaseFilter> pBF; CString name; if (f->type == FilterOverride::REGISTERED) { CStringW namew; if (CreateFilter(f->dispname, &pBF, namew)) { name = namew; } } else if (f->type == FilterOverride::EXTERNAL) { if (SUCCEEDED(LoadExternalFilter(f->path, f->clsid, &pBF))) { name = f->name; } } if (CComQIPtr<ISpecifyPropertyPages> pSPP = pBF) { CComPropertySheet ps(name, this); if (ps.AddPages(pSPP) > 0) { CComPtr<IFilterGraph> pFG; if (SUCCEEDED(pFG.CoCreateInstance(CLSID_FilterGraph))) { pFG->AddFilter(pBF, L""); } ps.DoModal(); } } } }
HRESULT CDSFilters::CreateFilter(DSFilterInfo* pInfo, IBaseFilter** ppBF, CInterfaceList<IUnknown, &IID_IUnknown>& pUnks) { HRESULT hr = S_OK; // check exist //IsCodecExist(); // download //DownloadCodec(); // create instance IBaseFilter* pBF = NULL; if (pInfo->pathflag.CompareNoCase(_T("codecs"))) { hr = LoadExternalFilter(pInfo->path, pInfo->clsid, &pBF); } return hr; }