У меня есть график фильтра, как Source -> InfTee -> VMR7 / VMR9
График работает нормально, когда я подключаю граф как Source -> VMR7 / VMR9, но как только я вставляю InfTee
фильтр между источником и VMR, то я получаю проблему с соединением выводов между выводом o / p фильтра InfTee и выводом i / p VMR.
Я не хочу добавлять какие-либо другие фильтры, такие как AVIdecompressor или преобразователь цветового пространства, ч / б InfTee и VMR.
Соединение установлено
в порядке, пока функция DecideAllocator () выходного контакта InfTee не была
называется. Эта функция имеет следующий код:
hr = pPin-> NotifyAllocator (pTee-> m_pAllocator, TRUE);
NotifyAllocator возвращает E_FAIL.
Здесь pPin — это приемный вывод (входной вывод VMR), а pTee-> m_pAllocator.
хранит распределитель, который InfTee получил от входного контакта в своем собственном
Реализация NotifyAllocator ().
Я проверил в сети и получил проблему с фильтром InfTee из-за его тупой природы. Но не смог найти никакого правильного решения.
Кто-нибудь может мне помочь?
VMR-7, VMR-9, EVR — все рендеры «настаивают» на собственном распределителе памяти, подкрепленном памятью видеоповерхностей. Эти распределители имеют конкретные требования. Вы не можете изменить это поведение.
InfTee, с другой стороны, «настаивает» на своем собственном распределителе памяти выходных выводов и распределяет его между выходными выводами, чтобы при вводе в ленту не происходило копирование данных (это то, что вы называете «тупой природой») ,
Вы не можете заставить это работать все вместе, вам нужен дополнительный фильтр между ними, который копирует данные из тройника в память видео рендерера. Идеальным с точки зрения производительности является пользовательский фильтр преобразования, который копирует данные с учетом расширенных возможностей. Без этого у вас будет ближайший запас / зарегистрированный фильтр для той же цели.
Других решений пока нет …