4.14. 元数据接口

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

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

4.14.1. 查询功能

支持元数据捕获接口的设备节点在 V4L2_CAP_META_CAPTURE 中设置标志 v4l2_capability 结构的 device_caps 字段由 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 fmt 联合成员。 驱动程序和应用程序都必须将其余 v4l2_format 结构设置为 0。

通过行捕获元数据的设备具有 struct v4l2_fmtdesc V4L2_FMT_FLAG_META_LINE_BASEDVIDIOC_ENUM_FMT() 设置的标志。 此类设备通常也可以 捕获图像数据。 这主要涉及从其他设备(例如相机传感器)接收数据的设备。

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()