2016-05-06 144 views
3

我在DirectShow中創建了一個名爲解密的自定義過濾器,但是當使用GraphStudioNext給我一個「VFW_E_NO_ACCEPTABLE_TYPES(0x80040207)」試圖將MP4的輸出連接到我的自定義過濾器的輸入時。自定義過濾器不兼容?

// 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

爲什麼我的過濾器將無法連接任何線索?謝謝!

回答

3

您的過濾器不兼容,因爲它沒有實現與您模擬的File Source Filter相同的功能。具體來說,你需要實現IAsyncReader接口。

此外,GDCL源代碼可用 - 您可以使用調試器對源代碼進行分步確定。

+0

再次感謝羅馬R.所以我的解密過濾器類將被宣佈爲「類DecryptionFilter:公共CTransformFilter,公共IAsyncReader」? –

+0

不只是宣佈。您需要正確實現接口,而不是在過濾器上,但在其引腳上。這個想法是,你的過濾器看起來與庫存文件源過濾器完全一樣,具有相同的接口集。因此,解複用器可以使用您的過濾器而不是標準過濾器。 –