162306a36Sopenharmony_ci.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
262306a36Sopenharmony_ci
362306a36Sopenharmony_ci.. _v4l2-meta-fmt-d4xx:
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci*******************************
662306a36Sopenharmony_ciV4L2_META_FMT_D4XX ('D4XX')
762306a36Sopenharmony_ci*******************************
862306a36Sopenharmony_ci
962306a36Sopenharmony_ciIntel D4xx UVC Cameras Metadata
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ciDescription
1362306a36Sopenharmony_ci===========
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ciIntel D4xx (D435, D455 and others) cameras include per-frame metadata in their UVC
1662306a36Sopenharmony_cipayload headers, following the Microsoft(R) UVC extension proposal [1_]. That
1762306a36Sopenharmony_cimeans, that the private D4XX metadata, following the standard UVC header, is
1862306a36Sopenharmony_ciorganised in blocks. D4XX cameras implement several standard block types,
1962306a36Sopenharmony_ciproposed by Microsoft, and several proprietary ones. Supported standard metadata
2062306a36Sopenharmony_citypes are MetadataId_CaptureStats (ID 3), MetadataId_CameraExtrinsics (ID 4),
2162306a36Sopenharmony_ciand MetadataId_CameraIntrinsics (ID 5). For their description see [1_]. This
2262306a36Sopenharmony_cidocument describes proprietary metadata types, used by D4xx cameras.
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ciV4L2_META_FMT_D4XX buffers follow the metadata buffer layout of
2562306a36Sopenharmony_ciV4L2_META_FMT_UVC with the only difference, that it also includes proprietary
2662306a36Sopenharmony_cipayload header data. D4xx cameras use bulk transfers and only send one payload
2762306a36Sopenharmony_ciper frame, therefore their headers cannot be larger than 255 bytes.
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ciThis document implements Intel Configuration version 3 [9_].
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ciBelow are proprietary Microsoft style metadata types, used by D4xx cameras,
3262306a36Sopenharmony_ciwhere all fields are in little endian order:
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_ci.. tabularcolumns:: |p{5.0cm}|p{12.5cm}|
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ci.. flat-table:: D4xx metadata
3862306a36Sopenharmony_ci    :widths: 1 2
3962306a36Sopenharmony_ci    :header-rows:  1
4062306a36Sopenharmony_ci    :stub-columns: 0
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_ci    * - **Field**
4362306a36Sopenharmony_ci      - **Description**
4462306a36Sopenharmony_ci    * - :cspan:`1` *Depth Control*
4562306a36Sopenharmony_ci    * - __u32 ID
4662306a36Sopenharmony_ci      - 0x80000000
4762306a36Sopenharmony_ci    * - __u32 Size
4862306a36Sopenharmony_ci      - Size in bytes, include ID (all protocol versions: 60)
4962306a36Sopenharmony_ci    * - __u32 Version
5062306a36Sopenharmony_ci      - Version of this structure. The documentation herein covers versions 1,
5162306a36Sopenharmony_ci        2 and 3. The version number will be incremented when new fields are
5262306a36Sopenharmony_ci        added.
5362306a36Sopenharmony_ci    * - __u32 Flags
5462306a36Sopenharmony_ci      - A bitmask of flags: see [2_] below
5562306a36Sopenharmony_ci    * - __u32 Gain
5662306a36Sopenharmony_ci      - Gain value in internal units, same as the V4L2_CID_GAIN control, used to
5762306a36Sopenharmony_ci	capture the frame
5862306a36Sopenharmony_ci    * - __u32 Exposure
5962306a36Sopenharmony_ci      - Exposure time (in microseconds) used to capture the frame
6062306a36Sopenharmony_ci    * - __u32 Laser power
6162306a36Sopenharmony_ci      - Power of the laser LED 0-360, used for depth measurement
6262306a36Sopenharmony_ci    * - __u32 AE mode
6362306a36Sopenharmony_ci      - 0: manual; 1: automatic exposure
6462306a36Sopenharmony_ci    * - __u32 Exposure priority
6562306a36Sopenharmony_ci      - Exposure priority value: 0 - constant frame rate
6662306a36Sopenharmony_ci    * - __u32 AE ROI left
6762306a36Sopenharmony_ci      - Left border of the AE Region of Interest (all ROI values are in pixels
6862306a36Sopenharmony_ci	and lie between 0 and maximum width or height respectively)
6962306a36Sopenharmony_ci    * - __u32 AE ROI right
7062306a36Sopenharmony_ci      - Right border of the AE Region of Interest
7162306a36Sopenharmony_ci    * - __u32 AE ROI top
7262306a36Sopenharmony_ci      - Top border of the AE Region of Interest
7362306a36Sopenharmony_ci    * - __u32 AE ROI bottom
7462306a36Sopenharmony_ci      - Bottom border of the AE Region of Interest
7562306a36Sopenharmony_ci    * - __u32 Preset
7662306a36Sopenharmony_ci      - Preset selector value, default: 0, unless changed by the user
7762306a36Sopenharmony_ci    * - __u8 Emitter mode (v3 only) (__u32 Laser mode for v1) [8_]
7862306a36Sopenharmony_ci      - 0: off, 1: on, same as __u32 Laser mode for v1
7962306a36Sopenharmony_ci    * - __u8 RFU byte (v3 only)
8062306a36Sopenharmony_ci      - Spare byte for future use
8162306a36Sopenharmony_ci    * - __u16 LED Power (v3 only)
8262306a36Sopenharmony_ci      - Led power value 0-360 (F416 SKU)
8362306a36Sopenharmony_ci    * - :cspan:`1` *Capture Timing*
8462306a36Sopenharmony_ci    * - __u32 ID
8562306a36Sopenharmony_ci      - 0x80000001
8662306a36Sopenharmony_ci    * - __u32 Size
8762306a36Sopenharmony_ci      - Size in bytes, include ID (all protocol versions: 40)
8862306a36Sopenharmony_ci    * - __u32 Version
8962306a36Sopenharmony_ci      - Version of this structure. The documentation herein corresponds to
9062306a36Sopenharmony_ci        version xxx. The version number will be incremented when new fields are
9162306a36Sopenharmony_ci        added.
9262306a36Sopenharmony_ci    * - __u32 Flags
9362306a36Sopenharmony_ci      - A bitmask of flags: see [3_] below
9462306a36Sopenharmony_ci    * - __u32 Frame counter
9562306a36Sopenharmony_ci      - Monotonically increasing counter
9662306a36Sopenharmony_ci    * - __u32 Optical time
9762306a36Sopenharmony_ci      - Time in microseconds from the beginning of a frame till its middle
9862306a36Sopenharmony_ci    * - __u32 Readout time
9962306a36Sopenharmony_ci      - Time, used to read out a frame in microseconds
10062306a36Sopenharmony_ci    * - __u32 Exposure time
10162306a36Sopenharmony_ci      - Frame exposure time in microseconds
10262306a36Sopenharmony_ci    * - __u32 Frame interval
10362306a36Sopenharmony_ci      - In microseconds = 1000000 / framerate
10462306a36Sopenharmony_ci    * - __u32 Pipe latency
10562306a36Sopenharmony_ci      - Time in microseconds from start of frame to data in USB buffer
10662306a36Sopenharmony_ci    * - :cspan:`1` *Configuration*
10762306a36Sopenharmony_ci    * - __u32 ID
10862306a36Sopenharmony_ci      - 0x80000002
10962306a36Sopenharmony_ci    * - __u32 Size
11062306a36Sopenharmony_ci      - Size in bytes, include ID (v1:36, v3:40)
11162306a36Sopenharmony_ci    * - __u32 Version
11262306a36Sopenharmony_ci      - Version of this structure. The documentation herein corresponds to
11362306a36Sopenharmony_ci        version xxx. The version number will be incremented when new fields are
11462306a36Sopenharmony_ci        added.
11562306a36Sopenharmony_ci    * - __u32 Flags
11662306a36Sopenharmony_ci      - A bitmask of flags: see [4_] below
11762306a36Sopenharmony_ci    * - __u8 Hardware type
11862306a36Sopenharmony_ci      - Camera hardware version [5_]
11962306a36Sopenharmony_ci    * - __u8 SKU ID
12062306a36Sopenharmony_ci      - Camera hardware configuration [6_]
12162306a36Sopenharmony_ci    * - __u32 Cookie
12262306a36Sopenharmony_ci      - Internal synchronisation
12362306a36Sopenharmony_ci    * - __u16 Format
12462306a36Sopenharmony_ci      - Image format code [7_]
12562306a36Sopenharmony_ci    * - __u16 Width
12662306a36Sopenharmony_ci      - Width in pixels
12762306a36Sopenharmony_ci    * - __u16 Height
12862306a36Sopenharmony_ci      - Height in pixels
12962306a36Sopenharmony_ci    * - __u16 Framerate
13062306a36Sopenharmony_ci      - Requested frame rate per second
13162306a36Sopenharmony_ci    * - __u16 Trigger
13262306a36Sopenharmony_ci      - Byte 0: bit 0: depth and RGB are synchronised, bit 1: external trigger
13362306a36Sopenharmony_ci    * - __u16 Calibration count (v3 only)
13462306a36Sopenharmony_ci      - Calibration counter, see [4_] below
13562306a36Sopenharmony_ci    * - __u8 GPIO input data (v3 only)
13662306a36Sopenharmony_ci      - GPIO readout, see [4_] below (Supported from FW 5.12.7.0)
13762306a36Sopenharmony_ci    * - __u32 Sub-preset info (v3 only)
13862306a36Sopenharmony_ci      - Sub-preset choice information, see [4_] below
13962306a36Sopenharmony_ci    * - __u8 reserved (v3 only)
14062306a36Sopenharmony_ci      - RFU byte.
14162306a36Sopenharmony_ci
14262306a36Sopenharmony_ci.. _1:
14362306a36Sopenharmony_ci
14462306a36Sopenharmony_ci[1] https://docs.microsoft.com/en-us/windows-hardware/drivers/stream/uvc-extensions-1-5
14562306a36Sopenharmony_ci
14662306a36Sopenharmony_ci.. _2:
14762306a36Sopenharmony_ci
14862306a36Sopenharmony_ci[2] Depth Control flags specify which fields are valid: ::
14962306a36Sopenharmony_ci
15062306a36Sopenharmony_ci  0x00000001 Gain
15162306a36Sopenharmony_ci  0x00000002 Exposure
15262306a36Sopenharmony_ci  0x00000004 Laser power
15362306a36Sopenharmony_ci  0x00000008 AE mode
15462306a36Sopenharmony_ci  0x00000010 Exposure priority
15562306a36Sopenharmony_ci  0x00000020 AE ROI
15662306a36Sopenharmony_ci  0x00000040 Preset
15762306a36Sopenharmony_ci  0x00000080 Emitter mode
15862306a36Sopenharmony_ci  0x00000100 LED Power
15962306a36Sopenharmony_ci
16062306a36Sopenharmony_ci.. _3:
16162306a36Sopenharmony_ci
16262306a36Sopenharmony_ci[3] Capture Timing flags specify which fields are valid: ::
16362306a36Sopenharmony_ci
16462306a36Sopenharmony_ci  0x00000001 Frame counter
16562306a36Sopenharmony_ci  0x00000002 Optical time
16662306a36Sopenharmony_ci  0x00000004 Readout time
16762306a36Sopenharmony_ci  0x00000008 Exposure time
16862306a36Sopenharmony_ci  0x00000010 Frame interval
16962306a36Sopenharmony_ci  0x00000020 Pipe latency
17062306a36Sopenharmony_ci
17162306a36Sopenharmony_ci.. _4:
17262306a36Sopenharmony_ci
17362306a36Sopenharmony_ci[4] Configuration flags specify which fields are valid: ::
17462306a36Sopenharmony_ci
17562306a36Sopenharmony_ci  0x00000001 Hardware type
17662306a36Sopenharmony_ci  0x00000002 SKU ID
17762306a36Sopenharmony_ci  0x00000004 Cookie
17862306a36Sopenharmony_ci  0x00000008 Format
17962306a36Sopenharmony_ci  0x00000010 Width
18062306a36Sopenharmony_ci  0x00000020 Height
18162306a36Sopenharmony_ci  0x00000040 Framerate
18262306a36Sopenharmony_ci  0x00000080 Trigger
18362306a36Sopenharmony_ci  0x00000100 Cal count
18462306a36Sopenharmony_ci  0x00000200 GPIO Input Data
18562306a36Sopenharmony_ci  0x00000400 Sub-preset Info
18662306a36Sopenharmony_ci
18762306a36Sopenharmony_ci.. _5:
18862306a36Sopenharmony_ci
18962306a36Sopenharmony_ci[5] Camera model: ::
19062306a36Sopenharmony_ci
19162306a36Sopenharmony_ci  0 DS5
19262306a36Sopenharmony_ci  1 IVCAM2
19362306a36Sopenharmony_ci
19462306a36Sopenharmony_ci.. _6:
19562306a36Sopenharmony_ci
19662306a36Sopenharmony_ci[6] 8-bit camera hardware configuration bitfield: ::
19762306a36Sopenharmony_ci
19862306a36Sopenharmony_ci  [1:0] depthCamera
19962306a36Sopenharmony_ci	00: no depth
20062306a36Sopenharmony_ci	01: standard depth
20162306a36Sopenharmony_ci	10: wide depth
20262306a36Sopenharmony_ci	11: reserved
20362306a36Sopenharmony_ci  [2]   depthIsActive - has a laser projector
20462306a36Sopenharmony_ci  [3]   RGB presence
20562306a36Sopenharmony_ci  [4]   Inertial Measurement Unit (IMU) presence
20662306a36Sopenharmony_ci  [5]   projectorType
20762306a36Sopenharmony_ci	0: HPTG
20862306a36Sopenharmony_ci	1: Princeton
20962306a36Sopenharmony_ci  [6]   0: a projector, 1: an LED
21062306a36Sopenharmony_ci  [7]   reserved
21162306a36Sopenharmony_ci
21262306a36Sopenharmony_ci.. _7:
21362306a36Sopenharmony_ci
21462306a36Sopenharmony_ci[7] Image format codes per video streaming interface:
21562306a36Sopenharmony_ci
21662306a36Sopenharmony_ciDepth: ::
21762306a36Sopenharmony_ci
21862306a36Sopenharmony_ci  1 Z16
21962306a36Sopenharmony_ci  2 Z
22062306a36Sopenharmony_ci
22162306a36Sopenharmony_ciLeft sensor: ::
22262306a36Sopenharmony_ci
22362306a36Sopenharmony_ci  1 Y8
22462306a36Sopenharmony_ci  2 UYVY
22562306a36Sopenharmony_ci  3 R8L8
22662306a36Sopenharmony_ci  4 Calibration
22762306a36Sopenharmony_ci  5 W10
22862306a36Sopenharmony_ci
22962306a36Sopenharmony_ciFish Eye sensor: ::
23062306a36Sopenharmony_ci
23162306a36Sopenharmony_ci  1 RAW8
23262306a36Sopenharmony_ci
23362306a36Sopenharmony_ci.. _8:
23462306a36Sopenharmony_ci
23562306a36Sopenharmony_ci[8] The "Laser mode" has been replaced in version 3 by three different fields.
23662306a36Sopenharmony_ci"Laser" has been renamed to "Emitter" as there are multiple technologies for
23762306a36Sopenharmony_cicamera projectors. As we have another field for "Laser Power" we introduced
23862306a36Sopenharmony_ci"LED Power" for extra emitter.
23962306a36Sopenharmony_ci
24062306a36Sopenharmony_ciThe "Laser mode" __u32 fields has been split into: ::
24162306a36Sopenharmony_ci   1 __u8 Emitter mode
24262306a36Sopenharmony_ci   2 __u8 RFU byte
24362306a36Sopenharmony_ci   3 __u16 LED Power
24462306a36Sopenharmony_ci
24562306a36Sopenharmony_ciThis is a change between versions 1 and 3. All versions 1, 2 and 3 are backward
24662306a36Sopenharmony_cicompatible with the same data format and they are supported. See [2_] for which
24762306a36Sopenharmony_ciattributes are valid.
24862306a36Sopenharmony_ci
24962306a36Sopenharmony_ci.. _9:
25062306a36Sopenharmony_ci
25162306a36Sopenharmony_ci[9] LibRealSense SDK metadata source:
25262306a36Sopenharmony_cihttps://github.com/IntelRealSense/librealsense/blob/master/src/metadata.h
253