AV_CODEC_FLAG2_FAST对H.264解码的影响

问题描述 投票:0回答:1

有什么人知道在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相机上测试的那样,与不使用此标志相比,设置此标志时,我看不出解码性能的任何差异。

任何想法,任何信息赞赏。

ffmpeg h.264 libavcodec
1个回答
1
投票

基于对代码的快速浏览,在多线程解码中,h264并行解码通常的宏块,跳过环路滤波器。一旦整个帧被解码,就会串行应用去块滤波器,这可以跨越片边界发生。

设置标志后,解锁不再延迟。权衡是解块不会越过切片边界,因此切片边缘可能存在不连续性/伪影。

我想当解码使用许多线程时,任何相对加速都会很突出。


1
投票

如果在输入流中disable_deblocking_filter_idc = 2(即,禁止跨越切片边界的解块并且因此每个切片完全是自包含的),则标志AV_CODEC_FLAG2_FAST不起作用。

否则可以观察到视觉损伤(由于编码和解码过程之间的漂移),特别是如果每​​个pframe的切片数量高和/或连续IDR帧之间的间隔很长(由于时间传播)。

请注意,IDR帧不会消除漂移,它们只会减少漂移。

© www.soinside.com 2019 - 2024. All rights reserved.