ConvolverFilter uses the standard DirectoShow filter classes provided by MS, so you will will want to make it work.
ConvolverWrapper wraps a DMO and is based on the DScaler5 code.
Once you have got past the threading issue, if it really is one, be aware that ConvolverWrapper/Filter should reject any solicitations until a filter is loaded (either as a WAV file or config file) because it is not until it has a filter that it can tell how many channels and sample rate it is using.
However, you should be able to pick it up as a filter that accepts audio:
const REGPINTYPES sudPinTypes[] =
{
{&MEDIATYPE_Audio, &MEDIASUBTYPE_NULL}
};
const REGFILTERPINS sudpPins[] =
{
{
L"Input", // Pins string name
FALSE, // Is it rendered
FALSE, // Is it an output
FALSE, // Are we allowed none
FALSE, // And allowed many
&CLSID_NULL, // Connects to filter
NULL, // Connects to pin
1, // Number of types
sudPinTypes // Pin information
},
{
L"Output", // Pins string name
FALSE, // Is it rendered
TRUE, // Is it an output
FALSE, // Are we allowed none
FALSE, // And allowed many
&CLSID_NULL, // Connects to filter
NULL, // Connects to pin
1, // Number of types
sudPinTypes // Pin information
}
};
const AMOVIESETUP_FILTER sudconvolverFilter =
{
&CLSID_convolverFilter, // Filter CLSID
TRANSFORM_NAME, // String name
MERIT_DO_NOT_USE+1, // Filter merit
2, // Number of pins
sudpPins // Pin information
};
:
STDAPI DllRegisterServer(void)
{
HRESULT hr = AMovieDllRegisterServer2(TRUE);
if (FAILED(hr))
{
return hr;
}
IFilterMapper2 *pFM2 = NULL;
hr = CoCreateInstance(CLSID_FilterMapper2, NULL, CLSCTX_INPROC_SERVER,
IID_IFilterMapper2, (void **)&pFM2);
if (SUCCEEDED(hr))
{
// Declare filter information
const REGFILTER2 rf2convolverFilterReg =
{
1, // Version number
MERIT_DO_NOT_USE+1, // Filter merit
2, // Number of pins
sudpPins // Pin information
};
hr = pFM2->RegisterFilter(
CLSID_convolverFilter, // Filter CLSID.
TRANSFORM_NAME, // Filter name.
NULL, // Device moniker.
&CLSID_LegacyAmFilterCategory, // DirectShow filter
NULL, // Instance data.
&rf2convolverFilterReg // Filter information.
);
pFM2->Release();
}