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

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

Aleksoid1978

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 2198
MPC Video Renderer
« Ответ #120 : 18 Март 2018, 05:18:45 »
Ну шейдерами покачественнее будет. Ну и если нет - надо решить вопрос с размерами и ресайзом для DX11. Сейчас размер swapchain под размер окна, что ессно некорректно.
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

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 1793
MPC Video Renderer
« Ответ #121 : 18 Март 2018, 06:02:12 »
Если хочеться потренироваться с шейдерами, то начни с простого, примени шейдеры на конечную поверхность перед самым выводом. Сначала попробуй grayscale, nightvision, затем всякие шарперы (они сложны тем что необходимо доп. параметры передавать). Из реально необходимого можно коррекцию YCgCo и HDR попробовать.

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

Aleksoid1978

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 2198
MPC Video Renderer
« Ответ #122 : 18 Март 2018, 09:40:58 »
Ну это не мне уж точно :)
[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.
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

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 1793
MPC Video Renderer
« Ответ #123 : 18 Март 2018, 10:03:01 »
Но вообще-то там неодинаково.
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

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 2198
MPC Video Renderer
« Ответ #124 : 18 Март 2018, 10:20:05 »
А дело в том что размер в медиатипе и реальный размер с которым будет создаваться текстура могут отличаться, для DXVA2. Поэтому я ввел эти "дубли" - чтобы хранить и использовать при проверке при попытке создании текстур. ДЛя DX9 тоже самое.
[merge_posts_bbcode]Добавлено: 2018-03-18 20:20:05[/merge_posts_bbcode]

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

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 1793
MPC Video Renderer
« Ответ #125 : 18 Март 2018, 10:22:48 »
Цитата: Aleksoid1978
А дело в том что размер в медиатипе и реальный размер с которым будет создаваться текстура могут отличаться, для DXVA2. Поэтому я ввел эти "дубли" - чтобы хранить и использовать при проверке при попытке создании текстур. ДЛя DX9 тоже самое.
Как они могут отличаться для DX9? Почему бы просто не переписать правильным?

Aleksoid1978

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 2198
MPC Video Renderer
« Ответ #126 : 18 Март 2018, 10:38:56 »
Да потому что - посмотри в отладчике для FullHD, какие размеры указаны в медиа-типе, и какие потом получаются из поверхности. Для DXVA2 - размеры поверхности кратны 16, а для видео-размера это не обязательно.
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

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 1793
MPC Video Renderer
« Ответ #127 : 18 Март 2018, 11:19:10 »
Гляну...

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

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

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

Evgeniy1990

  • Ветеран
  • *****
  • Сообщений: 1436
MPC Video Renderer
« Ответ #128 : 19 Март 2018, 01:18:13 »
В последнем билде статистика видео-рендерера выглядит урезанной, т.е. только вот это:
 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

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 1793
MPC Video Renderer
« Ответ #129 : 19 Март 2018, 03:15:21 »
Evgeniy1990
Так и должно быть. Это будет сильно переделываться.

Aleksoid1978

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 2198
MPC Video Renderer
« Ответ #130 : 19 Март 2018, 10:53:24 »
Прикольное наблюдение сделал:
вызов 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(для ресайза).
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

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 1793
MPC Video Renderer
« Ответ #131 : 19 Март 2018, 19:11:52 »
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

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 2198
MPC Video Renderer
« Ответ #132 : 20 Март 2018, 09:19:37 »
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 и.т.д.
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

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 1793
MPC Video Renderer
« Ответ #133 : 20 Март 2018, 18:26:38 »
Цитата: 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

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 2198
MPC Video Renderer
« Ответ #134 : 20 Март 2018, 21:07:26 »
Надо разбираться кто виноват, наверное декодер.
[merge_posts_bbcode]Добавлено: 2018-03-21 07:07:26[/merge_posts_bbcode]

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