2.13.2. V4L2_META_FMT_D4XX (‘D4XX’)

Intel D4xx UVC 摄像头元数据

2.13.2.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 Size

大小(字节),包含 ID(所有协议版本:60)

__u32 Version

本结构的版本。本文档涵盖版本 1、2 和 3。添加新字段时,版本号将递增。

__u32 Flags

标志位掩码:请参阅 [2] 下文

__u32 Gain

增益值(内部单位),与用于捕获帧的 V4L2_CID_GAIN 控制相同

__u32 Exposure

曝光时间(微秒),用于捕获帧

__u32 Laser power

激光 LED 功率 0-360,用于深度测量

__u32 AE mode

0: 手动;1: 自动曝光

__u32 Exposure priority

曝光优先级值:0 - 恒定帧率

__u32 AE ROI left

AE 感兴趣区域的左边界(所有 ROI 值均以像素为单位,介于 0 和最大宽度或高度之间)

__u32 AE ROI right

AE 感兴趣区域的右边界

__u32 AE ROI top

AE 感兴趣区域的上边界

__u32 AE ROI bottom

AE 感兴趣区域的下边界

__u32 Preset

预设选择器值,默认值:0,除非用户更改

__u8 Emitter mode (v3 only) (__u32 Laser mode for v1) [8]

0: 关,1: 开,与 v1 中的 __u32 Laser 模式相同

__u8 RFU byte (v3 only)

备用字节,供将来使用

__u16 LED Power (v3 only)

LED 功率值 0-360 (F416 SKU)

捕获时序

__u32 ID

0x80000001

__u32 Size

大小(字节),包含 ID(所有协议版本:40)

__u32 Version

本结构的版本。本文档对应版本 xxx。添加新字段时,版本号将递增。

__u32 Flags

标志位掩码:请参阅 [3] 下文

__u32 Frame counter

单调递增计数器

__u32 Optical time

从帧开始到帧中间的微秒时间

__u32 Readout time

用于读取帧的微秒时间

__u32 Exposure time

帧曝光时间(微秒)

__u32 Frame interval

微秒 = 1000000 / 帧率

__u32 Pipe latency

从帧开始到 USB 缓冲区数据写入的微秒时间

配置

__u32 ID

0x80000002

__u32 Size

大小(字节),包含 ID (v1:36, v3:40)

__u32 Version

本结构的版本。本文档对应版本 xxx。添加新字段时,版本号将递增。

__u32 Flags

标志位掩码:请参阅 [4] 下文

__u8 Hardware type

摄像头硬件版本 [5]

__u8 SKU ID

摄像头硬件配置 [6]

__u32 Cookie

内部同步

__u16 Format

图像格式代码 [7]

__u16 Width

宽度(像素)

__u16 Height

高度(像素)

__u16 Framerate

每秒请求帧率

__u16 Trigger

字节 0:位 0:深度和 RGB 同步,位 1:外部触发

__u16 Calibration count (v3 only)

校准计数器,请参阅 [4] 下文

__u8 GPIO input data (v3 only)

GPIO 读取,请参阅 [4] 下文(从 FW 5.12.7.0 开始支持)

__u32 Sub-preset info (v3 only)

子预设选择信息,请参阅 [4] 下文

__u8 reserved (v3 only)

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 Emitter mode 2 __u8 RFU byte 3 __u16 LED Power

这是版本 1 和版本 3 之间的更改。所有版本 1、2 和 3 都与相同的数据格式向后兼容,并且都受支持。有关哪些属性有效,请参阅 [2]。

[9] LibRealSense SDK 元数据源: https://github.com/IntelRealSense/librealsense/blob/master/src/metadata.h