VPI - Vision Programming Interface

0.4.4 Release

Release Notes v0.4

This is the public release of VPI v0.4. As this is a developer preview, it's intended to let our users experiment with the library, allow access to PVA and VIC hardware where available and do integration testing in existing systems.

Until VPI-1.0 is released, API and ABI backward compatibility for new versions cannot be 100% guaranteed, although they are not expected to be broken.

As with any developer preview release, use of VPI-0.4 in critical systems isn't recommended.

Changes Since v0.3.7

New Features

Optimization

  • Temporal Noise Reduction version 2:
    • Use of block-linear image support allows for faster execution on VIC backend, from 2x to 4x, depending on the Jetson platform used.

Breaking Changes / API Updates

Several API updates were made to make the library easier to use and more uniform, taking advantage of its developer-preview status. Once version 1.0 is released, any further API updates will necessarily have the old API go through a deprecation phase, to minimize code disruptions.

Despite these updates, the library is still ABI-compatible with the previous vpi-0.3. Application binaries linked to the old version are supposed to work with the new library without relinking.

Non-Breaking Changes

  • Added VIC support to Image Resampling. Because it currently only supports color images, the whole sample was reworked to output color results.
  • Sample applications updates:
    • Display error message using new vpiGetLastStatusMessage function.
    • Use the new simplified pipeline description API.
    • Use the optimized memory wrapping functions.

Bug Fixes

  • Sample applications that use OpenCV on Ubuntu 16.04 will now compile. The exception is Fisheye Distortion Correction that requires OpenCV>=2.4.10, not available by default on Ubuntu 16.04.
  • Dropped the pva option for FFT sample, as FFT isn't implemented on this backend.
  • Added the proper input image format check on Convolution and Separable Convolution.
  • Avoid segfault when invalid parameters are passed to vpiWarpMapGenerateIdentity. The function now returns an error.
  • Avoid warning printed to stderr on Quill: [WARN ] SetCurrentThreadAffinity() failed. Return value: EINVAL
  • Do not print VPI error messages to stderr. If application wants to retrieve the error message, it must use the new functions vpiGetLastStatusMessage or vpiPeekAtLastStatusMessage.
  • The first few frames output by Temporal Noise Reduction sample application on VIC (previously PVA) had a greenish tint. This was fixed.
  • vpiEventRecord can be called multiple times on the same or different stream. New calls won't affect the existing calls to vpiEventSync or vpiStreamWaitFor waiting on the event. They will still unblock when the original recorded stream tasks are finished. This makes VPIEvent have the same semantics of cudaEvent_t.
  • vpiStreamSync waits for synchronization to complete before returning the stream error code (if any). In case of stream errors, the post-condition is that no more tasks are left to be executed by the stream.
  • Fixed some memory cache coherency issues when using a wrapped EGLImage in a CUDA algorithm on Jetson TX2.

Documentation Updates

Known Issues

  • A VPIEvent that recorded a stream whose last task was submitted to the CUDA backend can only record another stream after the event is signaled. An error is returned if this condition isn't met.
  • Convert Image Format on CUDA might introduce a small error of at most 2 when compared with other backends.
  • If there's a backend mismatch between a memory buffer and the streams that operates on it, the stream will issue more memory mapping operations than strictly needed. To mitigate a performance hit that might arise, make sure that the memories used on the stream already reside in the stream's backend. For instance, in a stream for CUDA backend, memories created with VPI_BACKEND_CUDA flag will have better performance because memory mapping isn't needed, since the memory is allocated in the GPU itself.
  • PVA backend implementation of KLT Feature Tracker doesn't match CUDA and CPU's output.
  • PVA backend implementation of vpiSubmitConvolution currently doesn't work with 3264x2448 inputs, it'll return an error instead.
  • Some algorithms, notably Convolution, might segfault on Jetson Nano if input image is too big, such as 4064x2704 on CPU backend.
  • Harris Corner Detector on PVA may return spurious keypoints when input image is larger than 1088x1088.
  • A small memory leak could occur if the same image wrapping a user-provided EGLImage or CUDA memory is used simultaneously as the input image in multiple PVA streams.
  • In some rare instances, a moderately complex processing pipeline might erroneously return VPI_ERROR_BUFFER_LOCKED when performing memory mapping.
  • CPU to CUDA image shared mapping of wrapped non-CUDA-managed CPU memory had to be disabled due to some rare segfaults. In this case, memory mapping is now done via memory copies.
  • vpiStreamWaitFor on a CUDA stream that is wrapping a user-provided cudaStream_t might block the calling thread until the event is signaled.
  • Stereo Disparity Estimator output might slightly differ on CPU backend with respect to PVA and CUDA backends.
  • Harris Corner Detector result scores/positions might differ among backends.
  • Output of Remap from CPU and CUDA backends has a subpixel translation with respect to VIC's output.

Notices

Disclaimer

ALL NVIDIA DESIGN SPECIFICATIONS, REFERENCE BOARDS, FILES, DRAWINGS, DIAGNOSTICS, LISTS, AND OTHER DOCUMENTS (TOGETHER AND SEPARATELY, "MATERIALS") ARE BEING PROVIDED "AS IS." NVIDIA MAKES NO WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO THE MATERIALS, AND EXPRESSLY DISCLAIMS ALL IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE.

Information furnished is believed to be accurate and reliable. However, NVIDIA Corporation assumes no responsibility for the consequences of use of such information or for any infringement of patents or other rights of third parties that may result from its use. No license is granted by implication of otherwise under any patent rights of NVIDIA Corporation. Specifications mentioned in this publication are subject to change without notice. This publication supersedes and replaces all other information previously supplied. NVIDIA Corporation products are not authorized as critical components in life support devices or systems without express written approval of NVIDIA Corporation.

Trademarks

NVIDIA and the NVIDIA logo are trademarks or registered trademarks of NVIDIA Corporation in the U.S. and other countries. Other company and product names may be trademarks of the respective companies with which they are associated.

Copyright

© 2019-2020 NVIDIA Corporation. All rights reserved.