FFmpeg - Использование аппаратного ускорения для декодирования видео - PullRequest
0 голосов
/ 11 октября 2018

У меня есть проект, который использует FFmpeg для декодирования видеопотоков, и я хочу использовать аппаратное декодирование, где это возможно.Согласно этому ответу , использование ff_find_hwaccel и друзей в новых сборках FFmpeg не рекомендуется.

В ответе указано, что ff_find_hwaccel устарело.Я хочу знать, как работает новый метод выделения аппаратно ускоренного декодера.Это делается автоматически?Могу ли я просто передать hwaccel в AvDictionary в качестве третьего варианта avcodec_open2, или мне нужно сделать что-то более сложное?

В настоящее время код для выделения AVCodecContext выглядит следующим образом:

auto video_codec = avcodec_find_decoder(codec_id);
auto context = avcodec_alloc_context3(video_codec);
auto retcode = avcodec_open2(context, video_codec, nullptr);

с проверкой ошибок, конечно.

Затем я вставляю AVPackets в декодер, используя avcodec_decode_video2.

1 Ответ

0 голосов
/ 05 ноября 2018

В текущих версиях FFMPEG аппаратное ускорение поддерживается автоматически, если доступно.Именно поэтому ff_find_hwaccel устарела.

В зависимости от используемой платформы и видеокодека, у вас может быть или не быть поддержка аппаратного ускорения для декодирования видео.Например, аппаратное ускоренное декодирование видео H264 уже давно поддерживается на видеокартах Nvidia с использованием декодера H264_NVDEC, но для декодирования HEVC требуется видеокарта, которая чуть новее .Для видеокарт AMD это та же история, за исключением того, что вы обычно используете декодер DXVA2, как упомянуто здесь .

Я кратко: если ваша платформа поддерживает аппаратное ускорение, она должна использоваться FFMPEG автоматически,Вы также можете выполнить дополнительные тесты, принудительно установив декодер .

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