MPC-BE forum

MPC-BE => Внешние фильтры / External filters => Тема начата: V0lt от 10 мая 2021, 20:14:23

Название: MPC VR - Синхронизация (плавность) кадров
Отправлено: V0lt от 10 мая 2021, 20:14:23
Неспешная тема по проблемам синхронизации (плавности) вывода кадров в MPC Video Renderer

- Плавность зависит от системы, видеокарты, окно или полный экран, режима Swap Effect, основной или дополнительный дисплей.
- Swap Effect Flip не панацея.
- Пила на графике при несовпадении и некратности частоты видео и дисплея - это штатная ситуация.
- Пропуск кадров, когда частота видео больше частоты дисплея - это штатная ситуация.

IDXGISwapChain::GetFrameStatistics (https://docs.microsoft.com/en-us/windows/win32/api/dxgi/nf-dxgi-idxgiswapchain-getframestatistics) - в оконном режиме на любом дисплее и в полном экране на втором дисплее не регистрирует каждый второй V-Blank. Частота кадров ограничивается половиной частоты дисплея.
IDXGIOutput::GetFrameStatistics (https://docs.microsoft.com/en-us/windows/win32/api/dxgi/nf-dxgi-idxgioutput-getframestatistics) - не проверялся.
DwmFlush (https://docs.microsoft.com/en-us/windows/win32/api/dwmapi/nf-dwmapi-dwmflush) - иногда ожидает дольше чем требуется. Частота кадров просаживается с 60 до 40 fps.
D3DKMTWaitForVerticalBlankEvent (https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/d3dkmthk/nf-d3dkmthk-d3dkmtwaitforverticalblankevent) - ...
IDXGIOutput::WaitForVBlank (https://docs.microsoft.com/en-us/windows/win32/api/dxgi/nf-dxgi-idxgioutput-waitforvblank) - ...

Тестовые сборки (https://disk.yandex.ru/d/vJwPTDTKmt5k2A?w=1)
Название: Re: MPC VR - Синхронизация (плавность) кадров
Отправлено: V0lt от 10 мая 2021, 20:19:11
mpcvr_1707_dwmflush_1 (https://disk.yandex.ru/d/vJwPTDTKmt5k2A/DwmFlush?w=1)
Тестовый билд с ожиданием вывода кадра после вызова Present. Ожидание реализовано с помощью функции DwmFlush (https://docs.microsoft.com/en-us/windows/win32/api/dwmapi/nf-dwmapi-dwmflush).
Название: Re: MPC VR - Синхронизация (плавность) кадров
Отправлено: MPCfan от 10 мая 2021, 20:38:27
V0lt,
Было же всё плавно. С этим DwmFlush Интел вроде пронесло, а вот по Нвидии не прошло > https://yadi.sk/i/b7yb5jZpKiEswA
Название: Re: MPC VR - Синхронизация (плавность) кадров
Отправлено: V0lt от 10 мая 2021, 20:59:29
MPCfan
У себя на Win8.1 вижу следующие проблемы:
1. Видео 119,88 fps на дисплее 59 Гц в режиме D3D11 Flip неприятно дергается.
2. При удвоении кадров (интелейс) до 59,94 fps на дисплее 59 Гц в режиме Flip часто (не всегда) вижу пилу на графике. На плавность это не влияет, но говорит о том, что измеренное время вывода кадра некорректное.

Билд mpcvr_1707_dwmflush_1 указанные проблемы у меня решает. Повторюсь - билд тестовый.

Добавлено:
Да. В этом билде есть странная проблема, когда при воспроизведении видео 59,94/60 fps скорость кадров может эпизодически просаживаться до 40 fps.
Название: Re: MPC VR - Синхронизация (плавность) кадров
Отправлено: MPCfan от 10 мая 2021, 21:28:21
V0lt,
Сейчас проверил на TV c автопереключалкой. Всё вроде нормально и на Intel и на Nvidia, даже интерлейс с удвоением. Только с Nvidia на телике файл с 59,940 fps воспроизводится вообще со скоростью в 29,970 fps, типа инверсия интерлейсу с удвоением > https://yadi.sk/d/beu9mAD3fETJpw
Название: Re: MPC VR - Синхронизация (плавность) кадров
Отправлено: wanezhiling от 11 мая 2021, 08:09:25
The slow reason of MPC VR is its design, this conclusion is made by Aleksoid, he knew it. :)

https://i.postimg.cc/33Gyk5pJ/QQ-20210511131528.jpg

https://i.postimg.cc/Qs6KPqhs/QQ-20210511131441.jpg
Название: Re: MPC VR - Синхронизация (плавность) кадров
Отправлено: V0lt от 11 мая 2021, 18:36:11
mpcvr_1708_D3DKMTWaitForVerticalBlankEvent_1 и mpcvr_1708_D3DKMTWaitForVerticalBlankEvent_2 (https://disk.yandex.ru/d/vJwPTDTKmt5k2A/D3DKMTWaitForVerticalBlankEvent?w=1)
Тестовые билды с ожиданием V-Blank перед и после вызова Present соответсвенно.
В обих сборках ожидание реализовано с помощью функции D3DKMTWaitForVerticalBlankEvent.

Доп. информация: Correct way to wait for VBLANK on windows 10 in windowed mode (https://stackoverflow.com/questions/49244480/correct-way-to-wait-for-vblank-on-windows-10-in-windowed-mode)
Название: Re: MPC VR - Синхронизация (плавность) кадров
Отправлено: MPCfan от 11 мая 2021, 21:43:24
V0lt,
Этот тестовый билд плавный, как и простой SVN. Но кажется не таким шустрым. Например - пытался открыть ютюбовскую ссылку с 50 fps на мониторе с 60HZ, с первого раза максимальный fps получился где-то 20 fps, повторно попытался открыть, тогда и удалось получить эти 50 fps. Может совпадение. Также медленнее отходит после перехода в полноэкранный режим, особенно с переключалкой, в смысле дольше поддёргивает в начале воспроизведения. И с некоторыми файлами 29,970i cтало похуже при воспроизведении на ТВ.
Название: Re: MPC VR - Синхронизация (плавность) кадров
Отправлено: V0lt от 12 мая 2021, 07:15:14
Цитата: MPCfan от 11 мая 2021, 21:43:24Этот тестовый билд плавный, как и простой SVN. Но кажется не таким шустрым.
Думаю, для текущего кода сам факт ожидания уменьшает "шустрость".
В любом случае вариант с D3DKMTWaitForVerticalBlankEvent пока показывает лучший результат. Добавил второй билд с этой функцией.

Позже попробую другие варианты...
Название: Re: MPC VR - Синхронизация (плавность) кадров
Отправлено: MPCfan от 12 мая 2021, 17:47:35
V0lt,
Со вторым тест- билдом VBlank такое же поведение с файлами 60 fps на Nvidia, как у тест-билда DwmFlush. Скорость короткими интервалами снижается до 40 fps. На Intel нормально с 60 fps, но заметил, что звук с видео не совпадает.
P.S. На счёт синхронизации звука и видео ошибся. Забыл отключить задержку звука в настройках. Вчера нужно было, а сегодня забыл про этот момент.
Название: Re: MPC VR - Синхронизация (плавность) кадров
Отправлено: V0lt от 14 мая 2021, 07:00:27
Выложил сборки mpcvr_1709_IDXGIOutput-WaitForVBlank_1 и mpcvr_1709_IDXGIOutput-WaitForVBlank_2 (https://disk.yandex.ru/d/vJwPTDTKmt5k2A/IDXGIOutput-WaitForVBlank%20?w=1).
В обоих сборках ожидание V-Blank реализовано с помощью функции IDXGIOutput::WaitForVBlank до и после Present соответсвенно. Работает только для режима DX11.

Прошу потестировать в различных конфигурациях на разных дисплеях в режиме DX11 по сравнению с 0.5.3.1707 (https://disk.yandex.ru/d/X0EVMKP4TcmnHQ?w=1).
Название: Re: MPC VR - Синхронизация (плавность) кадров
Отправлено: MPCfan от 14 мая 2021, 17:20:34
V0lt,
Решил начать сразу с mpcvr_1709_IDXGIOutput-WaitForVBlank_2
https://yadi.sk/i/McIm-6buVz1qnA просадка до 40 fps c discard на Nvidia на мониторе ноутбука 60 HZ
https://yadi.sk/i/Vr7AZ7wfoGiJvw  просадка до 30 fps c flip на Nvidia на мониторе ноутбука 60 HZ
P.S. Проверил mpcvr_1709_IDXGIOutput-WaitForVBlank_1. По плавности не отличается от простого SVN . C интерлейсом SVN кажется получше будет на ТВ.
Название: Re: MPC VR - Синхронизация (плавность) кадров
Отправлено: V0lt от 15 мая 2021, 17:03:07
MPCfan, спасибо!
У меня указанные сборки практически одинаково работают, но в одном случае (https://cloud.mail.ru/public/1fcw/sd38NtjAa) WaitForVBlank_1 оказался лучше.

Добавил сборку mpcvr_1709_IDXGIOutput-WaitForVBlank_1+option (https://disk.yandex.ru/d/vJwPTDTKmt5k2A/IDXGIOutput-WaitForVBlank%20?w=1).
Немного переделал код, не стал использовать IDXGIOutput1, т.к. просто IDXGIOutput достаточно.
Добавил опцию, которую можно применять на лету. Но в некоторых ситуациях при изменении опции ничего с плавностью не происходит и приходится дополнительно делать перемотку.
Название: Re: MPC VR - Синхронизация (плавность) кадров
Отправлено: MPCfan от 15 мая 2021, 19:27:17
V0lt,
+option это хорошо.  C mpcvr_1709_IDXGIOutput-WaitForVBlank_1+option проблем нет.
Название: Re: MPC VR - Синхронизация (плавность) кадров
Отправлено: V0lt от 17 мая 2021, 20:37:31
Опция добавлена в 1710 (249f4a8).

Теперь график адекватнее при заметном несовпадении частот.
60 fps на дисплее 75 Гц. Без опции и с опцией.
(https://i.ibb.co/h8Q2bF8/wait-vblank-off.png) (https://ibb.co/h8Q2bF8) (https://i.ibb.co/M7q1MzV/wait-vblank-on.png) (https://ibb.co/M7q1MzV)
Название: Re: MPC VR - Синхронизация (плавность) кадров
Отправлено: usalex от 18 мая 2021, 10:47:56
V0lt, почему у тебя Presentation: Flip Sequential, а уменя - Flip Discard ???
От чего это зависит?
------

А у тебя, случайно, (на билде 1711) не перепутана галка "Wait for V-Blank...." ?
На монике 60Hz - смотрю клип 50fps и на графике пила с галкой и боль-мень ровно без галки.
Название: Re: MPC VR - Синхронизация (плавность) кадров
Отправлено: Aleksoid1978 от 18 мая 2021, 14:08:41
Все верно, у тебя частоты не совпадают, поэтому график пилой.
Название: Re: MPC VR - Синхронизация (плавность) кадров
Отправлено: usalex от 18 мая 2021, 14:14:35
Aleksoid1978, ты не понял.
График ровный, если не чекать галку, а если её чекнуть, то график пилой.
Перепутано действие галки, по-моему.
Название: Re: MPC VR - Синхронизация (плавность) кадров
Отправлено: Aleksoid1978 от 18 мая 2021, 14:15:48
Все верно, без галки нет никакого "VSync", поэтому все выводиться как выводиться, без каких либо задержек - график ровный. При ожидании "VSync" и не совпадении частоты - график пила.
Название: Re: MPC VR - Синхронизация (плавность) кадров
Отправлено: usalex от 18 мая 2021, 14:20:29
Aleksoid1978, теперь понятно. Значит всё работает так, как и задумывалось.
Название: Re: MPC VR - Синхронизация (плавность) кадров
Отправлено: V0lt от 18 мая 2021, 19:50:29
Цитата: usalex от 18 мая 2021, 10:47:56почему у тебя Presentation: Flip Sequential, а уменя - Flip Discard ???
От чего это зависит?
Зависит от винды. Win8/8.1 или Win10.
https://docs.microsoft.com/en-us/windows/win32/api/dxgi/ne-dxgi-dxgi_swap_effect

По поводу пилы. Она примерно такая же, как если бы в EVR-CP включить Internal VSync. MPC VR отличается "дефектами" графика. Эти дефекты из-за упрощенной синхронизации. Улучшить до уровня EVR-CP по быстрому никак нельзя. Я про это уже писал ранее.
Название: Re: MPC VR - Синхронизация (плавность) кадров
Отправлено: usalex от 18 мая 2021, 20:09:16
V0lt, ясно, спасибо.
я почему-то думал, что у тебя тоже win10.

Про синхру тоже понятно. Мож до evr-cp и не дотянуть, но то, что сейчас есть - вполне гуд.