"opaque" ffmpeg AVFrame 中的指针
"opaque" pointer in ffmpeg AVFrame
在 ffmpeg
中有一个结构 AVFrame 描述解码的视频或音频数据。
它有一个空指针opaque
。文档声称它是 "for some private data of the user".
这是什么意思?
它可以用于传输任何附加数据作为每帧元数据吗?
这是一个专供用户(相对于 ffmpeg 库)使用的字段; ffmpeg 不会以任何方式触及此字段,因此您可以随意使用它。但有一个警告:一些 ffmpeg 函数将制作 AVFrame 的副本(或者可能将引用从 AVFrame 移动到另一个),其中包括复制该字段的值。管理该字段指向的数据的生命周期可能有点棘手。
如果您只需要处理一些每帧元数据,您可能需要考虑 AVFrame 中可用的现有元数据存储(参见 av_frame_get_metadata/av_frame_set_metadata
)
稍微扩展一下@Andrey Turkin 所说的内容,目的是将特定于应用程序的对象数据添加到 AVFrame 结构中。具体用例通常是应用程序分配内存(使用 get_buffer2 回调)。这个内存可能只是一个指针,但它有时可以是 GPU 中的内存或类似的东西。无论如何,如果应用程序拥有数据并创建与分配的内存/图片缓冲区关联的对象,它通常会希望在解码器 returns avcodec_decode_video2()
函数中给定的 AVFrame 时访问关联的对象,这就是您通常希望使用不透明字段的目的。
在 ffmpeg
中有一个结构 AVFrame 描述解码的视频或音频数据。
它有一个空指针opaque
。文档声称它是 "for some private data of the user".
这是什么意思? 它可以用于传输任何附加数据作为每帧元数据吗?
这是一个专供用户(相对于 ffmpeg 库)使用的字段; ffmpeg 不会以任何方式触及此字段,因此您可以随意使用它。但有一个警告:一些 ffmpeg 函数将制作 AVFrame 的副本(或者可能将引用从 AVFrame 移动到另一个),其中包括复制该字段的值。管理该字段指向的数据的生命周期可能有点棘手。
如果您只需要处理一些每帧元数据,您可能需要考虑 AVFrame 中可用的现有元数据存储(参见 av_frame_get_metadata/av_frame_set_metadata
)
稍微扩展一下@Andrey Turkin 所说的内容,目的是将特定于应用程序的对象数据添加到 AVFrame 结构中。具体用例通常是应用程序分配内存(使用 get_buffer2 回调)。这个内存可能只是一个指针,但它有时可以是 GPU 中的内存或类似的东西。无论如何,如果应用程序拥有数据并创建与分配的内存/图片缓冲区关联的对象,它通常会希望在解码器 returns avcodec_decode_video2()
函数中给定的 AVFrame 时访问关联的对象,这就是您通常希望使用不透明字段的目的。