Skip to content

Changelog#

2.7.1#

Changes from 2.7.0

New Features#

  • Image file I/O — new vl::readImage() / vl::writeImage() in <vl/fileio.h> for reading and writing images from/to disk
  • Documentation — added an installation guide covering the public package registry (C++ tarball, NuGet, pip), a camera-model-to-backend mapping in the compatibility matrix, and documented how CudaManaged memory must be accessed via vl::cudaMemoryAccess()

Improvements#

  • VimbaX 2025-3 — pinned to the VimbaX release that matches the installed avt_csi2 kernel driver; VimbaX is now downloaded automatically by CMake
  • L4T version auto-detectionL4T_VERSION is detected from /etc/nv_tegra_release instead of defaulting to unknown; still overridable via -DL4T_VERSION=...
  • Added JPEG/PNG encoding tests

Bugfixes#

  • JPEG hardware encoder: washed-out colors — the RGB→YUV conversion produced limited-range YUV while the encoder expects full-range (JFIF) YCbCr, so decoders lifted blacks and crushed whites. Now uses full-range BT.601 coefficients, rounds luma, and averages all four pixels of each 2x2 block for 4:2:0 chroma downsampling
  • JPEG hardware encoder not loaded — with L4T_VERSION unset, the libvl_jpeg_hwenc_<version>.so plugin was never found and the build silently fell back to the software encoder
  • JPEG software encoder ignored the quality parameter — the requested quality was dropped and OpenCV's default (95) always used
  • Fix VmbInt64_t build error in the binning features (the type differs between VimbaX releases)
  • Exclude cameras enumerated on the VimbaX camera simulator transport layer, which lacks Alvium features
  • Fix integration of vl via CMake FetchContent

2.7.0#

Changes from 2.6.0

Improvements#

  • Argus: disable Denoise and EdgeEnhance by default — image post-processing in the Argus pipeline is now disabled by default for more predictable output

Bugfixes#

  • Fix VimbaX SDK download in build system
  • Fix Boost dependency

2.6.0#

Changes from 2.5.2

New Features#

  • L4T r36.4 support — added platform support for JetPack 6.1

Bugfixes#

  • Fix: stop acquisition when setting trigger delay — previously, changing the trigger delay while the camera was running could cause issues
  • Fix exception when parsing firmware version to integer

2.5.2#

Changes from 2.5.1

Improvements#

  • Print message if timestamp synchronization is supported
  • Fix custom firmware version handling

2.5.1#

Changes from 2.5.0

Bugfixes#

  • Fix timestamp synchronization — resolved issues with frame timestamp accuracy

2.5.0#

Changes from 2.4.0

Improvements#

  • Improved frame timestamp accuracy — significant improvements to image timestamp precision
  • Reduced logging output

Bugfixes#

  • Fix: hardware encoder not used in release builds

2.4.0#

Changes from 2.3.1

New Features#

  • Rotation mode — added setRotationMode() / rotationMode() for image rotation in 90° increments

Bugfixes#

  • Fix Python bindings
  • Fix plugins not loading in debug builds

2.3.1#

Changes from 2.3.0

Bugfixes#

  • Fix L4T version detection when read from environment variable
  • Fix missing initialization in ImagePlane constructor

2.3.0#

Changes from 2.2.1

New Features#

  • AVT: image flipping — added flipX() / setFlipX() and flipY() / setFlipY() for Alvium cameras
  • AVT: ROI support — added roi() / setRoi() / roiAvailable() for Alvium cameras
  • Dynamic library loading — camera driver plugins are now loaded dynamically at runtime
  • L4T r32.7.6 and r35.6 support

Bugfixes#

  • Fix ROI coordinate mapping (x/y swap)
  • Fix VimbaX system shutdown causing crashes
  • Fix gamma being applied multiple times
  • Stop camera in destructor to prevent resource leaks

2.2.1#

Changes from 2.2.0

Improvements#

  • Argus: added debug output for troubleshooting
  • Separate builds for L4T 32.7.4 and 32.7.5 due to Argus incompatibilities

Bugfixes#

  • Fix Python bindings version detection

2.2.0#

Changes from 2.1.0

New Features#

  • Auto control target brightness — added autoControlTargetBrightness() / setAutoControlTargetBrightness() and autoControlTargetBrightnessLimits() for controlling the auto exposure/gain brightness target

Bugfixes#

  • Fix trigger delay not being reset properly
  • Fix trigger count race condition

2.1.0#

Changes from 2.0.0

Trigger Delay#

/**
    * @brief Query the currently configured trigger delay
    *
    * @return trigger delay in µs
    */
virtual float triggerDelay() const = 0;

/**
    * @brief set a new trigger delay [µs] for hardware trigger
    *
    * @param triggerDelay trigger delay in µs
    */
virtual void setTriggerDelay(float triggerDelay) = 0;

/**
    * @brief Query if trigger delay is available
    *
    * @return true if camera supports trigger delay setting, false otherwise
    */
virtual bool triggerDelayAvailable() const = 0;

/**
    * @brief get the camera's minimum / maximum trigger delay
    *
    * @return trigger delay range [µs]
    */
virtual vl::Range<float> triggerDelayLimits() const = 0;

Save & Load Camera Settings#

It is now possible to save the currently configured camera setting (basically all API parameters) into a json config file. The software will handle the correct order of setting during load.

