The HAL (Hardware Abstraction Layer) is designed as an API to access camera features in a generic way, i.e. by hiding the hardware specificities of each device. This is achieved using high-level interfaces called facilities, which define the standard high-level behavior of each camera feature.

A given device is operated using the corresponding HAL plugin, which is maintained by the device manufacturer. The plugin is provided in the form of a shared library containing the implementations of the HAL facilities for each hardware feature supported by the device.

The HAL API implements a discovery mechanism to enumerate and select the appropriate plugin for a given device. This dynamic plugin-based design enables any application built using Metavision HAL to be compatible, without any modification (compilation or link), with any camera providing its plugin.


HAL API is a good starting point to start programming event-based sensor. The API gives access to all the features of the sensor and the camera. Though if you want to build a full-featured application in C++ (with display, data conversion etc.), you might consider using the Driver module that offers a user-friendly API to access the camera and the data with the Camera class (Metavision::Camera). Follow the tutorial Get Started using C++ to discover SDK Driver C++ API. And if you want to code in Python, follow the tutorial Python Get started that shows how you can use EventsIterator to stream events.