AV_CODEC_FLAG2_FAST在解码H.264中的作用

时间:2019-02-25 16:27:20

标签: ffmpeg h.264 libavcodec

有人在 LocalDate year = LocalDate.now().withYear(jahr); 上进行设置时,是否知道libavcodec库(ffmpeg 4.0.2)中的AV_CODEC_FLAG2_FAST标志有什么作用?

AVCodecContext

正如我在AXIS摄像机上测试的那样,与不使用此标志相比,设置此标志时看不到解码性能的任何差异。

任何想法,任何信息都值得赞赏。

2 个答案:

答案 0 :(得分:1)

基于代码的快速浏览,在多线程解码中,h264通常以并行方式对宏块进行解码,从而跳过了环路滤波器。一旦整个帧都已解码,便会依次应用解块滤波器,这可能会在切片边界上发生。

设置了该标志后,不再阻止解块。权衡是,解块不会跨越切片边界,因此切片边缘可能存在不连续性/伪像。

我猜想解码使用许多线程时,任何相对的加速都会很明显。

答案 1 :(得分:1)

如果输入流中的disable_deblocking_filter_idc = 2(即,禁止跨切片边界进行解块,因此每个切片都完全独立),则标志AV_CODEC_FLAG2_FAST无效。

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

请注意,IDR帧并不能消除漂移,而只是减少了漂移。