FFMpeg,AVFrame和AVBuffer

时间:2015-07-14 17:31:02

标签: opencv ffmpeg

我需要帮助理解AVBuffer和AVFrame之间的关系。我陷入这种混乱的原因是我试图建立帧的队列,我明白它可以通过"参考计数"来完成。

这就是我的理解:
- 在AVCondecContext中设置refcounted_frame = 1可启用avcodec_framde_decode2()的引用计数/传递。
- 每次调用avcodec_frame_decode2()时,我都会在AVFrame-> buf中获得一个新的缓冲区。

我对此感到困惑:
- 被引用的框架基本上是'之前的' AVFrame->数据△φ
- 如果以上情况属实,我将如何引用计算的帧?我想通过AVFrame-> buf [i]?

非常感谢任何澄清。

-T

1 个答案:

答案 0 :(得分:3)

  
      
  • 基本参考框架' previous' AVFrame->数据△φ
  •   

嗯,有点,但请注意大多数现代编解码器支持多个引用,因此过去的N AVFrame-> data []在编解码器内部缓存,以用作后续帧的帧间预测中的参考帧。

另请注意,虽然名称相同,但引用计数和参考帧之间没有关系。

  
      
  • 如果以上情况属实,我将如何参考计算的帧数?我想通过AVFrame-> buf [i]?
  •   

不,AVFrame-> buf []只是缓冲区对象的占位符,属于AVFrame-> data []中的平面数据。该帧还保存其他缓冲区,例如侧数据。如果您希望访问解码器可能用作帧间预测中的参考帧的先前帧,则必须在返回帧时手动缓存帧。另请注意,vp9和hevc具有不可见帧的概念,这些帧永远不会返回给用户,并且仅存在于内部用于编码解码器中的后续帧。