MPC Video Renderer

Автор V0lt, 24 февраля 2018, 19:10:59

« назад - далее »

0 Пользователи и 8 гостей просматривают эту тему.

Aleksoid1978

Странное поведение - значительно повышается время потраченное на обработку субтитров(хотя их там и нет). Но
то все вызвано принудительной перерисовкой по время ресайза видео-области. И из-за этого получается следующие кадры уже не успевают и пропускаются.

Кстати такое поведение только на Discard, на Flip нет(но картинка моргает при ресайзе).
AMD Ryzen 5 3600 /GIGABYTE B450 Gaming X /AMD Radeon R9 16Gb@3200 /Kingston 500Gb M.2 /GTX 1650 /Samsung U28R550UQI /OLED Philips 55OLED707 /Yamaha RX-V471 + NS-555 + NS-C444 + NS-333 + YST-SW215

V0lt

Цитата: Evgeniy1990Если, при "Direct3D 9Ex", мы откроем плейлист и будем растягивать его вверх, или налево, в зависимости от его расположения, то у нас резко начинает возрастать Sync Offset и появляются пропущенные кадры прямо во время воспроизведения видео файла.
Рендерер не рассчитан на плавное воспроизведение, если его окно постоянно изменяют.
Появление пропущенных кадров зависит не только от DX, но и от режима презентации.
У меня на Win8.1 так
DX9, Discard - пропускаются.
DX9, FlipEx - выводится все.
DX11, Discard - выводится все.
DX11, Flip seqential - пропускаются.

Evgeniy1990

Цитата: V0ltРендерер не рассчитан на плавное воспроизведение, если его окно постоянно изменяют.
Появление пропущенных кадров зависит не только от DX, но и от режима презентации.
О как...  Вот так новость...  о_О
Motherboards: ASUS P5Q/GIGABYTE EP35C-DS3R, CPU: Core 2 Duo E8300/E8400, Memory: DDR2/DDR3, Video: MSI GTX 465/ASUS EAH5770/GTX 650 Ti, Audio: ASUS Xonar DG 5.1/Creative SB 5.1. VX/X-Fi Xtreme Gamer.

V0lt

Evgeniy1990
Поясню. При изменении окна рендерер постоянно рендерит имеющийся кадр под новый размер. Если декодер подготовил новый кадр, то ему придется подождать, когда рендерер освободиться. Но время идет, и может получиться так, что кадр от декодера уже устарел и нужен следующий. Поэтому кадр будет пропущен.

Evgeniy1990

Цитата: V0ltEvgeniy1990
Поясню. При изменении окна рендерер постоянно рендерит имеющийся кадр под новый размер. Если декодер подготовил новый кадр, то ему придется подождать, когда рендерер освободиться. Но время идет, и может получиться так, что кадр от декодера уже устарел и нужен следующий. Поэтому кадр будет пропущен.
Понятно. Просто я удивлен тому, насколько жестко ведет себя этот самый "Direct3D 9Ex", который, как мне всегда казалось, так вести себя никогда не должен. Ведь на том же EVR-CP Direct3D9 так себя не ведет. А мерцание изображения (кадров) при Flip/FlipEx - это вообще нечто. Странно, что Direct3D11 так себя не ведет.

Я это к тому, что если используется "Direct3D9 Ex", то при различных взаимодействиях с окнами плеера и плейлистом очень резко и сильно возрастает нагрузка. Это не есть хорошо. Скажем так - не критично, но неприятно.

И еще - как получить этот "Flip seqential"? У меня всегда, при любых конфигурациях, только "Flip discard" работает.
Motherboards: ASUS P5Q/GIGABYTE EP35C-DS3R, CPU: Core 2 Duo E8300/E8400, Memory: DDR2/DDR3, Video: MSI GTX 465/ASUS EAH5770/GTX 650 Ti, Audio: ASUS Xonar DG 5.1/Creative SB 5.1. VX/X-Fi Xtreme Gamer.

V0lt

Evgeniy1990
"Flip discard" доступен только для Windows 10 и если при сборке использовался Win10SDK. Для остальных случаев для DX11+Flip будет использоваться "Flip seqential".

Evgeniy1990

Цитата: V0ltEvgeniy1990
"Flip discard" доступен только для Windows 10 и если при сборке использовался Win10SDK. Для остальных случаев для DX11+Flip будет использоваться "Flip seqential".
Ух ты, так это оказывается, еще и особенность Windows 10 и пакета Win10SDK. Здорово! Значит я не зря собираю сборки с использованием Win10SDK. :)
Motherboards: ASUS P5Q/GIGABYTE EP35C-DS3R, CPU: Core 2 Duo E8300/E8400, Memory: DDR2/DDR3, Video: MSI GTX 465/ASUS EAH5770/GTX 650 Ti, Audio: ASUS Xonar DG 5.1/Creative SB 5.1. VX/X-Fi Xtreme Gamer.

