126

Re: MPC Video Renderer

Aleksoid1978 пишет:

А дело в том что размер в медиатипе и реальный размер с которым будет создаваться текстура могут отличаться, для DXVA2. Поэтому я ввел эти "дубли" - чтобы хранить и использовать при проверке при попытке создании текстур. ДЛя DX9 тоже самое.

Как они могут отличаться для DX9? Почему бы просто не переписать правильным?

127

Re: MPC Video Renderer

Да потому что - посмотри в отладчике для 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

128

Re: MPC Video Renderer

Гляну...

В общем сейчас переименую класс в DX11VideoProcessor.

Добавлено: 2018-03-18 14:19:10

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

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

129

Re: MPC Video Renderer

В последнем билде статистика видео-рендерера выглядит урезанной, т.е. только вот это:

  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.

130

Re: MPC Video Renderer

Evgeniy1990
Так и должно быть. Это будет сильно переделываться.

131

Re: MPC Video Renderer

Прикольное наблюдение сделал:
вызов 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

132

Re: MPC Video Renderer

Aleksoid1978
Ты говоришь о программном декодировании?
Вот тут похожая проблема - https://gamedev.ru/code/forum/?id=59472

Добавлено: 2018-03-19 22:11:52

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

133

Re: MPC Video Renderer

HEVC 4K 10Bit, P010 формат. DXVA.

Добавлено: 2018-03-20 07:26:14

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

Добавлено: 2018-03-20 19:19:37

По поводу 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

134

Re: MPC Video Renderer

Aleksoid1978 пишет:

По поводу DX11 + DXVA2 - предлагаю весь процесс конвертации в RGB и ресайза перенести на DX9, а потом просто текстуру выводить как есть в DX11.

Тогда возникает вопрос. Зачем нам вообще DX11 ?
Ради шейдеров? Нет. Мы еще даже не выбрали возможностей PS 3.0.

Поэтому пусть DX11 будет просто дополнительным экспериментальным режимом.

Добавлено: 2018-03-20 20:25:24

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

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

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

135

Re: MPC Video Renderer

Надо разбираться кто виноват, наверное декодер.

Добавлено: 2018-03-21 07:07:26

Хотя - как декодер узнает что сменился дисплей/адаптер. Тут видео-рендерер должен реконнект делать.

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

136

Re: MPC Video Renderer

Aleksoid1978 пишет:

Хотя - как декодер узнает что сменился дисплей/адаптер. Тут видео-рендерер должен реконнект делать.

Я сразу запускаю на доп. мониторе, не перемещаю.

Добавлено: 2018-03-21 06:26:26

Я предлагаю основными режимами для DX11 считать программный и D3D11 декод. Декод DXVA2 считать нетипичным для него и не обращать на скорость его работы.
Почему? Просто гнать все в RGB с помощью StretchRect - это как подготавливать цех для производства костылей.

137

Re: MPC Video Renderer

V0lt пишет:

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

Вроде бы нашел причину и устранил. Проверяем и отписываемся.

Добавлено: 2018-03-21 18:50:34

Вот интересно - а мы можем в нашем рендерере(это же не класс на основе окна) каким либо образом получать сообщения от клавиатуры. Почему спросил - ну вот как-то же madVr ловит нажатия клавиш и обрабатывает.

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

138

Re: MPC Video Renderer

Не надо нашему VR ловить клавиатуру в принципе.

Добавлено: 2018-03-21 18:58:04

Aleksoid1978 пишет:

Вроде бы нашел причину и устранил. Проверяем и отписываемся.

Ситуация со статусами как будто не поменялась, но теперь воспроизведение не начинается.

Добавлено: 2018-03-21 22:09:35

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

139

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

140

Re: MPC Video Renderer

Сделал деинтерлейс с удвоением частоты кадров для DX9. Но на текущий момент хорошая плавность не гарантируется.

Добавлено: 2018-03-24 14:47:13

Захотел Я что-нибудь нарисовать на кадре. На DX11 вроде можно рисовать сразу на поверхности с помощью Direct2D.

А вот с DX9 засада. Чтобы нормально рисовать, придется использовать функции D3DX c соответствующей привязкой к d3dx9_43.dll.
Второй вариант - использовать SubStream в DXVA2-VP.

141

Re: MPC Video Renderer

Можешь рисовать с помощью GDI на поверхности, могу дать пример кода. Я в свое время хотел переделать вывод текста в EVR-CP.

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

142

Re: MPC Video Renderer

GDI для EVR не годится из-за тормознутости, оно только для вывода статистики обновляемой не более 2 раз в секунду.
Напомни, каким образом там происходит наложение на кадр? Через AlphaBlt?

