我在DirectShow中创建了一个名为decryption的自定义过滤器,但是当使用GraphStudioNext时,尝试将MP4的输出连接到我的自定义过滤器的输入时,给我一个“VFW_E_NO_ACCEPTABLE_TYPES(0x80040207)”。
// Media Types
const AMOVIESETUP_MEDIATYPE sudPinTypes =
{
&MEDIATYPE_Stream,
&MEDIASUBTYPE_NULL
};
// Pins
const AMOVIESETUP_PIN psudPins[] =
{
{ L"Input", FALSE, FALSE, FALSE, FALSE, &CLSID_NULL, L"Output", 1, &sudPinTypes },
{ L"Output", FALSE, TRUE, FALSE, FALSE, &CLSID_NULL, L"Input", 1, &sudPinTypes }
};
// Filters
const AMOVIESETUP_FILTER sudAudioVolume =
{
&CLSID_Decryption,
L"Decryption",
MERIT_NORMAL,
2,
psudPins
};
HRESULT DecryptionFilter::CheckInputType(const CMediaType *mtIn)
{
//Streaming
if (mtIn->majortype != MEDIATYPE_Stream) return E_FAIL;
if (mtIn->subtype != MEDIATYPE_NULL) return E_FAIL;
return S_OK;
}
HRESULT DecryptionFilter::CheckTransform(const CMediaType *mtIn, const CMediaType *mtOut)
{
HRESULT hr = CheckInputType(mtIn);
if (FAILED(hr)) return hr;
if (mtIn->majortype != MEDIATYPE_Stream) return E_FAIL;
if (mtIn->subtype != MEDIATYPE_NULL) return E_FAIL;
return S_OK;
}
我通过GraphStudioNext和
进行了调试我的过滤器无法连接的任何线索?感谢您!
答案 0 :(得分:3)
您的过滤器不兼容,因为它没有实现与您模拟的File Source Filter相同的功能。具体而言,您需要实现IAsyncReader
接口。
此外,GDCL源代码可用 - 您可以使用调试器来执行源代码并确定确切的问题。