2016-05-06 8 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

Свойства для Source Filter и пользовательский фильтр Properties for Source Filter and Custom Filter

Любой ключ, почему мой фильтр не будет подключаться? Спасибо!

ответ

3

Ваш фильтр несовместим потому, что он не реализует той же функции, что и File Source Filter. В частности, вам необходимо реализовать интерфейс IAsyncReader.

Дополнительно доступен источник GDCL - вы можете установить источник и определить точную проблему с отладчиком.

+0

Еще раз спасибо Roman R. Итак, мой класс фильтра дешифрования будет объявлен как «класс DecryptionFilter: public CTransformFilter, public IAsyncReader»? –

+0

Не просто объявлено. Вам нужно реализовать интерфейс правильно, а не на фильтре, а на его выводе. Идея заключается в том, что ваш фильтр выглядит точно так же, как фильтр исходного файла источника, с тем же набором интерфейсов. Так что демультиплексор удобен для работы с вашим фильтром, а не стандартным. –