Правильно ли, что метод преобразования фильтров вызывается, когда один из входных контактов отправляет данные? Если да: как мне определить в методе преобразования фильтра, какой это входной контакт?
Фильтр DirectShow: преобразование
Ответы (2)
Для этого нет встроенного способа. Если ваш фильтр имеет несколько входных контактов, и каждый контакт обеспечивает отдельный тип носителя, вы можете определить, какой контакт, используя тип носителя. Другой способ сделать это может состоять в том, чтобы назначить уникальный идентификатор каждому экземпляру вашего входного вывода и передать его вашей функции преобразования. Возможно, вам придется получить свой входной контакт из базового класса, чтобы сделать это.
Transform
— это метод на CTransformFilter
классе. Из MSDN:
Класс CTransformFilter — это базовый класс для реализации фильтров преобразования. Этот класс предназначен для реализации фильтра преобразования с одним входным контактом и одним выходным контактом.
В фильтре с одним входным выводом этот метод разработан таким образом, чтобы не давать никакой идентификации относительно источника данных, поскольку на первом месте находится один вывод, откуда могут поступать данные.
В общем, данные поступают на входной пин через метод IMemInputPin::Receive
. Если вы переопределите его в классе контактов, вы можете прикрепить информацию, идентифицирующую источник, при передаче данных в класс фильтра.