Я создал собственный фильтр в 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
Свойства для Source Filter и пользовательский фильтр
Любой ключ, почему мой фильтр не будет подключаться? Спасибо!
Еще раз спасибо Roman R. Итак, мой класс фильтра дешифрования будет объявлен как «класс DecryptionFilter: public CTransformFilter, public IAsyncReader»? –
Не просто объявлено. Вам нужно реализовать интерфейс правильно, а не на фильтре, а на его выводе. Идея заключается в том, что ваш фильтр выглядит точно так же, как фильтр исходного файла источника, с тем же набором интерфейсов. Так что демультиплексор удобен для работы с вашим фильтром, а не стандартным. –