Как фильтр мультиплексора DirectShow с несколькими входными контактами должен реализовывать IMediaSeeking?
Я работаю над ошибкой с пользовательским фильтром звукового микшера (у меня есть источник), когда входные аудиопотоки, кажется, не синхронизируются после любого поиска с некоторыми входными источниками (у меня нет источника для них), когда более чем один вход подключен.
После поиска меток времени и т. Д. Выглядят правильно, но фактические данные в потоках не синхронизированы с метками времени.
Аудио микшер имеет собственную реализацию IMediaSeeking, которая передает вызовы IMediaSeeking::SetPositions на каждый входной вывод. Казалось бы, это правильный подход. Если существует более одного исходного фильтра, вызовы SetPosition должны быть переданы каждому источнику. Затем исходный фильтр должен реализовывать поиск только на одном из его выводов (как задокументировано в MSDN).
Было бы лучше унаследовать сквозную реализацию от CPosPassThru, чтобы она также поддерживала IMediaPosition? Кажется, что некоторые фильтры используют вызовы IMediaPosition, а не IMediaSeeking.
Есть ли что-то особенное, что фильтр muxer должен сделать, чтобы передать поиск вызовов к нескольким входным контактам. Есть хороший пример исходного кода? Блог Monogram о написании фильтра муксера, похоже, не охватывает поиск.
1 ответ
Для будущих читателей, кажется, следующее работает хорошо. Ошибка синхронизации была в другом месте.
Аудио микшер имеет собственную реализацию IMediaSeeking, которая передает вызовы IMediaSeeking::SetPositions на каждый входной вывод.
Если существует более одного исходного фильтра, вызовы SetPosition должны быть переданы каждому источнику. Затем исходный фильтр должен реализовывать поиск только на одном из его выводов (как задокументировано в MSDN).
Кажется, нет необходимости направлять IMediaPosition вверх по течению.