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 seamlessly together.
- 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.