Автор Тема: MPC Video Renderer  (Прочитано 54183 раз)

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

V0lt

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 1734
MPC Video Renderer
« : 24 Февраль 2018, 16:10:59 »
Исходный код: https://github.com/Aleksoid1978/VideoRenderer
История изменений.
Релиз 0.4.7.1356
Тестовые сборки.

Минимальные системные требования:
Windows 7 и новее
Видеокарта с поддержкой DirectX 9

Рекомендуемые системные требования (для использования D3D11  API):
Windows 8.1 и новее
Видеокарта с поддержкой DirectX 10/11

Основные возможности:
- Видеопроцессор на шейдерах для NV12, YV12, YUY2, YV16, P010, P016, YV24, AYUV, P210, P216, Y410, Y416, RGB24/32/48/64, b48r, b64a, Y8, Y16.
- Умеет работать с аппаратным декодером DXVA2 для всех режимов.
- Поддерживает вывод субтитров в связке с MPC-BE 1.5.4+.
- Автоматическое преобразование HDR в SDR.
- Поворот кадра (поддерживается MPC-BE).
- Дизеринг при финальном уменьшении глубины цвета с 10/16 бит до 8 бит.

Дополнительные возможности режима DirectX 9:
- DXVA2 Video Processor с аппаратным деинтерлейсом для YV12, NV12, YUY2, P010 (+ хак для RGB для Intel).

Дополнительные возможности режима DirectX 11:
- Direct3D11 Video Processor с аппаратным деинтерлейсом для NV12, YUY2, P010 (+ RGB для Intel и AMD).
- Умеет работать с аппаратным декодером D3D11.

Замечание:
Режим DirectX 9 производительнее и стабильнее режима DirectX 11.
« Последнее редактирование: 21 Июнь 2020, 05:27:28 от V0lt »

Aleksoid1978

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 2130
MPC Video Renderer
« Ответ #1 : 26 Февраль 2018, 07:56:02 »
Скриншот окна настроек:


Описание настроек

Use Direct3D11
Видеорендерер будет по возможности использовать Direct3D 11, а не Direct3D9. Требуется Windows 7 SP1, рекомендуется Windows 8.1 или новее.

Texture format
Формат текстуры, который будет использоваться для хранения промежуточных результатов обработки.
PS: Формат 16-bit Floating Point увеливает потребление видеопамяти.

Show statistics
Поверх кадра будет нарисована статистика с различной информацией. Рекомендуется ее включать, чтобы сделать скриншот при наличии каких-либо проблем.


----- DXVA2 and D3D11 video processor -----

Use for: NV12, P010/P016, YUY2, Other supported formats
Указаны форматы для которых при возможности будет использоваться видеопроцессор DXVA2 или D3D11.  Видеопроцессоры DXVA2 и D3D11 как правило работают быстрее, чем шейдеры, а так же умеют делать деинтерлейс.
PS: Интерлейсные кадры обычно бывают в формате NV12 или YUY2.

Double the frame rate when deinterlacing
При работе деинтерлейса выходная частота будет удваиваться.

Use for resizing
Видеопроцессор DXVA2 или D3D11 будет использоваться для изменения размера кадра.


----- Shader video processor -----

Chroma scaling
Алгоритм увеличения цветовой составляющей с 4:2:0 и 4:2:2 до 4:4:4.

Upscaling
Алгоритм интерполяции, который используется для увеличения кадра.

Downscaling
Алгоритм свертки, который используется для уменьшения кадра.

Use the "Upscaling" method to reducing the frame to 50%
Алгоритм интерполяции будет использован также для уменьшения кадра до 50%.

Use dithering
Позволяет использовать дизеринг при финальном уменьшении глубины цвета с 10/16 бит до 8 бит. Дизеринг может улучшить отображение плавных переходов. На небольших дисплеях эффект скорее всего не будет заметен.


Swap effect
Способ отображения кадра на рабочий стол. Как правило режим Discard стабильннее, но режим Flip может оказаться быстрее.
I7 2600K@4.2 / Asrock P67 Extreme 4 Gen 3 / Kingston HyperX 8Gb 1866 (4x2) Kit / GIGABYTE GTX 960 / BenQ EW2430 / LG 47LM620T / Yamaha RX-V471 + NS-555 + NS-C444 + NS-333 + YST-SW215

