GenICam (Generic Interface for Cameras) provides a
generic programming interface for all kinds of cameras, no matter what
hardware interface technology is used or what features are implemented.
The objective of GenICam is to have the same application programming
interface (API) used throughout the industry.
The GenICam standard is composed of several modules:
- GenTL: (Generic Transport Layer) standardizes
the transport layer programming interface. This allows enumerating
cameras, accessing camera registers, streaming data, and delivering
asynchronous events. Since GenTL is a fairly low level interface, end
users usually rely on an SDK instead of directly using GenTL. GenTL’s
main purpose is to ensure drivers and SDKs from different vendors work
- GenApi: (Generic Application Programming Interface)
standardizes the format of the camera self-description file. This file
lists all of the features that are implemented by the camera (standard
and custom) and defines their mapping to the camera’s registers. The
file format is based on XML and thus readable by humans. Typically, this
file is stored in the camera firmware and is retrieved by the SDK when
the camera is first connected to a system.
- SFNC: (Standard Feature Naming Convention)
standardizes the name, type, meaning and use of camera features in the
camera self-description file. This ensures that cameras from different
vendors always use the same names for the same provided functionality.
- GenCP: (Generic Control Protocol)
standardizes packet layout for the control protocol and is used by
interface standards to re-use parts of the control path implementation.
Members of the GenICam standard group maintain a reference
implementation that parses the file containing the self-description of
the camera. The production quality code is written in C++, and can be
used free of charge. It is highly portable and available on a range of
operating systems and compilers. Most available SDK implementations use
this reference implementation as the engine under the hood, thus
ensuring a high degree of interoperability.