MPC Video Renderer

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

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

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

Aleksoid1978

V0lt
Слушай, пока не обросло сильно кодом, может попробуешь прикрутить рендеринг 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

На Win7 видеопроцессор D3D11 не заработает. Надо на Win8.1 проверять, но это у меня не основная система.

Есть еще пример, но он какой-то странный, на выходе dll, которую непонятно как использовать.

Aleksoid1978

ну так блин, давно пора уже поставить ченить по новее 7, лучше уж сразу 10. И заняться делом ))
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

Evgeniy1990

Цитата: Aleksoid1978По поводу зелени - Evgeniy1990 если не лень, попробуй методом перебора выяснить коммит после которого началось.
Я выяснил, с какого коммита появилась зелень - с билда 66, коммит db9e49e.
[merge_posts_bbcode]Добавлено: 2018-03-10 11:54:53[/merge_posts_bbcode]

Изменение : По возможности всегда используем видео-процессор с поддер...

...жкой деинтерлейса(т.к. встречается смешанный контент). Для прогрессивного контента всегда обрабатываем по одному кадру.
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.

Aleksoid1978

Ага, есть такое. На Radeon требуется чтобы полностью все сэмплы были заполнены данными, а в случае использования видео-процессора с деинтерлейсом - их получается 1 + 2. Надо бы подкорректировать код, подумаю как красивее сделать. Т.е. нам надо сперва полностью наполнить m_SrcSamples, и только потом обрабатывать через DXVA2-VP.
[merge_posts_bbcode]Добавлено: 2018-03-10 20:05:50[/merge_posts_bbcode]

Короче я выяснил, по крайней мере для Radeon, не важно в какой последовательности заполнять m_SrcSamples(от начала или от конца). Он выдает зелень если m_SrcSamples не полностью заполнено. Получается что рендерить можно только(на примере с Radeon) после получения 3 кадра(1 кадра + 2 backward).
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

Там немного не так. Заполнять поверхность данными не нужно.
Но строка
const size_t numSamples = m_SampleFormat == DXVA2_SampleProgressiveFrame ? 1 : m_DXVA2Samples.size();конечно та еще. Я ее должен был прибить в af6daca, но пропустил.

Aleksoid1978

В том то и дело что обязательно - по крайне мере на Radeon, пока все 3 поверхности не заполнены данными - проскакивает зелень. Это я уже выяснил опытным путем. Причем - пустые поверхности у нас уже заполнены черным цветом - не помогает.

А эту строку кода я уже "откатил".
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

Какими данными?
[merge_posts_bbcode]Добавлено: 2018-03-10 13:59:57[/merge_posts_bbcode]

Я примерно нашел причину. Сделаю билд.

Aleksoid1978

Короче - пока мы не получили 3 сэмпла и не заполнили ими поверхности, на экране зелень. Я хз что там не так у этого долбанного Radeon.
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

Проверьте этот однострочный комит.
Сделал принудительное зануление SampleFormat.SampleFormat при инициализации, т.к. у нас оно заполняется из m_srcExFmt, хотя ранее там тоже ноль был.

Aleksoid1978

Не помогает. И, кстати, это я уже пробовал :)
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

Кстати у меня на Intel при аппаратном декоде нет картинки. :(
Типа будет на чем тестить.
[merge_posts_bbcode]Добавлено: 2018-03-10 15:00:18[/merge_posts_bbcode]

Evgeniy1990
Собери последнюю версию, запусти, и скопируй информацию из "статистики" фильтра.

[merge_posts_bbcode]Добавлено: 2018-03-10 15:06:59[/merge_posts_bbcode]

На Intel обламывается StretchRect.
hr = m_pD3DDevEx->StretchRect(pSurface, nullptr, m_SrcSamples.Get().pSrcSurface, nullptr, D3DTEXF_POINT);Пробовал D3DTEXF_NONE и D3DTEXF_LINEAR - бестолку.

Aleksoid1978

Смотри код ошибки.
[merge_posts_bbcode]Добавлено: 2018-03-10 22:44:03[/merge_posts_bbcode]

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

D3DERR_INVALIDCALL - хотя что это значит )) Пробуй создать поверхность как это я делал, ну мало ли. Только без ALIGN.
[merge_posts_bbcode]Добавлено: 2018-03-10 23:17:54[/merge_posts_bbcode]

Вот еще что нашел, надо смотреть CAPS:
"аппаратная поддержка StretchRect определяется по флагу D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES"
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