/**
    * @brief reset camera settings to defaults
    */
virtual void resetToDefaults() = 0;

/**
    * @brief load camera settings from file
    *
    * @param filepath path to the camera settings file
    */
virtual void loadSettings(const std::string &filepath) = 0;

/**
    * @brief write camera settings to file
    *
    * @param filepath path to the camera settings file
    */
virtual void saveSettings(const std::string &filepath) = 0;

Below is an example of the settings file. The exact contents are heavily dependent on the camera model and thus should be generated by save. It is possible to manually edit the file to create a different configuration.

{
    "version": "1",
    "datetime": "2024-11-14 08:52:29",
    "settings": {
        "exposure": "10001.0098",
        "exposureAutoMode": "Off",
        "exposureAutoMin": "12.6459999",
        "exposureAutoMax": "9999994",
        "gain": "0",
        "gainAutoMin": "0",
        "gainAutoMax": "0",
        "triggerMode": "Off",
        "flashOutputMode": "Off",
        "awbMode": "Off",
        "binningMode": "Off",
        "gamma": "1",
        "frameRate": "20.5899982"
    }
}

Other#

Removed libhemistereo dependencies from public interface#

The libhemistereo is another library created by 3dvisionlabs for image processing and 3D algorithms. We removed the remaining relicts from the libvl interface to make it more lightweight and reduce runtime dependencies.

Bugfixes#

Acquisition Frame Rate Set in HW-Trigger Mode#

We found some unexpected behavior in libvl, when the camera was operated in hardware-trigger mode: it was still possible to set a target framerate, which in turn led to issues during runtime. The setting now is locked for hardware-trigger mode as expected.


2.0.0#

Changes from 1.8.0

New Features#

The following new features are introduced with version 2.0.0 of the libvl:

Using managed memory + zero-copy#

Internally, the libvl now uses CUDA managed memory on the Jetson, reducing copy operations (zero-copy) to a minimum and improving the overall performance.

Python bindings for libvl#

Native python bindings are now available through SWIG, see python API

Support for Xavier NX#

The 3dvl C7 smart camera is now available with the more-powerful Jetson Xavier NX. The camera libraries fully support the new devices.

Bugfixes#

The following bugs with older releases have been discovered and fixed with the version 2.0.0:

Update properties dynamically (limits)#

Certain properties, e.g. exposure, do have physical limits to bear in mind during configuration. These limits may be affected by other options of the camera and should be updated in e.g. user-interfaces to avoid surprises. In older versions, the limits were not updated on camera configuration change and thus misguided the user of the API, the bug has been fixed and limits are now up-to-date with the current state of the image sensor.

imx412 timestamp error#

For argus-type cameras (e.g. C7-R12-N4), certain error events were forwarded to the library user, creating misunderstandings. The interface to libargus now has been improved to handle most errors internally.

argus: wrong initial exposure mode#

imx540 gain range reported incorrectly#

argus auto exposure#

argus max gain not set#

image / memory consumption too high#

Known Limitations#

Please be aware of the following known limitations of the current production release:

sporadic errors in libvl (observed with avt cams and set framerate)#


1.8.0#

Changes from 1.7.0

New Features#

Add resize function#

A new resize function (free function) was added for post-processing, see API documentation.

Create bindings for encoding functions (jpeg, png)#

The encoding functions for jpeg and png (image settings) are now available in the dotnet bindings.


1.7.0#

Changes from 1.6.1

New Features#

API: add resetToDefaults() method#

API: add frameRateAvailable() method#

Add support for L4T 36.x#

Bugfixes#

Initialize frame rate to maximum value#


1.6.1#

Changes from 1.6.0

Bugfixes#

Fix crash on open AVT camera modules#

Fix green stripe on right side with odd image widths after jpeg encoding#


1.6.0#

Changes from 1.5.4

New Features#

Added framerate limiter for AVT cameras (max flash speed)#

Bugfixes#

Removed timeout warnings from argus-pipeline in software-trigger mode#


1.5.4#

Changes from 1.5.3

Bugfixes#

Emit pipeline errors if minor errors accumulate#


1.5.3#

Changes from 1.5.2

Bugfixes#

Prevent resending of old images if internal camera pipeline crashes#


1.5.2#

Changes from 1.5.1

Bugfixes#

Fix crash when jpeg encoder is accessed by multiple threads#


1.5.1#

Changes from 1.5.0

New Features#

Performance improvements#


1.5.0#

Changes from 1.4.0

New Features#

API: add tsNotBefore to grabImage functions for getting previous frame#

C#: make ICamera an interface#

Docs: add more descriptions to API#


1.4.0#

Changes from 1.3.1

New Features#

Add gamma control#

See API documentation.


1.3.1#

Changes from 1.3.0

New Features#

Removed public dependencies to third-party libraries#

Bugfixes#

Bindings: fixed datatype int64#


1.3.0#

Changes from 1.2.5

  • Clean API
  • hasBinning() -> binningModesAvailable()
  • add awbModesAvailable()
  • remove awbLock()/setAwbLock()
  • remove access to internal properties
  • Add more AwbModes
  • Add binning support for IMX540
  • Reduce external dependencies
  • Internal refactoring
  • Use unified package for nano and xavier
  • Bugfixes

1.2.5#

1.2.4#

1.2.3#

1.2.2#

1.2.1#

1.2.0#

1.1.1#

1.1.0#

Initial release.