Поделиться через


Синхронизация VMR с частотой обновления монитора

[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать в новом коде MediaPlayer, IMFMediaEngine и аудио/видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, в котором используются устаревшие API, чтобы по возможности использовать новые API.]

В редких случаях может потребоваться точно синхронизировать отрисовку видео с частотой обновления монитора, чтобы при каждом обновлении монитора отображалось ровно один новый кадр. Самый надежный способ сделать это — создать пользовательский распределитель-выступающий, который использует операцию пролистывания вместо операции блюсти для записи битов видео в основную поверхность. Функция Flip вызывается при каждом обновлении монитора, поэтому, если видеопоток не содержит меток времени, VMR будет отображаться на основной поверхности как можно быстрее, но поверхность будет блокировать поток до завершения операции Flip. Это означает, что до тех пор, пока ЦП не перегружен, следующий кадр всегда будет ждать на основной поверхности при каждом обновлении монитора. Однако если выполняется какой-то другой процесс, ресурсоемкий ЦП, это может привести к нехватке потокового потока DirectShow, чтобы он не мог достаточно быстро доставлять видеокадры на основную поверхность.

Режим воспроизведения без отрисовки VMR (пользовательские выступающие распределителя)