Как проигрыватель Windows Media работает с частотой обновления монитора? - PullRequest
2 голосов
/ 16 марта 2010

Я пишу анимационное приложение на C # / WinForms (см. этот вопрос ). По сути, анимация в моем приложении плавная, но демонстрирует разрывные эффекты; Когда я беру ту же анимацию и отрисовываю ее в AVI-файл и воспроизводю с помощью проигрывателя Windows Media, анимация вообще не показывает разрывных эффектов. Я знаю, что WMP не меняет частоту кадров, потому что анимация синхронизируется с музыкой.

Я предполагаю, что WMP использует DirectX или какую-то другую технологию, которая знает частоту обновления монитора, положение линии сканирования и т. Д., Но я всегда предполагал, что программирование с частотой обновления ограничит частоту кадров. Очевидно, что это не так с WMP.

Кто-нибудь знает что-нибудь о том, как WMP (или другие видеоплееры) воспроизводит видео внутри? Я искал, но я не могу найти какие-либо подробности об этом.

Ответы [ 2 ]

5 голосов
/ 16 марта 2010

Прошло много времени с тех пор, как я занимался программированием DirectX, так что это может быть устаревшим.

Из того, что я помню, с DirectX вы могли настроить цепочку переворачиваемых буферов, обычно три буфера: отображаемый буфер, отображаемый буфер и буфер, в который производится запись. При обновлении DirectX будет ожидать V-sync перед обновлением отображаемого буфера. Теперь это приведет к несоответствию между отображаемым изображением и изображением, которое должно отображаться, но это будет, самое большее, одно обновление, примерно 1/60 секунды, поэтому вы вряд ли заметите.

Искусство ASCII, чтобы показать, что я имею в виду:

|-|-|-|-|-|-|-|-|-|-|-|-|-|-|  - screen refresh
|----|----|----|----|----|---  - animation 
|-----|---|-----|---|-----|--  - displayed
1 голос
/ 16 марта 2010

Вы рисуете каждый кадр вашей анимации сначала в растровое изображение памяти, а затем перетаскиваете растровое изображение в окно? Если нет, то это может быть решением для вас.

(это, конечно, в дополнение к двойной буферизации)

...