Мне нужно декодировать видео, но мой видеоплеер поддерживает только формат пикселей RGB8. Поэтому я изучаю, как сделать преобразование формата пикселей в графическом процессоре, желательно в процессе декодирования, но если это невозможно, то после него.
Я нашел Как установить формат пикселя декодирования в libavcodec?, в котором объясняется, как декодировать видео на ffmpeg в определенный формат пикселей, если он поддерживается кодеком.
По сути, get_format()
— это функция, которая выбирает из списка поддерживаемых кодеком форматов пикселей формат пикселей для декодированного видео. Мои вопросы:
sws_scale()
в графическом или центральном процессоре?av_hwframe_transfer_data
, как в примере.
С этого момента не имеет большого значения, использовали ли вы аппаратное или программное декодирование.sws_scale
не использует аппаратное ускорение. Поскольку он не принимает «hwframes». Если вы хотите выполнить преобразование цвета на аппаратном уровне, вы можете взглянуть на OpenCV, вы можете использовать GPUMat
там, затем загрузить свой кадр, вызвать cvtColor
и загрузить его снова.Некоторые общие замечания:
Почти любое масштабирование операций с изображениями и т. д. выполняется быстрее на вашем графическом процессоре, но загрузка и выгрузка данных может занять целую вечность. Для одиночных операций часто не стоит использовать ваш GPU.
В вашем случае я бы попытался сначала поработать с декодированием процессора и преобразованием цвета процессора. Просто убедитесь, что вы используете многопоточные и векторизованные алгоритмы, такие как OpenCV или Intel IPP. Если вам все еще не хватает производительности, вы можете подумать об аппаратном ускорении.
Я слышал, что команда Jetson Nano из NVIDIA собирается поддерживать аппаратное декодирование с помощью ffmpeg. Так как это плата ARM с очень мощным графическим процессором (который может декодировать 8 одновременных потоков 1080p), но с очень ограниченным процессором, я даже не хочу пытаться конвертировать цвета процессора, я уверен, что буду использовать его. Преобразование цветов GPU и, возможно, отсутствие копирования памяти. Я пишу сетевой видеорегистратор, поэтому мне нужно иметь максимальную производительность, потому что будет много одновременного декодирования потоков. Я собираюсь поискать информацию о преобразовании цветов графического процессора, большое спасибо!