V0lt

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 1734
MPC Video Renderer
« Ответ #2 : 02 Март 2018, 05:47:20 »
Известные проблемы:
1. Вызывает падение Mpeg2DecFilter при открытии DVD-Video в формате PAL.
Исправлено в 2ed2b74.
2. Шейдерная интерполяция в режиме D3D11 работает некорректно. Остаются остатки кадра при уменьшении области кадра, есть артефакты в виде лесенки при зуммировании.
Исправлено в f894845 и cfd2448.
3. Рендерер по непонятным причинам несовместим с "Microsoft DTV-DVD Video Decoder".
Исправлено в 6156c3f.
4. На паузе после сворачивания и последующего разворачивания вместо текущего кадра виден черный экран.
Исправлено в 29d96a0 + MPC-BE 1.5.4.4589.
5. Если имеется второй адаптер, к которому подключен дополнительный дисплей, то в режиме DX11 не работают аппаратные декодеры DXVA2 и D3D11.
Исправлено в MPC-BE 1.5.4.4581.
6. При активном окне настроек переключение на другое видео ломает воспроизведение.
Исправлено в MPC-BE 1.5.4.4611.
7. При повороте кадра без масштабирования, когда он перестает помещаться по высоте в окно, искажаются пропорции.
Исправлено в b5fae7b.



Планы (без сроков естественно):
1. Доработать шейдер конвертации цвета. Сейчас, например, есть проблема с HLG, и не учитываются некоторые параметры.
2. Добавить возможность использовать эксклюзивный полный экран.
Сделано в 0.4.6.1323 - 0.4.8.1407
В перспективе это даст более плавное воспроизведение на дополнительном дисплее и возможность вывода в формате 10-бит.
3. Улучшить вывод текста статистики, чтобы одинаково хорошо отображалось на светлом и темном фоне.
4. Сделать какой-нибудь график в статистики для большей наглядности.
Сделано в 0.4.6.1267_git2020.05.01-61ed451
5. Реализовать интерфейс для рендеринга субтитров на текстуре D3D11.
6. Реализовать очередь входных кадров. Нужен как минимум 1 кадр из будущего для улучшения деинтерлейса и возможной поддержки увеличения частоты видео (D3D11).
7. Реализовать очередь выходных кадров. Это позволит решить некоторые проблемы с плавностью. Например после увеличения частоты видео после деинтерлейса.
« Последнее редактирование: Вчера в 17:29:29 от V0lt »

Aleksoid1978

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 2130
MPC Video Renderer
« Ответ #3 : 02 Март 2018, 10:28:50 »
Нет картинке по причине того, что в DXVAHD_SetStreamFormat() необходимо указывать входной формат. Подставляем m_srcFormat и уже хоть картинка есть :)
I7 2600K@4.2 / Asrock P67 Extreme 4 Gen 3 / Kingston HyperX 8Gb 1866 (4x2) Kit / GIGABYTE GTX 960 / BenQ EW2430 / LG 47LM620T / Yamaha RX-V471 + NS-555 + NS-C444 + NS-333 + YST-SW215

V0lt

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 1734
MPC Video Renderer
« Ответ #4 : 03 Март 2018, 07:39:56 »
Два вопроса:

1. Ты сможешь запустить DXVA-HD Sample?
У меня какие-то тупые ошибки выдает.

Разобрался. Там было /WX включено и предупреждения работали как ошибки.

2. Может откажемся от Precompiled Headers в основном проекте?
А то сейчас невозможно сторонний код в отдельную папку "thirdparty" закинуть.
[merge_posts_bbcode]Добавлено: 2018-03-03 10:39:56[/merge_posts_bbcode]

Могу попробовать добавить DXVA2-VideoProc, чтобы на AMD экспериментировать.

PS: Пока интерполяция DXVA-HD неправильно работает.

Evgeniy1990

  • Ветеран
  • *****
  • Сообщений: 1379
MPC Video Renderer
« Ответ #5 : 03 Март 2018, 09:09:42 »
Цитата: V0lt
Могу попробовать добавить DXVA2-VideoProc, чтобы на AMD экспериментировать.
Добавьте пожалуйста "DXVA2-VideoProc", очень хочется прогнать/потестировать новый видео-рендерер на AMD-видеокарте.

Кстати, очень даже шикарная идея реализовать свой собственный видео-рендерер. Круто! ;)
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

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 1734
MPC Video Renderer
« Ответ #6 : 03 Март 2018, 09:38:30 »
Evgeniy1990
Рендерер еще ничего не умеет, а то что умеет - делает не очень. Доведение до ума будет долгим.

Evgeniy1990

  • Ветеран
  • *****
  • Сообщений: 1379
MPC Video Renderer
« Ответ #7 : 03 Март 2018, 09:52:35 »
Цитата: V0lt
Рендерер еще ничего не умеет, а то что умеет - делает не очень. Доведение до ума будет долгим.
Я понимаю, что пока он ничего не умеет, ведь проект только что недавно появился. Естественно потребуется немало времени, чтобы довести его до ума. Но вы - молодцы! ;)

