2014-02-13 2 views
2

У меня есть графы фильтров как источник -> InfTee -> VMR7/VMR9InfTee фильтр не работает с VMR

Graph отлично работает, когда я подключаю граф как источник -> VMR7/VMR9, но как только я вставьте InfTee фильтр между источником и VMR, тогда у меня возникает проблема с контактным соединением между выводами o/p фильтра InfTee и выводом i/p VMR. Я не хочу добавлять какие-либо другие фильтры, такие как фильтр конвертера AVIdecompressor или colorpace, ч/б InfTee и VMR.

Соединение продолжалось до тех пор, пока функция DecideAllocator() выходного штыря InfTee не была вызвана . Эта функция имеет следующий код:

hr = pPin-> NotifyAllocator (pTee-> m_pAllocator, TRUE);

NotifyAllocator возвращает E_FAIL.

Здесь pPin является приемным штырем (входной контакт VMR), и pTee-> m_pAllocator хранит распределитель, InfTee, полученный от входного контакта в его собственной реализации NotifyAllocator().

Я проверил сеть и получил проблему с фильтром InfTee из-за своей немой природы. Но не смог найти правильное решение.

Может кто-нибудь помочь мне?

ответ

1

VMR-7, VMR-9, EVR - все средства визуализации «настаивают» на своем собственном распределителе памяти, поддерживаемом памятью видеоповерхностей. У этих распределителей есть особые требования. Вы не можете изменить это поведение.

InfTee, с другой стороны, «настаивает» на своем собственном распределителе памяти выходных контактов, и он разделяет его между выходными выводами, чтобы копия данных не выполнялась при подаче фида (это то, что вы называете " тупой характер ").

Вы не можете заставить его работать все вместе, вам нужен дополнительный фильтр между ними, который копирует данные из tee в память видеообъектива. Идеальным с точки зрения производительности является настраиваемый фильтр преобразования, который учитывает данные с расширенными шагами. Без него у вас есть самый близкий запас/зарегистрированный фильтр, который будет служить той же цели.