Я пытаюсь использовать элемент управления MediaElement в WPF для воспроизведения видео. Он отлично работает в Vista, но когда я запускаю его на машине XP, у меня появляются слезы на дисплее. Похоже, что он не использует вертикальную синхронизацию, а просто обновляет экран во время рисования.
Кто-нибудь знает, как исправить эту проблему?
Предположение: в драйвере вашей видеокарты могут быть настройки, которые могут управлять этим, например, принудительное VSync. Это будет зависеть от карты / драйвера. Не уверен, что вы можете запросить ожидание vsync с медиаэлементом, или даже если для его выполнения требуется видеокарта (может и нет, если пользователь выберет какую-то принудительную no-vsync в конфигурации своих драйверов).





Это больше связано с тем, как WPF отображает экран в XP по сравнению с Vista. В Vista приложения отображаются в закадровом буфере, который затем объединяется с другими окнами, которые были изменены, и выводится на экран через соответствующие промежутки времени с помощью процесса, называемого DWM.exe. Это может (и, предположительно, представляет) предоставлять обновления окна WPF в видеобуфер, синхронизированные с интервалом обновления.
В XP WPF использует DirextX для рендеринга прямо на экран и обновляет видеобуфер, когда хочет. Может быть какой-то способ заставить его синхронизироваться с интервалом обновления, но я не рассматривал его, потому что я больше не использую XP.
Поскольку я не нашел решения, я решил разместить в своем приложении экземпляр Windows Media Player с помощью взаимодействия. Это в основном работает (и без разрывов), но я не могу делать те необычные вещи, которые планировал делать с WPF, например, перекрестное затухание между видео. Облом ...