У меня есть график фильтра, который принимает необработанные аудио- и видеовходы, а затем использует ASF Writer для их кодирования в файл WMV.
Я написал два пользовательских push-фильтра, чтобы обеспечить ввод данных дляграф.Аудиофильтр просто использует WASAPI в режиме обратной петли для захвата звука и отправки данных в нисходящем направлении.Видеофильтр принимает необработанные кадры RGB и отправляет их в нисходящем направлении.
Как для аудио, так и для видеокадров у меня есть значение счетчика производительности на время захвата кадров.
Вопрос 1: Если я хочу правильно поставить метки времени для видео и аудио, нужно ли мне создавать собственные эталонные часы, которые используют счетчик производительности, или есть лучший способ синхронизациидва входа, то есть рассчитать время потока?
Видеовход захватывается из буфера Direct3D где-то еще, и я не могу гарантировать частоту кадров, поэтому он ведет себя как живой источник.Конечно, я всегда знаю время начала кадра, но как узнать время окончания?
Например, предположим, что видеофильтру в идеале нужно работать со скоростью 25 кадров в секунду, но из-за задержки и т. Д.включен, кадр 1 начинается с отметки 1/25, но кадр 2 начинается позже ожидаемой отметки 2/25.Это означает, что теперь на графике есть промежуток, поскольку время окончания кадра 1 не соответствует времени начала кадра 2.
Вопрос 2: Будут ли нижестоящие фильтры знать, что делатьс задержкой между кадрами 1 и 2, или мне нужно вручную уменьшать длину кадра 2?