VPI - Vision Programming Interface

1.0 Release

Release Notes v1.0

This is the public release of VPI v1.0. Being the first production release, it is considered suited for production environments. It is guaranteed that future 1.x releases are ABI and API backward compatible.

VPI-1.0 isn't API nor ABI compabible with previous developer preview releases. Small changes to existing code must be made to render it compatible with VPI-1.0 API.

Changes Since v0.4.4

New Features

API Updates

Here's a non-exhaustive list of updates to the public API:

  • Additional channel swizzle manipulation functions
  • Several updates to how VPI handles color spaces and image formats
    • The old VPIColorSpace is renamed to VPIColorSpec.
    • The new VPIColorSpace now represents the chromaticities and white point of a VPIColorSpec.
    • Changes allows for new image formats in the future without breaking the API.
  • Added vpiImageFormatGetName to return a string representation of the given VPIImageFormat.
  • vpiEventQuery returns the event state (signaled or not) via an output parameter. The VPIStatus returned now only indicates success/failure status.
  • VPIArrayData::size renamed to VPIArrayData::sizePointer, which now points to a buffer that stores the array size.
  • All public parameters and structure members that represent an integer numerical value are represented by an signed integer type. Unsigned integer types are used solely to represent bit fields, e.g. flags.
  • Rename vpiEventElapsedTime to vpiEventElapsedTimeMillis, with the returned elapsed time unit (milliseconds).
  • VPI_IMAGE_FORMAT_NV12 (and its block-linear counterpart) previously was implicitly extended-range. Now it is limited-range. This format must be replaced with VPI_IMAGE_FORMAT_NV12_ER in existing code. Some algorithms that don't support limited-range formats might fail if this isn't done.

Bug Fixes

  • Convert Image Format on VIC backend now does proper chroma down/upsampling, without some obvious artifacts.
  • Fix some rare memory coherency issues on Jetson TX2.

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.
  • Harris Corner Detector on PVA may return spurious keypoints when input image is larger than 1088x1088.
  • 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.
  • 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.
  • Temporal Noise Reduction and Perspective Warp samples' output image extension must be .vpi on Ubuntu 16.04. Using .mp4 might lead to failures.

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-2021 NVIDIA Corporation. All rights reserved.