3D visionExplainer

Depth camera GenTL producer setup: how the data path works

How a depth camera presents itself through a GenTL producer: two devices per camera, 16-bit depth decoding, GENICAM_GENTL64_PATH discovery and fixes.

LumaSpec Vision9 min read Share on LinkedIn

On this page 9 sections
  1. 01What a GenTL producer does for a depth camera
  2. 02Why one depth camera appears as two devices
  3. 03Reading the 16-bit depth image
  4. 04Discovery: GENICAM_GENTL64_PATH
  5. 05License and security software: the two silent blockers
  6. 06Choosing the camera and the controller
  7. 07When the producer is the wrong tool
  8. 08Pre-flight checklist
  9. 09Questions

A depth camera that your GenICam software cannot enumerate natively is not a dead end. If its vendor ships a GenTL producer, the camera joins the same device list as your GigE and USB3 cameras, and your existing acquisition code opens it unchanged. What surprises integrators is what shows up next: two devices for one physical camera, 16-bit pixels full of zeros, and distances that need one multiply to become millimetres. This page walks the data path end to end — the two-device enumeration, the depth decode, the discovery variables, the license — so you can commit to the approach before ordering hardware.

What a GenTL producer does for a depth camera

GenTL is the transport-layer part of the GenICam standard. It defines a library interface — the producer, delivered as a CTI file — that a GenICam consumer loads in order to enumerate devices and move buffers. A camera with no GigE Vision or USB3 Vision stack of its own can be wrapped in one, and then it appears in your consumer beside every other GenICam device.

The practical win is a single acquisition path: your code already knows how to open a device, walk its parameter tree and pull buffers, and a depth camera behind a producer plugs into exactly that code. No second SDK gets embedded. The producer adds nothing on top — it exposes the depth module's own parameters, including the depth-unit setting that turns pixels into distances.

Stations like this start from the shop's 3D sensors; the depth families below are the ones a producer-style integration usually wraps.

Why one depth camera appears as two devices

Depth cameras that also carry an RGB sensor commonly show up as two GenICam devices under the GenICamTL interface list: a depth module and a color module. Each opens its own stream with its own format and its own intrinsic calibration, so the device dialog lists the same physical camera twice. That is the design, not a fault.

Open the depth entry when you need the range image; open the color entry only for a texture overlay. If color arrives but depth never does, you have almost certainly opened the color device — the stereo camera RGB-works-but-no-depth diagnosis walks that failure step by step. Overlaying the two streams correctly is its own alignment task; aligned depth streams: data layout and which intrinsics apply covers the buffer layout and the intrinsics question.

Reading the 16-bit depth image

The depth module delivers, by default, a 16-bit unsigned image with a two-line contract:

  • 0 — no measurement. The pixel has no valid range: it sits outside the rated distance window, returned too little signal, or is occluded.
  • 1 to 65535 — calibrated depth, scaled by the device's depth-unit parameter.

Decoding is one multiply:

distance = raw × depth unit

Worked example, with illustrative inputs. Say the device reports a depth unit of 1 mm — the value you meet most often on indoor depth modules; the real number always comes from the parameter. A pixel reading 3,214 then decodes as 3,214 × 1 mm = 3,214 mm ≈ 3.21 m. Set the unit to 0.25 mm instead, and the same pixel reads 3,214 × 0.25 mm = 803.5 mm. The depth unit and precision settings on 3D cameras article follows the same parameter through its consequences.

The same arithmetic yields two sanity checks. The representable span is 65535 × 1 mm = 65,535 mm ≈ 65.5 m, far beyond any indoor depth camera's rated metres, so 16 bits never cap the range — the optics do. And the zeros describe the scene, not the encoding: take an illustrative 640 × 480 frame, 307,200 pixels, of which 12,400 read zero. The invalid share is 12,400 ÷ 307,200 ≈ 4.0%. A few percent on a static bench scene is healthy; double digits at the rated working distance points at exposure or ambient light first, hardware second.

Many pipelines cut the scene to a z-window before any of this, processing a slab of range instead of the full span — the depth camera ROI and z-layer scan configuration page walks that set-up.

