Vimba for Windows architecture
Vimba for Linux architecture
Vimba provides four APIs:
The Python API is perfect for a quick and easy start or for prototyping.
The C API is Vimba's basic and easy-to-use API. It can also be used as API for C++ applications.
The Vimba C++ API has an elaborate class architecture. It is designed as a highly efficient and sophisticated API for advanced object-oriented programming including the STL (standard template library), shared pointers, and interface classes. If you prefer an API with less design patterns, we recommend the Vimba C API.
The .NET API supports all .NET languages, for example, C#, C++/CLI, or Visual Basic .NET. Its general concept is similar to the C++ API.
All APIs cover the following functions:
- Listing currently connected cameras
- Controlling camera features
- Receiving images from the camera
- Notifications about camera connections or disconnections
The Image Transform Library converts camera images into other pixel formats and creates color images from raw images (debayering). While this is separated for the C and C++ API, the .NET API includes these functions. Therefore, a .NET application does not have to access the Image Transform Library.
The APIs use GenICam transport layer (GenTL) libraries to communicate with the cameras.
These libraries (Vimba GigE TL, Vimba USB TL, and Vimba 1394 TL) cannot be accessed directly through Vimba.
This rough overview of Vimba's entities explains their basic principles. The exact functionalities depend on the programming language.
All Vimba APIs use the same basic model for providing access to its entities. For object-oriented programming languages, this model is reflected in the class design, but even the C API supports this model by using handles as a representation of the different entities.
The System entity represents the API itself. Therefore, only one instance of it is available. The application has to initialize the System entity before any other function can be used. When the application has finished using the API, it shuts it down through the System entity. The System entity holds a list of interfaces and cameras internally and serves as the main access point to these entities.
A Camera entity controls a physical camera and receives images from the camera. Its functions are independent of the underlying interface technology.
An Interface entity represents a port on a physical interface card in the PC. Configuring the interface card is the main purpose of the Interface entity. The camera can directly be accessed via the System entity.
Frames contain image meta-data as well as references to the data that were sent by the camera (image and ancillary data). For use in Vimba, they must be created by the application and then be queued at the corresponding camera. When an image was received, the next available frame is filled and handed over to the application through a dedicated notification. After having processed the image data, the application should return the frame to the API by re-enqueuing it at the corresponding camera.
These Vimba entities can be controlled and set up via features:
The System Features contain information about API-wide settings, for example, which transport layer has been loaded.
The Camera Features configure camera settings such as the exposure time or the pixel format.
A transport layer (TL) transports the data from the camera to an application on the PC. Vimba contains
GenICam transport layers (GenTL) for Allied Vision GigE, USB and 1394 cameras.
The Vimba GigE TL optionally uses the Vimba filter driver, which provides a high performance with less
CPU load. The Vimba filter driver is available as 32-bit and 64-bit version. It is compatible with all Allied
Vision GigE cameras.
The Vimba USB TL uses the (mandatory) Vimba USB device driver, which is available as 32-bit and 64-bit
version. It is compatible with all Allied Vision USB cameras.
The Vimba 1394 TL uses the (mandatory) high-performance intek driver (available as 32-bit and 64-bit
version), which replaces the low-performance Microsoft driver.
The Vimba Camera Link Config TL provides a Clallserial.dll, which connects with the Clserxxx.dll of
GenICam-compliant frame grabbers.
Since Vimba's transport layers support GenICam, Allied Vision GigE, USB, 1394 and Camera Link cameras
can easily be used with a GenICam-compliant third-party software.
Vimba provides additional functionality that is not directly covered by API functions with GenICam
Features. These Features can only be accessed via certain entities within Vimba. According to the API
Entity Model described in chapter API Entities Overview, the entities providing Feature access are:
- The Vimba System, which includes functionality for managing interfaces and cameras.
- The Interface, which allows configuration of hardware interfaces (e.g. a GigE port).
- The Camera, which allows access to all features provided by camera device, data transport
- features, and some driver features.
- The AncillaryData for each Frame.
The Vimba SDK includes Features Reference documentation.
If you have installed Vimba, the included Vimba Quickstart Guide will help you acquire the first images and find the documentation and programming examples for your programming language and camera interface.