Aleksoid1978

По поводу "медленного" ресайза, по поводу моргания при ресайзе(DX9 + Flip) - проверяем
https://yadi.sk/d/v9IWDMoEp-FlUw

Добавлено: 2019-08-29 18:32:41

Хотя уже не актуально, собираем последний BE и VR и проверям
AMD Ryzen 5 3600 /GIGABYTE B450 Gaming X /AMD Radeon R9 16Gb@3200 /Kingston 500Gb M.2 /GTX 1650 /Samsung U28R550UQI /OLED Philips 55OLED707 /Yamaha RX-V471 + NS-555 + NS-C444 + NS-333 + YST-SW215

Evgeniy1990

Цитата: Aleksoid1978По поводу "медленного" ресайза, по поводу моргания при ресайзе(DX9 + Flip) - проверяем
https://yadi.sk/d/v9IWDMoEp-FlUw

Добавлено: 2019-08-29 18:32:41

Хотя уже не актуально, собираем последний BE и VR и проверям
Проверил тестовый билд, а также собрал и проверил последний SVN-билд вместе с последним MPC Video Renderer.
В результате, ресайз стал работать нормально, плавно и быстро, без пропусков кадров на "Direct3D 9Ex". Также пропало мерцание изображения при "Direct3D 9Ex" + "FlipEx". Великолепно! Вы меня удивили! Даже и не ожидал, что это можно исправить, но вам удалось! ;)
Motherboards: ASUS P5Q/GIGABYTE EP35C-DS3R, CPU: Core 2 Duo E8300/E8400, Memory: DDR2/DDR3, Video: MSI GTX 465/ASUS EAH5770/GTX 650 Ti, Audio: ASUS Xonar DG 5.1/Creative SB 5.1. VX/X-Fi Xtreme Gamer.

V0lt

В планах выделить видеопроцессор D3D11 в отдельный класс. С ним проще экспериментировать, чем с DXVA2 VP.

Для чего это нужно:
1. Я надеюсь это поможет организовать более гибкий конвейер.
2. Хочу попробовать использовать D3D11 VP только для деинтерлейса для NV12 и YUY2.
3. Хочу попробовать вообще отключить D3D11 VP и попробовать задействовать шейдеры DX11 на Windows 7.

V0lt

Собрал тестовую сборку MPCVR-v0.3.1.845_check_dxva2vp_output_format_1.
Причина в следующем. Видеопроцессор DXVA2 видеокарты AMD RX 460 умеет выводить только в X8R8G8B8, если на входе P010. Поэтому пришлось добавить проверку поддержки выходного формата для DXVA2 VP. В общем теперь делаем согласно спецификации.
Прошу проверить.

PS: Ранее вывод в A2R10G10B10 и A16B16G16R16F происходил без проверок, потому что DXVA2 VP Nvidia умеет так делать с дремучих времен вопреки тому, что сообщает DXVA2 API. Для старых AMD (до поддержки P010), насколько мне известно было аналогично. Intel не умел в EVR-CP, но научился, когда стали вызывать DXVA2 API напрямую. Но похоже этот "беспредел" закончился на AMD RX. :-)

Добавлено: 2019-09-07 13:01:30

Залил v0.3.1.847_git2019.09.07-7ef54e3 с изменениями для DXVA2 VP.


Добавлено: 2019-09-07 22:27:48

Залил v0.3.1.850_git2019.09.07-133a244.
Проблемы на AMD RX похоже устранены.

Aleksoid1978

"Проблемы" с бикубической chroma scaling при использовании DXVA2/D3D11 Native декодирования.
GPU - https://i.imgur.com/sUjpz3R.png
Софт - https://i.imgur.com/vFzxa3U.png
Обращаем внимание на границы красных элементов

Сэмпл - https://yadi.sk/i/xUBXqKgjX_LwJw + https://yadi.sk/i/WI4cD_d8EcDqKw
AMD Ryzen 5 3600 /GIGABYTE B450 Gaming X /AMD Radeon R9 16Gb@3200 /Kingston 500Gb M.2 /GTX 1650 /Samsung U28R550UQI /OLED Philips 55OLED707 /Yamaha RX-V471 + NS-555 + NS-C444 + NS-333 + YST-SW215

V0lt

Aleksoid1978
На DX9 c DXVA2 на Win7 не проявляется вроде. На DX11 проверю завтра.

V0lt

На DX11 после DXVA2 декодера проблему вижу. Похоже где-то проявляется неправильное значение высоты.

Попробую найти и исправить, а в будущем наверное более радикально переделаю.

Исправлено в 76da2dc.

V0lt

mpcvr-v0.3.3.870_classD3D11VP_3
Обновление сборки, где D3D11 VP в отдельном классе.