143

Re: MPC Video Renderer

Кстати по поводу Direct2D - тоже все не просто. Я так и не смог найти простой пример как на 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

144

Re: MPC Video Renderer

ID2D1RenderTarget::DrawText не получилось завести?
У меня затык в CreateDxgiSurfaceRenderTarget на таком коде:

    if (filterState == State_Running) {
        hr = ProcessDX11(pBackBuffer, false);
    }

    {
        IDXGISurface* pDxgiSurface = nullptr;
        hr = pBackBuffer->QueryInterface(&pDxgiSurface);

        // Create the DXGI Surface Render Target.
        FLOAT dpiX;
        FLOAT dpiY;
        m_pD2dFactory->GetDesktopDpi(&dpiX, &dpiY);
        D2D1_RENDER_TARGET_PROPERTIES props = D2D1::RenderTargetProperties(D2D1_RENDER_TARGET_TYPE_DEFAULT, D2D1::PixelFormat(DXGI_FORMAT_UNKNOWN, D2D1_ALPHA_MODE_PREMULTIPLIED), dpiX, dpiY);

        CComPtr<ID2D1RenderTarget> pD2dRT;
        hr = m_pD2dFactory->CreateDxgiSurfaceRenderTarget(pDxgiSurface, &props, &pD2dRT);
        if (S_OK == hr) {
            ID2D1SolidColorBrush* pD2dBrush = nullptr;
            hr = pD2dRT->CreateSolidColorBrush(D2D1::ColorF(D2D1::ColorF::Yellow), &pD2dBrush);
            if (S_OK == hr) {
                pD2dRT->BeginDraw();
                pD2dRT->DrawLine(D2D1::Point2F(0, 0), D2D1::Point2F(100, 100), pD2dBrush, 0.5f);
                pD2dRT->EndDraw();
            }
        }
    }

    hr = m_pDXGISwapChain1->Present(0, 0);

Добавлено: 2018-03-26 21:07:29

Я тут ради эксперимента убрал ручную загрузку dxva2.dll. Теперь она загружается сразу при запуске рендерера (либо используется загруженная декодером/плеером). Если надо загружать только при первом обращении, то можно прописать в /DELAYLOAD (такое у нас используется в плеере для gdiplus.dll). Тоже самое можно без проблем проделать с d3d9.dll.

145

Re: MPC Video Renderer

Надо вместо

IDXGISurface* pDxgiSurface = nullptr;
hr = pBackBuffer->QueryInterface(&pDxgiSurface);

делать

hr = m_pDXGISwapChain1->GetBuffer(0, IID_PPV_ARGS(&pDxgiSurface));
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

146

Re: MPC Video Renderer

Сделал, но ничего не поменялось.

147

Re: MPC Video Renderer

Вот патч. С ним все работает.
https://yadi.sk/d/Gdubwr783Tneht

В нем ессно все локально(по быстрому накидал) smile

Добавлено: 2018-03-27 17:52:06

А вот с выводом текста - https://yadi.sk/d/51Q2Dg233To32d

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

148

Re: MPC Video Renderer

Хорошо посмотрю.
PS: Как же бесит этот git, банальный патч не может применить. Каждый раз руками переношу. mad

Для режима DX9 мне удалось вывести текст на полупрозрачном фоне через GDI+.

Добавлено: 2018-03-27 22:41:27

Aleksoid1978
Твой код для DX11 у меня почему-то не работает. Обновись и проверь сам.

Если починим, то завтра буду писать метод для включения-выключения OSD.

Добавлено: 2018-04-01 08:48:31

Включение-выключение OSD сделано через опцию. Надо подумать чем ее наполнить.

Случайно наткнулся на описание IDXGISwapChain4::SetHDRMetaData, поддерживает HDR10.

С поддержкой тоже интересно:
IDXGISwapChain1 - Win8
IDXGISwapChain2 - Win8.1
IDXGISwapChain3 - Win10
IDXGISwapChain4 - Win10+
Как с этим зоопарком нормально работать? smile
Есть только игнорировать Win8, чтобы полегче было. neutral

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

Типа
DX9 - Win7 и новее.
DX11 - Win8.1 и новее.

149

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

150

Re: MPC Video Renderer

Если создать IDXGISwapChain4, то после можно без проблем использовать методы предков и кастовать до предков, если потребуется. Но это не будет работать ни на чем, кроме свежей 10-ки (возможно даже LTSB 1607 в пролете).

Если у нас IDXGISwapChain1, мы сможем кастонуть его до потомка?