FFMpeg、AVFrame 和 AVBuffer
FFMpeg, AVFrame and AVBuffer
我需要帮助理解 AVBuffer 和 AVFrame 之间的关系。我陷入这种困惑的原因是我试图制作帧队列并且我知道它可以通过 "Reference Counting".
来完成
我是这样理解的:
- 在 AVCondecContext 中设置 refcounted_frame = 1 通过 avcodec_framde_decode2().
启用引用 counting/passing
- 每次调用 avcodec_frame_decode2() 时,我都会在 AVFrame->buf.
中获得一个新缓冲区
我困惑的是:
- 引用帧基本上是 'previous' AVFrame->data??
- 如果以上为真,我将如何引用计数的帧数?我想通过 AVFrame->buf[i]?
非常感谢任何澄清。
-T
- Is referenced frame basically 'previous' AVFrame->data??
嗯,有点,但请注意,大多数现代编解码器都支持多个参考,因此过去的 N AVFrame->data[] 被缓存在编解码器内部,以用作后续帧帧间预测的参考帧.
另请注意,虽然名称相同,但引用计数和引用帧之间没有任何关系。
- If the above is true, how would I reference the counted frames? I suppose via AVFrame->buf[i]?
不是,AVFrame->buf[]只是AVFrame->data[]中属于平面数据的缓冲对象的占位符。该帧还包含其他缓冲区,例如用于辅助数据的缓冲区。如果您想访问解码器可能用作帧间预测中参考帧的先前帧,则必须在返回帧时手动缓存这些帧。另请注意,vp9 和 hevc 具有不可见帧的概念,这些帧永远不会返回给用户,仅供解码器中编码后续帧的内部使用。
我需要帮助理解 AVBuffer 和 AVFrame 之间的关系。我陷入这种困惑的原因是我试图制作帧队列并且我知道它可以通过 "Reference Counting".
来完成我是这样理解的:
- 在 AVCondecContext 中设置 refcounted_frame = 1 通过 avcodec_framde_decode2().
启用引用 counting/passing
- 每次调用 avcodec_frame_decode2() 时,我都会在 AVFrame->buf.
我困惑的是:
- 引用帧基本上是 'previous' AVFrame->data??
- 如果以上为真,我将如何引用计数的帧数?我想通过 AVFrame->buf[i]?
非常感谢任何澄清。
-T
- Is referenced frame basically 'previous' AVFrame->data??
嗯,有点,但请注意,大多数现代编解码器都支持多个参考,因此过去的 N AVFrame->data[] 被缓存在编解码器内部,以用作后续帧帧间预测的参考帧.
另请注意,虽然名称相同,但引用计数和引用帧之间没有任何关系。
- If the above is true, how would I reference the counted frames? I suppose via AVFrame->buf[i]?
不是,AVFrame->buf[]只是AVFrame->data[]中属于平面数据的缓冲对象的占位符。该帧还包含其他缓冲区,例如用于辅助数据的缓冲区。如果您想访问解码器可能用作帧间预测中参考帧的先前帧,则必须在返回帧时手动缓存这些帧。另请注意,vp9 和 hevc 具有不可见帧的概念,这些帧永远不会返回给用户,仅供解码器中编码后续帧的内部使用。