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

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

V0lt

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 1811
MPC Video Renderer
« Ответ #135 : 21 Март 2018, 03:26:26 »
Цитата: Aleksoid1978
Хотя - как декодер узнает что сменился дисплей/адаптер. Тут видео-рендерер должен реконнект делать.
Я сразу запускаю на доп. мониторе, не перемещаю.
[merge_posts_bbcode]Добавлено: 2018-03-21 06:26:26[/merge_posts_bbcode]

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

Aleksoid1978

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 2208
MPC Video Renderer
« Ответ #136 : 21 Март 2018, 08:50:34 »
Цитата: V0lt
По поводу StretchRect на доп. дисплее.
Как оказалось декодировало на Nvidia, а обрабатывало и выводило на Intel. Отсюда облом StretchRect.
Почему декодер так себя ведет - непонятно. Я думал декодер цепляется к адаптеру текущего окна. Баг декодера?

Вроде бы нашел причину и устранил. Проверяем и отписываемся.
[merge_posts_bbcode]Добавлено: 2018-03-21 18:50:34[/merge_posts_bbcode]

Вот интересно - а мы можем в нашем рендерере(это же не класс на основе окна) каким либо образом получать сообщения от клавиатуры. Почему спросил - ну вот как-то же 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

V0lt

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 1811
MPC Video Renderer
« Ответ #137 : 21 Март 2018, 19:09:35 »
Не надо нашему VR ловить клавиатуру в принципе.
[merge_posts_bbcode]Добавлено: 2018-03-21 18:58:04[/merge_posts_bbcode]

Цитата: Aleksoid1978
Вроде бы нашел причину и устранил. Проверяем и отписываемся.
Ситуация со статусами как будто не поменялась, но теперь воспроизведение не начинается.

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

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

Aleksoid1978

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 2208
MPC Video Renderer
« Ответ #138 : 21 Март 2018, 22:05:05 »
Хм, странно. Ну попробую разобраться что сейчас не так.
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

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 1811
MPC Video Renderer
« Ответ #139 : 24 Март 2018, 11:47:13 »
Сделал деинтерлейс с удвоением частоты кадров для DX9. Но на текущий момент хорошая плавность не гарантируется.
[merge_posts_bbcode]Добавлено: 2018-03-24 14:47:13[/merge_posts_bbcode]

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

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

Aleksoid1978

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 2208
MPC Video Renderer
« Ответ #140 : 24 Март 2018, 13:48:38 »
Можешь рисовать с помощью 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

V0lt

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 1811
MPC Video Renderer
« Ответ #141 : 24 Март 2018, 15:52:16 »
GDI для EVR не годится из-за тормознутости, оно только для вывода статистики обновляемой не более 2 раз в секунду.
Напомни, каким образом там происходит наложение на кадр? Через AlphaBlt?

Aleksoid1978

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 2208
MPC Video Renderer
« Ответ #142 : 26 Март 2018, 04:05:30 »
Кстати по поводу 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

V0lt

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 1811
MPC Video Renderer
« Ответ #143 : 26 Март 2018, 18:07:29 »
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 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);
[merge_posts_bbcode]Добавлено: 2018-03-26 21:07:29[/merge_posts_bbcode]

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

Aleksoid1978

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 2208
MPC Video Renderer
« Ответ #144 : 27 Март 2018, 00:45:40 »
Надо вместо
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

V0lt

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 1811
MPC Video Renderer
« Ответ #145 : 27 Март 2018, 03:03:50 »
Сделал, но ничего не поменялось.

Aleksoid1978

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 2208
MPC Video Renderer
« Ответ #146 : 27 Март 2018, 07:52:06 »
Вот патч. С ним все работает.
https://yadi.sk/d/Gdubwr783Tneht

В нем ессно все локально(по быстрому накидал) :)
[merge_posts_bbcode]Добавлено: 2018-03-27 17:52:06[/merge_posts_bbcode]

А вот с выводом текста - 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

V0lt

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 1811
MPC Video Renderer
« Ответ #147 : 01 Апрель 2018, 05:54:09 »
Хорошо посмотрю.
PS: Как же бесит этот git, банальный патч не может применить. Каждый раз руками переношу. :mad:
 
Для режима DX9 мне удалось вывести текст на полупрозрачном фоне через GDI+.
[merge_posts_bbcode]Добавлено: 2018-03-27 22:41:27[/merge_posts_bbcode]

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

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

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

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

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

С поддержкой тоже интересно:
IDXGISwapChain1 - Win8
IDXGISwapChain2 - Win8.1
IDXGISwapChain3 - Win10
IDXGISwapChain4 - Win10+
Как с этим зоопарком нормально работать? :)
Есть только игнорировать Win8, чтобы полегче было. :|
[merge_posts_bbcode]Добавлено: 2018-04-01 08:54:09[/merge_posts_bbcode]

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

Aleksoid1978

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 2208
MPC Video Renderer
« Ответ #148 : 01 Апрель 2018, 09:39:22 »
Да спокойно работать. Если получаешь интерфейс - значит поддерживается. Нет - значит нет.
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

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 1811
MPC Video Renderer
« Ответ #149 : 01 Апрель 2018, 11:02:49 »
Если создать IDXGISwapChain4, то после можно без проблем использовать методы предков и кастовать до предков, если потребуется. Но это не будет работать ни на чем, кроме свежей 10-ки (возможно даже LTSB 1607 в пролете).

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