我需要帮助理解AVBuffer和AVFrame之间的关系。我陷入这种混乱的原因是,我试图使帧队列,我明白,它可以通过"引用计数"来完成。
这是我的理解:
—在AVCondecContext中设置refcounted_frame = 1,可以通过avcodec_framde_decode2()进行引用计数/传递。
-每次avcodec_frame_decode2()被调用,我得到一个新的缓冲区在AVFrame->但是。
我困惑的是:
参考帧基本上是"先前的"AVFrame->数据吗?
-如果以上是真的,我如何引用计数帧?我想通过AVFrame->但是[I]?
任何澄清都是非常感谢的。
- t
参考帧基本上是'先前' AVFrame->数据??
嗯,有点,但请注意,大多数现代编解码器支持多个引用,所以过去的N AVFrame->数据[]在编解码器内部缓存,用作后续帧的内部预测中的参考帧。
还请注意,尽管名称相同,但引用计数和参考帧之间没有关系。
- 如果以上是正确的,我如何引用计数帧?我想通过AVFrame->但是[I]?
不,AVFrame->但是[]只是属于AVFrame->data[]中的平面数据的缓冲区对象的占位符。帧还包含其他缓冲区,例如用于侧数据的缓冲区。如果您希望访问解码器可能在内部预测中用作参考帧的先前帧,则必须在返回帧时手动缓存这些帧。还要注意vp9和hevc有一个不可见帧的概念,这些帧永远不会返回给用户,并且只存在于解码器中编码后续帧的内部使用。