AV_CODEC_FLAG2_FAST解码H.264的效果
Effect of AV_CODEC_FLAG2_FAST in decoding H.264
有谁知道 libavcodec 库 (ffmpeg 4.0.2) 中的 AV_CODEC_FLAG2_FAST
标志在 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 并行解码正常宏块,跳过环路滤波器。一旦整个帧被解码,去块滤波器被串行应用,这可以跨切片边界发生。
标志设置后,解块不再延迟。权衡是解块不会跨越切片边界,因此在切片边缘可能有 discontinuities/artifacts。
我想当解码使用许多线程时,任何相对加速都会很显着。
如果输入流中 disable_deblocking_filter_idc = 2(即禁用跨切片边界的去块,因此每个切片都是完全独立的),则标志 AV_CODEC_FLAG2_FAST 无效。
否则会观察到视觉障碍(由于编码和解码过程之间的漂移),特别是如果每个 pframe 的切片数很高 and/or 连续 IDR 帧之间的间隔很长(由于时间传播).
请注意,IDR 帧不会消除漂移,它们只会减少漂移。
有谁知道 libavcodec 库 (ffmpeg 4.0.2) 中的 AV_CODEC_FLAG2_FAST
标志在 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 并行解码正常宏块,跳过环路滤波器。一旦整个帧被解码,去块滤波器被串行应用,这可以跨切片边界发生。
标志设置后,解块不再延迟。权衡是解块不会跨越切片边界,因此在切片边缘可能有 discontinuities/artifacts。
我想当解码使用许多线程时,任何相对加速都会很显着。
如果输入流中 disable_deblocking_filter_idc = 2(即禁用跨切片边界的去块,因此每个切片都是完全独立的),则标志 AV_CODEC_FLAG2_FAST 无效。
否则会观察到视觉障碍(由于编码和解码过程之间的漂移),特别是如果每个 pframe 的切片数很高 and/or 连续 IDR 帧之间的间隔很长(由于时间传播).
请注意,IDR 帧不会消除漂移,它们只会减少漂移。