Discovery: GENICAM_GENTL64_PATH

Consumers find producers through environment variables, not through a registry sweep: a 64-bit application reads GENICAM_GENTL64_PATH, a 32-bit application reads GENICAM_GENTL32_PATH. Each variable lists directories; the consumer loads every producer library it finds there and enumerates the devices behind them. The producer's installer normally creates or extends the variable, so a fresh install usually just works.

When the depth camera never appears, walk down this list. Confirm the variable exists and names the directory that holds the producer library. Confirm the bitness matches — a 64-bit consumer ignores the 32-bit variable and vice versa. Point the consumer at the directory by hand; most acquisition dialogs have a browse control for exactly this. On Linux, path escaping is the classic trap, as GenTL CTI file path errors in Python shows. A producer that enumerates in one tool but not another is a Windows DLL search path problem, not a camera fault. In containers the variables do not pass through by default; the container discovery diagnosis lists what to forward.

License and security software: the two silent blockers

A GenTL producer is licensed software from its vendor. Many stamp a watermark into every frame or refuse to open the device until the license is in place, so arrange the license through the vendor's normal channel before any image-quality work — tuning against a watermarked frame wastes the trial.

Second, consumer security software sometimes quarantines a producer library it does not recognise, and then neither the producer nor its devices appear anywhere. Restore the library from the vendor's installer and add the exclusion for your own application the way your IT policy permits. If devices vanish after a security-software update, check the quarantine before you re-install anything.

Choosing the camera and the controller

On the camera side, the depth technology follows the task: speckle structured light for logistics and volume work, projected structured light for closer surface work, and time of flight where the target moves. These are the depth-camera families in the shop's 3D range:

3D sensorsHikrobot MV-DPS200P-02 Projected structured-light 3D cameraMV-DPS200P-02
Type
Stereo / structured light
$8,829.00 · quotedView and quote
3D sensorsHikrobot MV-DT01WMU ToF sensing cameraMV-DT01WMU
Type
Depth / ToF camera
Price on requestView and quote

On the host side, size the vision controllers to the streams. A producer moves the same buffers as any GenICam device, so port count and memory decide, not anything exotic. For a multi-camera station, the MV-VC5525-256G70-NN carries 32 GB of memory, PoE camera ports and 8 built-in light channels. A single-camera depth station runs on the MV-VC3301H-128G66, which pairs 8 GB of memory with 4 built-in light channels and 5+ LAN ports.

Specification MV-VC5525-256G70-NN MV-VC3301H-128G66
CPU Intel® Core i5-12400 Intel® Core i3-8100
Memory 32 GB 8 GB
Storage 256 GB SSD 128G SSD
GPU Intel® UHD Graphics 730 Intel® HD Graphics 630
Operating system Unactivated Windows 10 Windows 10 64-bit, Not activated
Video output HDMI interface × 1, VGA interface × 1; Supports independent display output at the same time; Max. resolution 1920 × 1080 @ 60 Hz HDMI interface × 1, VGA interface × 1; Supports independent display output at the same time; Max. resolution 1920 × 1080 @ 60 Hz
Digital I/O Opto-isolated input × 8; Opto-isolated output × 12 ( supports NPN/PNP switching), digital-isolated low-side driver output × 8; Non-isolated bi-directional differential I/O × 4 8 digital isolated inputs supported; 16 opto-isolated outputs supported (NPN/PNP switchable)
Network interface GigE interface × 7, including interface for PoE × 4 6× Gigabit Ethernet ports
USB Interface USB 2.0 × 4, USB 3.0 × 4, built-in USB 2.0 × 1 USB 2.0 × 4; USB 3.0 × 4; Built-in USB 2.0 × 1
Serial Port RS-232 × 2 by default, supports switching to RS-485 and RS-422 2× full-function RS-232, RS-485/RS-422 switchable
Light interface 24 VDC constant voltage × 8; (Max. power consumption of single channel is 72 W, total max. power consumption 190 W) 4-channel 24 V constant-voltage light drive, Max. power per channel: 72 W, Max. power (4 channels): 150 W
Extended interface SATA 3.0 interface × 2, M.2 NVME interface × 1; PCIe × 16 extended interface × 1, PCIe × 8 extended interface × 1, PCIe × 4 extended interface × 2; (When the PCIe × 8 extended interface is used, the PCIe × 16 will only provide half of the bandwidth.) 1× PCIe 3.0 x16 slot
Price $4,479.00 · quoted $2,419.00