Если наш проект "MPC-BE" получит свой собственный видео-рендерер, да еще и полнофункциональный, со временем,
то это будет самый настоящий шедевр. :)
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

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 1734
MPC Video Renderer
« Ответ #8 : 03 Март 2018, 12:10:15 »
В общем DXVA2-VideoProc добавлен и включен по умолчанию.
Есть проблема с программным декодированием, его посмотрю попозже.

Evgeniy1990

  • Ветеран
  • *****
  • Сообщений: 1379
MPC Video Renderer
« Ответ #9 : 03 Март 2018, 13:04:35 »
Цитата: V0lt
В общем DXVA2-VideoProc добавлен и включен по умолчанию.
Есть проблема с программным декодированием, его посмотрю попозже.
Огромное вам спасибо за ваши труды! Превосходно! ;)
У меня наконец-то появилось изображение, при использовании данного видео-рендерера на "AMD Radeon HD 5770", но пока только в аппаратном режиме. В софтовом режиме пока зеленый экран. В общем, как вы и сказали, с программным декодированием есть проблемы.

Отличное начало! ;)
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

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 1734
MPC Video Renderer
« Ответ #10 : 03 Март 2018, 14:25:46 »
В общем YUY2 и RGB32 сейчас показывают нормально, NV12, YV12 и P010 - зелень. Надо разбираться...

Позже сравню уменьшение RGB32 на Nvidia и Intel. Если все правильно работает, то на Intel картинка будет выглядеть лучше.

Evgeniy1990

  • Ветеран
  • *****
  • Сообщений: 1379
MPC Video Renderer
« Ответ #11 : 03 Март 2018, 16:09:31 »
Цитата: V0lt
В общем YUY2 и RGB32 сейчас показывают нормально, NV12, YV12 и P010 - зелень. Надо разбираться...
На AMD-видеокарте на любом выходном формате присутствует зелень в программном режиме.
На RGB32 видно движение кадров, хотя скорее помех внутри зелени.
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

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 1734
MPC Video Renderer
« Ответ #12 : 03 Март 2018, 16:30:38 »
Вывод NV12, P010 исправлен, YV12 выводится почти правильно.

Evgeniy1990
Странно что у тебя YUY2 некорректно выводит. Надо будет делать специальную сборку с отладочным логом. :(

Evgeniy1990

  • Ветеран
  • *****
  • Сообщений: 1379
MPC Video Renderer
« Ответ #13 : 03 Март 2018, 19:34:30 »
Цитата: V0lt
Вывод NV12, P010 исправлен, YV12 выводится почти правильно.

Evgeniy1990
Странно что у тебя YUY2 некорректно выводит. Надо будет делать специальную сборку с отладочным логом. :(
Я и сам удивился, что YUY2 выводит с зеленью.

Собрал последний, на данный момент, commit 6e82636. Проверил выходной формат YUY2 - теперь зелени нет, но зато вообще полный ступор, изображение не движется, кадры не воспроизводятся.

Сделайте лучше специальную сборку с отладочным логом. Я обязательно проверю и выложу вам лог-файл.
Думаю, что по нему, вам будет понятно что не так.
[merge_posts_bbcode]Добавлено: 2018-03-03 22:34:30[/merge_posts_bbcode]

V0lt
Заметил такую странность:

Если мы меняем выходной формат в видео декодере еще до открытия самих видео файлов, то все они работают нормально.

А если мы меняем выходные форматы уже во время воспроизведения видео файлов, то могут быть проблемы.
Например, в моем случае, я переключаю выходные форматы по порядку, т.е. вот так:

NV12 -> YV12 -> YUY2 -> RGB32 -> P010

Так вот, при смене с NV12 на YV12 - переключение нормальное, а вот дальше уже начинаются проблемы.

1. Если во время воспроизведения некоего видео файла отключить в видео декодере выходные форматы NV12 и YV12, то при переключении на выходной формат YUY2, изображение просто стоит на месте.

2. Далее - отключаю YUY2, во время воспроизведения некоего видео файла, в видео декодере, включается RGB32.

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

3. Далее - отключаю RGB32, во время воспроизведения некоего видео файла, в видео декодере, включается P010.

После его включения, изображение опять стоит на месте, видео кадры не воспроизводятся.

В общем, все эти проблемы возникают при условии переключения выходных форматов в видео декодере, уже во время воспроизведения неких видео файлов. Вот именно с этим и необходимо разобраться, устранить их.
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

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 1734
MPC Video Renderer
« Ответ #14 : 03 Март 2018, 19:37:17 »
Цитата: Evgeniy1990
А если мы меняем выходные форматы уже во время воспроизведения видео файлов, то могут быть проблемы.
Не надо так делать. В коде это пока не предусмотрено.