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 样式元数据类型,其中所有字段均为小端顺序

D4xx 元数据

字段

描述

深度控制

__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