自定义过滤器不兼容?

时间:2016-05-06 13:44:13

标签: c++ filter directshow

我在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和

进行了调试
  • 源输出引脚的“connectionType”为PIN_CONNECTION_TYPE_STREAM
  • 自定义滤波器输入引脚的“connectionType”为
    PIN_CONNECTION_TYPE_OTHER

我的图表是什么样的: My Graph of what I'm trying to accomplish

源过滤器和自定义过滤器的属性 Properties for Source Filter and Custom Filter

我的过滤器无法连接的任何线索?感谢您!

1 个答案:

答案 0 :(得分:3)

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

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