All 2 share: Humidity 20% RH to 95% RH (no condensation); Certification CE, KC. Values as printed in each product's data sheet; open a part for its drawing and full specifications.

The camera finder filters the 3D range by technology, and the system configurator assembles both sides in one pass. When the depth data feeds a robot, resolving camera coordinates is the next subject — depth for robot coordinate resolution explains why depth is what makes the camera frame usable, and 3D camera robot integration checks lists the compatibility items to clear before you order.

When the producer is the wrong tool

Skip the producer when the camera already speaks a vision standard natively: a GigE Vision or USB3 Vision depth device opens directly, with less software between you and the socket. Extra hops in the path cost real time even on a direct connection — the depth camera latency caused by a wrong network path is the cautionary example. Profile work is a different data shape altogether: a laser profiler streams height profiles, not range images, and its toolchain assumes them; 3D scanning method selection for inspection sorts the technologies by task. And when the vendor SDK computes on-camera outputs your pipeline leans on — fused point clouds, presets, aligned exports — weigh honestly: GenTL buys a common acquisition path, not extra features.

Pre-flight checklist

Run this before you commit the station:

  • License first. Arrange the producer license through its vendor before image-quality trials; a watermarked frame is not the camera's real output.
  • Right variable, right bitness. GENICAM_GENTL64_PATH for 64-bit consumers, GENICAM_GENTL32_PATH for 32-bit, each naming the producer's directory.
  • Open the depth device. Two entries per camera is normal; the depth module is the one streaming the 16-bit range image.
  • Decode with the parameter. distance = raw × depth unit, read at startup — never a hard-coded scale.
  • Measure the invalid share. zeros ÷ total pixels on a static bench scene: a few percent is healthy, double digits at rated distance means light and exposure before hardware.
  • Watch the quarantine. If devices vanish after a security-software update, restore the producer from its installer before re-installing anything.

More depth-integration reading sits on the 3D topic page, and the contact page is the fast route when you want a controller spec'd around a specific consumer.

Questions

Why do two cameras appear when I connect one depth camera?

Depth cameras that include an RGB sensor commonly expose two GenICam devices: a depth module and a color module, each with its own stream and its own intrinsic calibration. Open the depth entry for the 16-bit range image and the color entry only for a texture overlay. Aligning the two streams afterwards is a separate task with its own intrinsics.

What does pixel value 0 mean in a 16-bit depth image?

Zero is the no-measurement code, not a distance: the pixel sat outside the rated depth window, returned too little light, or was occluded by a foreground object. Every other value, 1 to 65535, is a real calibrated distance. Treat a rising zero count over time as an early warning — it usually tracks dirty optics, changed ambient light, or a part drifting out of the rated window.

How do I convert raw depth values to millimetres?

Multiply by the device's depth-unit parameter: distance = raw × depth unit. At 0.5 mm per unit, a pixel reading 2,400 is 2,400 × 0.5 mm = 1,200 mm = 1.20 m. Read the parameter from the device at startup rather than hard-coding it, because a preset or firmware change moves the scale — and every calibration built on it.

My GenTL consumer does not list the depth camera — what do I check first?

Check the discovery variable: 64-bit consumers read GENICAM_GENTL64_PATH, 32-bit consumers read GENICAM_GENTL32_PATH, and the variable must name the directory holding the producer library. Then confirm the license is in place, since an unlicensed producer may not enumerate cleanly, and check whether security software quarantined the library. Most consumers also let you browse to the directory manually.

Does a GenTL producer replace the camera vendor's SDK?

No. The producer gives your GenICam software a standard way to enumerate and stream the device; the SDK keeps the vendor's own tools, presets, fused point-cloud outputs and update path. In practice both stay installed, as the vendor documents. Choose the producer when one acquisition code path across GigE, USB3 and depth cameras is worth more than the SDK's extra outputs.