1

Тема: MPC Video Renderer

Исходный код: https://github.com/Aleksoid1978/VideoRenderer
История изменений.
Релиз 0.3.6.970
Тестовые сборки.

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

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

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

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

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

Скриншот окна настроек:
https://jpegshare.net/images/3f/54/3f547663c2bfe55b31e27833f7ea1875.png

Известные проблемы:
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.

2

Re: MPC Video Renderer

Я не стал брать за основу весь наш проект, только некоторые наработки.
Залил на github - https://github.com/Aleksoid1978/VideoRenderer

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

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

3

Re: MPC Video Renderer

Круто!
На днях попробую зарегистрировать и потестировать.

Добавлено: 2018-03-02 08:47:20

Вести с полей. smile
Рендерер принимает потоки YV12, NV12, YUY2, RGB32, P010, включая те, что после DXVA-декодера. Пытается что-то с ними сделать с помощью видеопроцессора DXVA-HD (AMD в пролете). Но пока на выходе ничего нет.

4

Re: MPC Video Renderer

Нет картинке по причине того, что в DXVAHD_SetStreamFormat() необходимо указывать входной формат. Подставляем m_srcFormat и уже хоть картинка есть smile

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

5

Re: MPC Video Renderer

Два вопроса:

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

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

2. Может откажемся от Precompiled Headers в основном проекте?
А то сейчас невозможно сторонний код в отдельную папку "thirdparty" закинуть.

Добавлено: 2018-03-03 10:39:56

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

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

6

Re: MPC Video Renderer

V0lt пишет:

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

Добавьте пожалуйста "DXVA2-VideoProc", очень хочется прогнать/потестировать новый видео-рендерер на AMD-видеокарте.

Кстати, очень даже шикарная идея реализовать свой собственный видео-рендерер. Круто! wink

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.

7

Re: MPC Video Renderer

Evgeniy1990
Рендерер еще ничего не умеет, а то что умеет - делает не очень. Доведение до ума будет долгим.

8

Re: MPC Video Renderer

V0lt пишет:

Рендерер еще ничего не умеет, а то что умеет - делает не очень. Доведение до ума будет долгим.

Я понимаю, что пока он ничего не умеет, ведь проект только что недавно появился. Естественно потребуется немало времени, чтобы довести его до ума. Но вы - молодцы! wink

Если наш проект "MPC-BE" получит свой собственный видео-рендерер, да еще и полнофункциональный, со временем,
то это будет самый настоящий шедевр. smile

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.

9

Re: MPC Video Renderer

В общем DXVA2-VideoProc добавлен и включен по умолчанию.
Есть проблема с программным декодированием, его посмотрю попозже.

10

Re: MPC Video Renderer

V0lt пишет:

В общем DXVA2-VideoProc добавлен и включен по умолчанию.
Есть проблема с программным декодированием, его посмотрю попозже.

Огромное вам спасибо за ваши труды! Превосходно! wink
У меня наконец-то появилось изображение, при использовании данного видео-рендерера на "AMD Radeon HD 5770", но пока только в аппаратном режиме. В софтовом режиме пока зеленый экран. В общем, как вы и сказали, с программным декодированием есть проблемы.

Отличное начало! wink

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.

11

Re: MPC Video Renderer

В общем YUY2 и RGB32 сейчас показывают нормально, NV12, YV12 и P010 - зелень. Надо разбираться...

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

12

Re: MPC Video Renderer

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.

13

Re: MPC Video Renderer

Вывод NV12, P010 исправлен, YV12 выводится почти правильно.

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

14

Re: MPC Video Renderer

V0lt пишет:

Вывод NV12, P010 исправлен, YV12 выводится почти правильно.

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

Я и сам удивился, что YUY2 выводит с зеленью.

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

Сделайте лучше специальную сборку с отладочным логом. Я обязательно проверю и выложу вам лог-файл.
Думаю, что по нему, вам будет понятно что не так.

