MPC Video Renderer

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

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

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

Aleksoid1978

Ну шейдерами покачественнее будет. Ну и если нет - надо решить вопрос с размерами и ресайзом для DX11. Сейчас размер swapchain под размер окна, что ессно некорректно.
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

Если хочеться потренироваться с шейдерами, то начни с простого, примени шейдеры на конечную поверхность перед самым выводом. Сначала попробуй grayscale, nightvision, затем всякие шарперы (они сложны тем что необходимо доп. параметры передавать). Из реально необходимого можно коррекцию YCgCo и HDR попробовать.

Делать сейчас шейдерный ресайз слишком рано.

Aleksoid1978

Ну это не мне уж точно :)
[merge_posts_bbcode]Добавлено: 2018-03-18 16:26:18[/merge_posts_bbcode]

Ну тогда надо разобраться с размерами...

[merge_posts_bbcode]Добавлено: 2018-03-18 19:40:58[/merge_posts_bbcode]

По хорошему(чтобы было все одинаково) надо D3D11 -> DX11, или DX9 -> D3D9.
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

Но вообще-то там неодинаково.
D3D11 - это почти чистый Direct3D 11.
DX9 - это Direct3D 11, DXVA2-VP и куча всего.
Но Я подумывал об этом.

Добавил информацию в первое сообщение.
[merge_posts_bbcode]Добавлено: 2018-03-18 13:00:28[/merge_posts_bbcode]

ЦитироватьCComPtr m_pSrcTexture2D;
CComPtr m_pSrcTexture2D_Decode;
Для чего вторая текстура?

[merge_posts_bbcode]Добавлено: 2018-03-18 13:03:01[/merge_posts_bbcode]

И вот это задвоение зачем?
ЦитироватьDXGI_FORMAT m_srcDXGIFormat = DXGI_FORMAT_UNKNOWN;
UINT m_srcWidth = 0;
UINT m_srcHeight = 0;
...
DXGI_FORMAT m_D3D11_Src_Format = DXGI_FORMAT_UNKNOWN;
UINT m_D3D11_Src_Width = 0;
UINT m_D3D11_Src_Height = 0;

Aleksoid1978

А дело в том что размер в медиатипе и реальный размер с которым будет создаваться текстура могут отличаться, для DXVA2. Поэтому я ввел эти "дубли" - чтобы хранить и использовать при проверке при попытке создании текстур. ДЛя DX9 тоже самое.
[merge_posts_bbcode]Добавлено: 2018-03-18 20:20:05[/merge_posts_bbcode]

По поводу текстур - одна с поддержкой записи из CPU и она не может участвовать в VideoProcessorBlt(). Поэтому приходиться держать вторую, "нормальную" - в которую просто копируем из первой после ее заполнения.
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А дело в том что размер в медиатипе и реальный размер с которым будет создаваться текстура могут отличаться, для DXVA2. Поэтому я ввел эти "дубли" - чтобы хранить и использовать при проверке при попытке создании текстур. ДЛя DX9 тоже самое.
Как они могут отличаться для DX9? Почему бы просто не переписать правильным?

Aleksoid1978

Да потому что - посмотри в отладчике для FullHD, какие размеры указаны в медиа-типе, и какие потом получаются из поверхности. Для DXVA2 - размеры поверхности кратны 16, а для видео-размера это не обязательно.
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

Гляну...

В общем сейчас переименую класс в DX11VideoProcessor.
[merge_posts_bbcode]Добавлено: 2018-03-18 14:19:10[/merge_posts_bbcode]

Переименовал.

Предлагаю к 64-битной версии добавлять суффикс "64".

Evgeniy1990

В последнем билде статистика видео-рендерера выглядит урезанной, т.е. только вот это:
 Input
Format: NV12
Width : 1280
Height: 720
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
Так и должно быть. Это будет сильно переделываться.

Aleksoid1978

Прикольное наблюдение сделал:
вызов IDirect3DSurface9::LockRect() на 4K 10bit(HEVC), формат P010 - на моей Radeon RX460 занимает порядка 60-80мс, а на Nvidia 960 - 20-25мс. В итоге при использовании DX11 - DXVA2 HECV 10bit 4K на Radeon просмотр не возможен(весь процесс копирования данных в текстуру занимает иногда и более 100мс) а на Nvidia все спокойно переваривается(весь процесс занимает30-35мс).

Вот такие пироги. Получается что данный путь не вариант - а других я не вижу(перерыл уже весь интернет). Shared Handle(чтобы DX9 -> DX11) можно только для RGB типов делать. Можно конечно костыль - для конвертирования YUV в RGB использовать DXVA2 VP, а уже потом через Shared Handle брать данные и работать с DX11(для ресайза).
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
Ты говоришь о программном декодировании?
Вот тут похожая проблема - https://gamedev.ru/code/forum/?id=59472
[merge_posts_bbcode]Добавлено: 2018-03-19 22:11:52[/merge_posts_bbcode]

Проверил на DX9 ролик H.264 4k. Не заметил особой проблемы.

Aleksoid1978

HEVC 4K 10Bit, P010 формат. DXVA.
[merge_posts_bbcode]Добавлено: 2018-03-20 07:26:14[/merge_posts_bbcode]

И проверять надо на DX11, ибо на DX9 используется StretchRect

[merge_posts_bbcode]Добавлено: 2018-03-20 19:19:37[/merge_posts_bbcode]

По поводу DX11 + DXVA2 - предлагаю весь процесс конвертации в RGB и ресайза перенести на DX9, а потом просто текстуру выводить как есть в DX11. Тогда будет и деинтерлейс работать, и корректно обработка colorspace и.т.д.
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По поводу DX11 + DXVA2 - предлагаю весь процесс конвертации в RGB и ресайза перенести на DX9, а потом просто текстуру выводить как есть в DX11.
Тогда возникает вопрос. Зачем нам вообще DX11 ?
Ради шейдеров? Нет. Мы еще даже не выбрали возможностей PS 3.0.

Поэтому пусть DX11 будет просто дополнительным экспериментальным режимом.
[merge_posts_bbcode]Добавлено: 2018-03-20 20:25:24[/merge_posts_bbcode]

Evgeniy1990
Восстановлена и дополнена информация выводимая в окне настроек.

[merge_posts_bbcode]Добавлено: 2018-03-20 21:26:38[/merge_posts_bbcode]

По поводу StretchRect на доп. дисплее.
Как оказалось декодировало на Nvidia, а обрабатывало и выводило на Intel. Отсюда облом StretchRect.
Почему декодер так себя ведет - непонятно. Я думал декодер цепляется к адаптеру текущего окна. Баг декодера?

Aleksoid1978

Надо разбираться кто виноват, наверное декодер.
[merge_posts_bbcode]Добавлено: 2018-03-21 07:07:26[/merge_posts_bbcode]

Хотя - как декодер узнает что сменился дисплей/адаптер. Тут видео-рендерер должен реконнект делать.
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