Фильтр DirectShow: преобразование

Правильно ли, что метод преобразования фильтров вызывается, когда один из входных контактов отправляет данные? Если да: как мне определить в методе преобразования фильтра, какой это входной контакт?


person Luke    schedule 27.02.2014    source источник


Ответы (2)


Для этого нет встроенного способа. Если ваш фильтр имеет несколько входных контактов, и каждый контакт обеспечивает отдельный тип носителя, вы можете определить, какой контакт, используя тип носителя. Другой способ сделать это может состоять в том, чтобы назначить уникальный идентификатор каждому экземпляру вашего входного вывода и передать его вашей функции преобразования. Возможно, вам придется получить свой входной контакт из базового класса, чтобы сделать это.

person Saibal    schedule 27.02.2014
comment
Спасибо за ваш ответ. Пожалуйста, ответьте также на первый из двух моих вопросов, и я приму ваш ответ. - person Luke; 27.02.2014
comment
Да... функция преобразования вызывается только тогда, когда на входном контакте есть данные для обработки... Также, кстати, просто для уточнения, если вы используете класс CTransformFilter, он предоставит только один входной контакт и один выходной контакт... если вы нужно несколько контактов, вам нужно будет получить от CBaseFilter. - person Saibal; 27.02.2014

Transform — это метод на CTransformFilter классе. Из MSDN:

Класс CTransformFilter — это базовый класс для реализации фильтров преобразования. Этот класс предназначен для реализации фильтра преобразования с одним входным контактом и одним выходным контактом.

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

В общем, данные поступают на входной пин через метод IMemInputPin::Receive. Если вы переопределите его в классе контактов, вы можете прикрепить информацию, идентифицирующую источник, при передаче данных в класс фильтра.

person Roman R.    schedule 27.02.2014