MPC Video Renderer

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

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

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

V0lt

1. Есть метод IDirect3DDevice9::UpdateSurface, который не работает для нашего случая.
2. Есть еще функция D3DXLoadSurfaceFromSurface, но придется тянуть d3dx9_43.dll.
[merge_posts_bbcode]Добавлено: 2018-03-05 06:21:40[/merge_posts_bbcode]

3. Рендерим кадр два раза, сначала в промежуточную поверхность, потом в выводимую.

Aleksoid1978

Ну тогда надо - временную поверхность создавать размером видео-кадра, рендерить в нее. А потом по необходимости уже ресайзить "на экран".
[merge_posts_bbcode]Добавлено: 2018-03-05 19:15:54[/merge_posts_bbcode]

Проверил - копирование данных между поверхностями работает(в нашем случае) с помощью IDirect3DDevice9::StretchRect(). Замерил скорость выполнения(проверял в Debug варианте) - на кадре 1920х1080 NV12 и 3840х2160 P010, менее 1мс, даже быстрее чем наш код CopyFrameData().

Так что никакой потери по быстродействию тут и не пахнет.

[merge_posts_bbcode]Добавлено: 2018-03-05 23:04:54[/merge_posts_bbcode]

По поводу деинтерлейса - использовать BobDevice это уже "последнее" дело. По хорошему надо пытаться использовать "девайсы" от вендеров, дабы получить доступ к PixelAdaptive и т.д. В инете даже помню были примеры, там перебором ищется нужный "процессор" для деинтерлейса.

Но вот тут интересный момент - получается что для каждого кадра придется проверять типа(прогрессив/интерлейс) и по необходимости пересоздавать DXVA2-VP.
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

IDirect3DDevice9::StretchRect делает все в видеокарте, поэтому и быстрый.

Цитата: Aleksoid1978Но вот тут интересный момент - получается что для каждого кадра придется проверять типа(прогрессив/интерлейс) и по необходимости пересоздавать DXVA2-VP.
Врядли. Думаю "девайс" от вендера без проблем переварит прогрессивный кадр. Надо попробовать.
[merge_posts_bbcode]Добавлено: 2018-03-06 18:02:50[/merge_posts_bbcode]

Прикрутил заготовку окна настроек и информации. Если не видите, то попробуйте заново зарегистрировать фильтр.

Хотел закинуть в нее небольшую статистику, но похоже придеться MFC прикручивать, которая ошибками сыплет. Пока отложил.

Aleksoid1978

Если нужен MFC - надо просто переделать немного регистрацию фильтра. А вообще, можно обойтись и без MFC, чисто виндовый апи юзать.
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

Не могу понять почему этот патч падает при вызове m_pVideoRenderer->get_FrameInfo().

Aleksoid1978

Гляну. Ну наверное что-то не учел ))

P.S. Ну хз, почему то при вызове вылетает на деструкторе самого фильтра ...
[merge_posts_bbcode]Добавлено: 2018-03-08 21:23:59[/merge_posts_bbcode]

Предлагаю вообще убрать DXVA-HD, тогда бы я попробовал заняться внедрением деинтерлейса.
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

Хорошо, сделаю...

Я сам планировал убрать DXVA-HD для всего кроме прогрессивного RGB32 на Intel. А на AMD и Nvidia реализовать на шейдерах.
[merge_posts_bbcode]Добавлено: 2018-03-08 15:06:20[/merge_posts_bbcode]

DXVA-HD больше не работает. Небольшую часть кода оставил и отключил.

[merge_posts_bbcode]Добавлено: 2018-03-08 22:52:39[/merge_posts_bbcode]

Деинтерлейс с NumBackwardRefSamples = 0 работает.

Я допер до того, как передавать кадры для деинтерлейса с NumBackwardRefSamples > 0, но проблема в том, что придется много чего переделывать, чтобы было все правильно и красиво.

Деинтерлейс с NumForwardRefSamples > 0 реализовать можно, но он будет не совсем правильный, т.к. сейчас мы выводит кадры без задержек и коррекции времени.

V0lt

Aleksoid1978
Скоро будет полноценный деинтерлейс.

Здесь ты сделал неправильно. Должно быть Progressive, т.к. DestFormat.

Aleksoid1978

По поводу деинтерлейса и прогрессива - по хорошему надо всегда пытаться создавать видео-ппроцессор с деинтерлейсом. А дальше уже по факту входящих сэмплов проставлять формат.

Само создание видео-процессора надо бы тоже перенести, в инициализацию директ3д. И убрать проверку на каждый сэмпл.

По поводу последнего коммита - ну бывает.
[merge_posts_bbcode]Добавлено: 2018-03-09 13:33:18[/merge_posts_bbcode]

По хорошему и выбор видео-процессора надо переделать, надо выбирать наилучший, если такого нет то выбирать bob.
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

Bob всегда идет последним, поэтому с ним проблем не будет.

Aleksoid1978

Не в этом дело, я про сам выбор. Надо сперва искать с поддержкой PixelAdaptive, если такого нет то Bob, ну и если все фейл - то юзать прогрессив.
[merge_posts_bbcode]Добавлено: 2018-03-09 14:11:25[/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

V0lt

Интерлейс PixelAdaptive всегда идет раньше Bob-а. :)
Bob всегда присутствует по факту и по спецификации.

Aleksoid1978

Ну, возможно из-за дров, PixelAdaptive может и не быть, мало ли.
[merge_posts_bbcode]Добавлено: 2018-03-09 14:42:45[/merge_posts_bbcode]

Я так понимаю с Backward/Forward уже работает ??
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

А почему мы игнорируем fps и тупо проставляем 60 ??

А понять удваивается или нет, ставишь fraps и смотришь частоту для окна.
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