1 (изменено: V0lt, 2020-02-29 15:21:12)

Тема: MPC Video Renderer

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

Минимальные системные требования:
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).
- Дизеринг при финальном уменьшении глубины цвета с 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.

2 (изменено: V0lt, 2020-02-29 17:36:02)

Re: MPC Video Renderer

Скриншот окна настроек:
https://jpegshare.net/images/38/8f/388f5bf28c79a10088677ba06c9ee95c.png

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

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

3 (изменено: V0lt, 2020-02-29 15:20:53)

Re: MPC Video Renderer

Известные проблемы:
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. Добавить возможность использовать эксклюзивный полный экран. В перспективе это даст более плавное воспроизведение на дополнительном дисплее и возможность вывода в формате 10-бит.
3. Улучшить вывод текста статистики, чтобы одинаково хорошо отображалось на светлом и темном фоне.
4. Сделать какой-нибудь график в статистики для большей наглядности.
5. Реализовать интерфейс для рендеринга субтитров на текстуре D3D11.

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.