Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > DirectShow: как правильно написать входной Pin?


Автор: Dims 6.1.2010, 23:16
Из фильтра Dumb примера я вижу, что должна быть переопределена функция

Код

HRESULT GetMediaType(int iPosition, CMediaType *pMediaType);


Внутри этой функции я заполняю посланный мне объект pMediaType, чтобы сообщить, какие типы я готов принять.

Однако, я заполняю его не полностью и у меня возникает ошибка -- графбильдер не может подобрать цепочку фильтров для преобразования.

Что, разве нельзя заполнить структуру не полностью? Я обязан указать все параметры? Я хочу принимать любой формат FORMAT_WaveFormatEx. Мне что, всё равно надо все поля структуры WAVEFORMATEX заполнять?

Добавлено через 13 минут и 24 секунды
Вроде бы, теперь формат задал точно, а соединения не происходит. Может, ещё какие-то условия есть?

Автор: AndreySol 11.1.2010, 08:20
Ну вообще-то принимаемые пином типы данных задаются в методе CheckMediaType.
Вот пример:
HRESULT CPsiParserInputPin::CheckMediaType(const CMediaType *pMediaType)
{
    if( *(pMediaType->Type()) == MY_MEDIATYPE_MPEG2_SECTIONS ||
        *(pMediaType->Type()) == MEDIATYPE_MPEG2PSI)
    {
        return S_OK;
    }

    return VFW_E_INVALIDMEDIATYPE;
} // CheckMediaType
А метод GetMediaType скорее всего "информациионного" типа.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)