有什么人知道在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相机上测试的那样,与不使用此标志相比,设置此标志时,我看不出解码性能的任何差异。
任何想法,任何信息赞赏。
基于对代码的快速浏览,在多线程解码中,h264并行解码通常的宏块,跳过环路滤波器。一旦整个帧被解码,就会串行应用去块滤波器,这可以跨越片边界发生。
设置标志后,解锁不再延迟。权衡是解块不会越过切片边界,因此切片边缘可能存在不连续性/伪影。
我想当解码使用许多线程时,任何相对加速都会很突出。
如果在输入流中disable_deblocking_filter_idc = 2(即,禁止跨越切片边界的解块并且因此每个切片完全是自包含的),则标志AV_CODEC_FLAG2_FAST不起作用。
否则可以观察到视觉损伤(由于编码和解码过程之间的漂移),特别是如果每个pframe的切片数量高和/或连续IDR帧之间的间隔很长(由于时间传播)。
请注意,IDR帧不会消除漂移,它们只会减少漂移。