"opaque" ffmpeg AVFrame 中的指针
"opaque" pointer in ffmpeg AVFrame
在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时,它通常希望访问关联对象,这就是您通常想要使用不透明字段的原因。
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- QMetaObject invokeMethod的基于函数指针的语法
- 如何从 std::atomic 中提取指针 T<T>?
- 如何在 C# 中映射双 C 结构指针?
- C++将浮点指针值舍入为小数位数
- 为什么++(*p)更改指针值
- 调整大小后指向元素值的指针unordered_map有效?
- 正在将指针转换为范围
- 使用指向成员的指针将成员函数作为参数传递
- 将OpenCV C++重写为EmguCV C#-如何使用指针
- "opaque" ffmpeg AVFrame 中的指针