Добавлено: 2018-03-03 22:34:30

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.

15

Re: MPC Video Renderer

Evgeniy1990 пишет:

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

Не надо так делать. В коде это пока не предусмотрено.

16 (изменено: Evgeniy1990, 2018-03-03 22:42:02)

Re: MPC Video Renderer

V0lt пишет:

Не надо так делать. В коде это пока не предусмотрено.

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

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.

17

Re: MPC Video Renderer

YV12 выводиться некорректно:
https://i.imgur.com/oX8t34g.png

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

18

Re: MPC Video Renderer

Aleksoid1978

V0lt говорил, что "YV12 выводится почти правильно".

На AMD-видеокарте выходной формат YV12 выглядит еще более невероятно.

В общем, выглядит так, как будто взяли одно изображение и разделили (разрезали) его на четыре равные части и продублировали их.

Добавлено: 2018-03-04 08:09:04

V0lt / Aleksoid1978

С выходным форматом P010 есть проблема. В моем случае, на AMD-видеокарте, при выводе в данный формат, просто черный экран, т.е. изображения нет. Я запустил видео файл "H.264 (10 bit)", вижу в видео декодере, что работает выходной формат P010, т.е. 10 бит выводятся в чистом виде, но само изображение отсутствует.

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.

19

Re: MPC Video Renderer

С YV12 разберусь и поправлю.

RGB32 в будущем оставлю только для DXVA-HD, а для DXVA2-VP сделаю интерполяцию через шейдеры. Там не шибко сложно должно быть, т.к. не надо преорбразования YUV->RGB делать.

Вопрос. Мы будем куда-нибудь выкладывать сборки фильтра?
Если будем то надо архиву порядковый номер присваивать (как в MPC-HC) и часть хеша.
Пример: MpcVideoRenderer-r20-7cf381d2.zip.

20

Re: MPC Video Renderer

V0lt пишет:

Вопрос. Мы будем куда-нибудь выкладывать сборки фильтра?
Если будем то надо архиву порядковый номер присваивать (как в MPC-HC) и часть хеша.
Пример: MpcVideoRenderer-r20-7cf381d2.zip.

Я буду собирать и выкладывать сборки фильтра на Я.Диск в отдельную папку.
Позже могу добавить ссылку на данный фильтр в шапку в нашу тему проекта "MPC-BE" на Ruboard.

В общем, будет само название фильтра, его порядковый номер (текущее последнее изменение) и текущий коммит (7 знаков), как в вашем примере.

Добавлено: 2018-03-04 08:42:16

V0lt
Может лучше для 64-битной версии фильтра в его название добавить "64", т.е. вот так "MpcVideoRenderer64.ax", чтобы можно было положить две версии 32 и 64 битную в один архив. Как вы считаете?

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.

21

Re: MPC Video Renderer

Evgeniy1990
Не спеши. Там батник еще надо написать, которого нет. smile

22

Re: MPC Video Renderer

V0lt пишет:

Evgeniy1990
Не спеши. Там батник еще надо написать, которого нет. smile

Ок, понял вас, в общем, тогда буду ждать батника. smile

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.

23

Re: MPC Video Renderer

Куда вы летите - еще настолько сырое чтобы выкладывать. Да и вообще - какой смысл его отдавать в паблик ??

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

24

Re: MPC Video Renderer

Aleksoid1978 пишет:

Куда вы летите - еще настолько сырое чтобы выкладывать. Да и вообще - какой смысл его отдавать в паблик ??

Мы пока никуда не торопимся, пока просто обдумываем как будем его в дальнейшем собирать, куда выкладывать и т.д.
Пока только мысли на будущее. smile

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.

25

Re: MPC Video Renderer

Хмм.
В общем DXVA-HD оказался беднее в плане вариантов преобразования YUV->RGB
Спецификации для сравнения: DXVA-HD и DXVA2-VP.