"opaque" ffmpeg AVFrame 中的指针

"opaque" pointer in ffmpeg AVFrame

本文关键字:指针 AVFrame opaque ffmpeg      更新时间:2023-10-16

ffmpeg中有一个描述解码视频或音频数据的AVFrame结构。

它有一个空指针opaque。文档声称它是"用于用户的一些私人数据"。

这是什么意思?它可以用来传输任何额外的数据作为每帧元数据吗?

这是一个专用于用户使用的字段(与ffmpeg库相反);Ffmpeg不会以任何方式触及该字段,因此您可以根据自己的需要自由使用它。有一个警告:一些ffmpeg函数会复制AVFrame(或者可能将引用从AVFrame移动到另一个),这包括复制这个字段的值。管理这个字段所指向的数据的生命周期可能有点棘手。

如果你只需要处理一些逐帧元数据,你可能想考虑AVFrame中可用的现有元数据存储(参见av_frame_get_metadata/av_frame_set_metadata)

稍微扩展一下@Andrey Turkin所说的内容,目的是将特定于应用程序的对象数据添加到AVFrame结构中。具体的用例通常是应用程序分配内存时(使用get_buffer2回调)。这个内存可能只是一个指针,但有时也可能是GPU中的内存或类似的东西。无论如何,如果应用程序拥有数据并创建与分配的内存/图片缓冲区关联的对象,当解码器在avcodec_decode_video2()函数中返回给定的AVFrame时,它通常希望访问关联对象,这就是您通常想要使用不透明字段的原因。