2.13.1. V4L2_META_FMT_D4XX (‘D4XX’)¶
Intel D4xx UVC 相机元数据
2.13.1.1. 描述¶
Intel D4xx(D435、D455 和其他)相机在其 UVC 有效载荷头中包含每帧元数据,遵循 Microsoft(R) UVC 扩展提议 [1]。这意味着,在标准 UVC 头之后的私有 D4XX 元数据以块的形式组织。D4XX 相机实现了 Microsoft 提出的几种标准块类型和几种专有类型。支持的标准元数据类型包括 MetadataId_CaptureStats(ID 3)、MetadataId_CameraExtrinsics(ID 4)和 MetadataId_CameraIntrinsics(ID 5)。有关其描述,请参见 [1]。本文档描述了 D4xx 相机使用的专有元数据类型。
V4L2_META_FMT_D4XX 缓冲区遵循 V4L2_META_FMT_UVC 的元数据缓冲区布局,唯一的区别在于它还包括专有的有效载荷头数据。D4xx 相机使用批量传输,每帧只发送一个有效载荷,因此它们的头不能大于 255 字节。
本文档实现了 Intel 配置版本 3 [9]。
以下是 D4xx 相机使用的专有 Microsoft 样式元数据类型,其中所有字段均为小端顺序
字段 |
描述 |
---|---|
深度控制 |
|
__u32 ID |
0x80000000 |
__u32 大小 |
以字节为单位的大小,包括 ID(所有协议版本:60) |
__u32 版本 |
此结构的 版本。本文档涵盖版本 1、2 和 3。当添加新字段时,版本号将递增。 |
__u32 标志 |
标志的位掩码:请参见下面的 [2] |
__u32 增益 |
以内部单位表示的增益值,与用于捕获帧的 V4L2_CID_GAIN 控制相同 |
__u32 曝光 |
用于捕获帧的曝光时间(以微秒为单位) |
__u32 激光功率 |
用于深度测量的激光 LED 的功率 0-360 |
__u32 AE 模式 |
0:手动;1:自动曝光 |
__u32 曝光优先级 |
曝光优先级值:0 - 恒定帧率 |
__u32 AE ROI 左 |
AE 感兴趣区域的左边界(所有 ROI 值均以像素为单位,并且分别位于 0 和最大宽度或高度之间) |
__u32 AE ROI 右 |
AE 感兴趣区域的右边界 |
__u32 AE ROI 上 |
AE 感兴趣区域的上边界 |
__u32 AE ROI 下 |
AE 感兴趣区域的下边界 |
__u32 预设 |
预设选择器值,默认值:0,除非用户更改 |
__u8 发射器模式(仅限 v3)(v1 的 __u32 激光模式)[8] |
0:关闭,1:开启,与 v1 的 __u32 激光模式相同 |
__u8 RFU 字节(仅限 v3) |
用于将来使用的备用字节 |
__u16 LED 功率(仅限 v3) |
LED 功率值 0-360 (F416 SKU) |
捕获时序 |
|
__u32 ID |
0x80000001 |
__u32 大小 |
以字节为单位的大小,包括 ID(所有协议版本:40) |
__u32 版本 |
此结构的 版本。本文档对应于版本 xxx。当添加新字段时,版本号将递增。 |
__u32 标志 |
标志的位掩码:请参见下面的 [3] |
__u32 帧计数器 |
单调递增计数器 |
__u32 光学时间 |
从帧的开始到中间的时间,以微秒为单位 |
__u32 读出时间 |
读取一帧所用的时间,以微秒为单位 |
__u32 曝光时间 |
帧曝光时间,以微秒为单位 |
__u32 帧间隔 |
以微秒为单位 = 1000000 / 帧率 |
__u32 管道延迟 |
从帧的开始到 USB 缓冲区中的数据的时间,以微秒为单位 |
配置 |
|
__u32 ID |
0x80000002 |
__u32 大小 |
以字节为单位的大小,包括 ID (v1:36, v3:40) |
__u32 版本 |
此结构的 版本。本文档对应于版本 xxx。当添加新字段时,版本号将递增。 |
__u32 标志 |
标志的位掩码:请参见下面的 [4] |
__u8 硬件类型 |
相机硬件版本 [5] |
__u8 SKU ID |
相机硬件配置 [6] |
__u32 Cookie |
内部同步 |
__u16 格式 |
图像格式代码 [7] |
__u16 宽度 |
以像素为单位的宽度 |
__u16 高度 |
以像素为单位的高度 |
__u16 帧率 |
每秒请求的帧速率 |
__u16 触发 |
字节 0:位 0:深度和 RGB 已同步,位 1:外部触发 |
__u16 校准计数(仅限 v3) |
校准计数器,请参见下面的 [4] |
__u8 GPIO 输入数据(仅限 v3) |
GPIO 读出,请参见下面的 [4](从 FW 5.12.7.0 开始支持) |
__u32 子预设信息(仅限 v3) |
子预设选择信息,请参见下面的 [4] |
__u8 保留(仅限 v3) |
RFU 字节。 |
[1] https://docs.microsoft.com/en-us/windows-hardware/drivers/stream/uvc-extensions-1-5
[2] 深度控制标志指定哪些字段有效
0x00000001 Gain
0x00000002 Exposure
0x00000004 Laser power
0x00000008 AE mode
0x00000010 Exposure priority
0x00000020 AE ROI
0x00000040 Preset
0x00000080 Emitter mode
0x00000100 LED Power
[3] 捕获时序标志指定哪些字段有效
0x00000001 Frame counter
0x00000002 Optical time
0x00000004 Readout time
0x00000008 Exposure time
0x00000010 Frame interval
0x00000020 Pipe latency
[4] 配置标志指定哪些字段有效
0x00000001 Hardware type
0x00000002 SKU ID
0x00000004 Cookie
0x00000008 Format
0x00000010 Width
0x00000020 Height
0x00000040 Framerate
0x00000080 Trigger
0x00000100 Cal count
0x00000200 GPIO Input Data
0x00000400 Sub-preset Info
[5] 相机型号
0 DS5
1 IVCAM2
[6] 8 位相机硬件配置位域
[1:0] depthCamera
00: no depth
01: standard depth
10: wide depth
11: reserved
[2] depthIsActive - has a laser projector
[3] RGB presence
[4] Inertial Measurement Unit (IMU) presence
[5] projectorType
0: HPTG
1: Princeton
[6] 0: a projector, 1: an LED
[7] reserved
[7] 每个视频流接口的图像格式代码
深度
1 Z16
2 Z
左传感器
1 Y8
2 UYVY
3 R8L8
4 Calibration
5 W10
鱼眼传感器
1 RAW8
[8] 版本 3 中“激光模式”已被三个不同的字段替换。“激光”已重命名为“发射器”,因为相机投影仪有多种技术。由于我们有另一个用于“激光功率”的字段,因此我们为额外的发射器引入了“LED 功率”。
- “激光模式” __u32 字段已拆分为:
1 __u8 发射器模式 2 __u8 RFU 字节 3 __u16 LED 功率
这是版本 1 和版本 3 之间的更改。所有版本 1、2 和 3 都与相同的数据格式向后兼容,并且都支持。请参见 [2] 了解哪些属性有效。
[9] LibRealSense SDK 元数据源: https://github.com/IntelRealSense/librealsense/blob/master/src/metadata.h