自定义过滤器不兼容?

Custom filter is incompatible?

我在 DirectShow 中创建了一个名为 decryption 的自定义过滤器,但是当我尝试将 MP4 的输出连接到我的自定义过滤器的输入时,使用 GraphStudioNext 给了我一个 "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 调试并且

我的图表是这样的:

源过滤器和自定义过滤器的属性

关于为什么我的过滤器无法连接的任何线索?谢谢!

您的过滤器不兼容,因为它没有实现与您正在模拟的 File Source Filter 相同的功能。具体来说,你需要实现IAsyncReader接口。

此外,GDCL 源代码可用 - 您可以步进源代码并使用调试器确定确切的问题。