Очень медленный ffmpeg / sws_scale () - только для тяжелых условий - PullRequest
0 голосов
/ 01 июня 2018

Я пишу видеоплеер с использованием ffmpeg (только для Windows, Visual Studio 2015, 64-битная компиляция).С обычными видео (до 4K @ 30FPS) это работает довольно хорошо.Но с моей максимальной целью - 4K @ 60FPS, это терпит неудачу.Декодирование все еще достаточно быстрое, но когда дело доходит до преобразования YUV / BGRA, оно просто не достаточно быстрое, даже если оно выполняется в 16 потоков (по одному потоку на кадр на компьютере с 16/32 ядрами).

Итак, в качестве первой контрмеры я пропустил преобразование некоторых кадров и получил стабильную частоту кадров ~ 40 таким образом.Сравнивая две версии в Concurrency Visualizer, я обнаружил странную проблему, причину которой я не знаю.

.

Вот изображение версии frameskip: enter image description here Вы видите, что преобразование довольно быстрое (в среднем примерно ~ 35 мс). Таким образом, поскольку используется несколько потоков, оно также должно быть достаточно быстрым для 60FPS, но это не так!

.

Изображение версии без frameskip показывает, почему: enter image description here Преобразование одного кадра стало в десять раз медленнее, чем раньше (в среднем примерно ~ 350 мс).Теперь большая нагрузка на многие ядра, конечно, приведет к незначительному замедлению на ядро ​​из-за снижения турбо - скажем, 10 или 20%.Но никогда не бывает чрезмерного замедления на ~ 1000%.

.

Интересная деталь в том, что трассировка стека в не-frameskip-версии показывает некоторую активность системы, которую я не совсем понимаю - начиная сntoskrnl.exe!KiPageFault+0x373.Нет никаких исключений, других сообщений об ошибках или чего-то подобного - это просто становится очень медленным.

Редактировать: коллега только что сказал мне, что это похоже на проблему с памятью с выгруженной памятью на первый взгляд - но мое использование памятинизкий (менее 1 ГБ и более 20 ГБ свободно)

Может кто-нибудь сказать мне, что может быть причиной этого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...