4.14. 元数据接口

元数据是指补充视频帧的附加信息的任何非图像数据。这可能包括在图像上计算的统计信息、图像源提供的帧捕获参数或指定设备如何处理图像的设备特定参数。此接口旨在用于用户空间和硬件之间的元数据传输以及对该操作的控制。

元数据接口在视频设备节点上实现。该设备可以专用于元数据,也可以如其报告的功能中所指定的那样同时支持视频和元数据。

4.14.1. 查询功能

支持元数据捕获接口的设备节点在 v4l2_capability 结构体的 device_caps 字段中设置 V4L2_CAP_META_CAPTURE 标志,该结构体由 VIDIOC_QUERYCAP() ioctl 返回。该标志表示设备可以将元数据捕获到内存。类似地,支持元数据输出接口的设备节点在 v4l2_capability 结构体的 device_caps 字段中设置 V4L2_CAP_META_OUTPUT 标志。该标志表示设备可以从内存读取元数据。

必须支持至少一种读取/写入或流式 I/O 方法。

4.14.2. 数据格式协商

元数据设备使用 数据格式 ioctl 来选择捕获格式。元数据缓冲区内容格式绑定到所选格式。除了基本的 数据格式 ioctl 外,还必须支持 VIDIOC_ENUM_FMT() ioctl。

要使用 数据格式 ioctl,应用程序将 v4l2_format 结构体的 type 字段设置为 V4L2_BUF_TYPE_META_CAPTUREV4L2_BUF_TYPE_META_OUTPUT,并根据所需的操作使用 v4l2_meta_format meta 成员。驱动程序和应用程序都必须将 v4l2_format 结构体的其余部分设置为 0。

按行捕获元数据的设备为 VIDIOC_ENUM_FMT() 设置结构体 v4l2_fmtdesc 的 V4L2_FMT_FLAG_META_LINE_BASED 标志。此类设备通常也可以捕获图像数据。这主要涉及从其他设备(例如相机传感器)接收数据的设备。

type v4l2_meta_format
struct v4l2_meta_format

__u32

dataformat

应用程序设置的数据格式。这是一个小端四字符代码。V4L2 在 元数据格式中定义了元数据格式。

__u32

buffersize

数据所需的以字节为单位的最大缓冲区大小。该值由驱动程序设置。

__u32

width

以数据单位为单位的元数据行宽度。当 :c:type`v4l2_fmtdesc` 标志 V4L2_FMT_FLAG_META_LINE_BASED 设置时有效,否则为零。请参阅 VIDIOC_ENUM_FMT()

__u32

height

元数据的行数。当 :c:type`v4l2_fmtdesc` 标志 V4L2_FMT_FLAG_META_LINE_BASED 设置时有效,否则为零。请参阅 VIDIOC_ENUM_FMT()

__u32

bytesperline

两条连续行的开头之间的以字节为单位的偏移量。当 :c:type`v4l2_fmtdesc` 标志 V4L2_FMT_FLAG_META_LINE_BASED 设置时有效,否则为零。请参阅 VIDIOC_ENUM_FMT()