Эффект AV_CODEC_FLAG2_FAST в декодировании H.264 - PullRequest
0 голосов
/ 25 февраля 2019

Кто-нибудь знает, как влияет флаг AV_CODEC_FLAG2_FAST в библиотеке libavcodec (ffmpeg 4.0.2), если для него установлено значение AVCodecContext?

AVCodecContext* avCodecContext;
AVCodec* avCodec;

...
avCodec = ...;
avCodecContext = avcodec_alloc_context3(avCodec);
avCodecContext->flags2 |= AV_CODEC_FLAG2_FAST;
...
// start receiving stream and parsing and decoding frames
...

Как я проверял на камере AXIS,Я не вижу никакой разницы в производительности декодирования, когда этот флаг установлен, по сравнению с неиспользованием этого флага.

Любая идея, любая информация приветствуется.

Ответы [ 2 ]

0 голосов
/ 18 августа 2019

Если disable_deblocking_filter_idc = 2 (т.е. деблокирование через границы слайса отключено и, следовательно, каждый слайс полностью автономен) во входном потоке, тогда флаг AV_CODEC_FLAG2_FAST не действует.

В противном случае могут наблюдаться ухудшения зрения (из-за дрейфа между процессами кодирования и декодирования), особенно если количество фрагментов в кадре велико и / или интервал между последовательными кадрами IDR велик (из-за временного распространения),

Обратите внимание, что кадры IDR не устраняют дрейф, они просто уменьшают его.

0 голосов
/ 25 февраля 2019

Основываясь на быстром взгляде на код в многопоточном декодировании, h264 параллельно декодирует макроблоки обычно, пропуская внутриконтурный фильтр.После того как весь кадр был декодирован, последовательно применяется фильтр удаления блочности, что может происходить через границы слайса.

При установленном флаге деблокирование больше не откладывается.Компромисс состоит в том, что деблокирование не пересекает границы среза, поэтому на краях среза могут быть разрывы / артефакты.

Я бы предположил, что любое относительное ускорение будет заметным, когда декодирование использует много потоков.

...