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

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

V0lt

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 1793
MPC Video Renderer
« Ответ #30 : 05 Март 2018, 03:21:40 »
1. Есть метод IDirect3DDevice9::UpdateSurface, который не работает для нашего случая.
2. Есть еще функция D3DXLoadSurfaceFromSurface, но придется тянуть d3dx9_43.dll.
[merge_posts_bbcode]Добавлено: 2018-03-05 06:21:40[/merge_posts_bbcode]

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

Aleksoid1978

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 2198
MPC Video Renderer
« Ответ #31 : 05 Март 2018, 13:04:54 »
Ну тогда надо - временную поверхность создавать размером видео-кадра, рендерить в нее. А потом по необходимости уже ресайзить "на экран".
[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.
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
« Ответ #32 : 06 Март 2018, 15:02:50 »
IDirect3DDevice9::StretchRect делает все в видеокарте, поэтому и быстрый.

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

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

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

Aleksoid1978

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 2198
MPC Video Renderer
« Ответ #33 : 06 Март 2018, 21:26:04 »
Если нужен MFC - надо просто переделать немного регистрацию фильтра. А вообще, можно обойтись и без MFC, чисто виндовый апи юзать.
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
« Ответ #34 : 08 Март 2018, 04:06:55 »
Не могу понять почему этот патч падает при вызове m_pVideoRenderer->get_FrameInfo().

Aleksoid1978

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 2198
MPC Video Renderer
« Ответ #35 : 08 Март 2018, 11:23:59 »
Гляну. Ну наверное что-то не учел ))

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

Предлагаю вообще убрать DXVA-HD, тогда бы я попробовал заняться внедрением деинтерлейса.
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
« Ответ #36 : 08 Март 2018, 19:52:39 »
Хорошо, сделаю...

Я сам планировал убрать 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

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 1793
MPC Video Renderer
« Ответ #37 : 09 Март 2018, 03:07:36 »
Aleksoid1978
Скоро будет полноценный деинтерлейс.

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

Aleksoid1978

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 2198
MPC Video Renderer
« Ответ #38 : 09 Март 2018, 03:33:18 »
По поводу деинтерлейса и прогрессива - по хорошему надо всегда пытаться создавать видео-ппроцессор с деинтерлейсом. А дальше уже по факту входящих сэмплов проставлять формат.

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

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

По хорошему и выбор видео-процессора надо переделать, надо выбирать наилучший, если такого нет то выбирать bob.
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
« Ответ #39 : 09 Март 2018, 03:49:56 »
Bob всегда идет последним, поэтому с ним проблем не будет.

Aleksoid1978

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 2198
MPC Video Renderer
« Ответ #40 : 09 Март 2018, 04:11:25 »
Не в этом дело, я про сам выбор. Надо сперва искать с поддержкой PixelAdaptive, если такого нет то Bob, ну и если все фейл - то юзать прогрессив.
[merge_posts_bbcode]Добавлено: 2018-03-09 14:11:25[/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

V0lt

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 1793
MPC Video Renderer
« Ответ #41 : 09 Март 2018, 04:21:13 »
Интерлейс PixelAdaptive всегда идет раньше Bob-а. :)
Bob всегда присутствует по факту и по спецификации.

Aleksoid1978

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 2198
MPC Video Renderer
« Ответ #42 : 09 Март 2018, 04:42:45 »
Ну, возможно из-за дров, PixelAdaptive может и не быть, мало ли.
[merge_posts_bbcode]Добавлено: 2018-03-09 14:42:45[/merge_posts_bbcode]

Я так понимаю с Backward/Forward уже работает ??
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
« Ответ #43 : 09 Март 2018, 04:54:15 »
Да, вроде работает. Но мне непонятно как удваиваются кадры, если вообще удваиваются. :)

Aleksoid1978

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 2198
MPC Video Renderer
« Ответ #44 : 09 Март 2018, 04:57:26 »
А почему мы игнорируем fps и тупо проставляем 60 ??

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