Skip to content

Releases: NVIDIA/nvImageCodec

nvImageCodec Release v0.7.0-beta.8

09 Jan 09:52

Choose a tag to compare

v0.7.0-beta.8

This software is in beta version, which means it is still undergoing testing and development before its official release. It may contain bugs, errors, or incomplete features that could affect its performance and functionality. By using this software, you agree to accept the risks and limitations associated with beta software. We appreciate your feedback and suggestions to help us improve this software, but we do not guarantee that we will implement them or that the software will meet your expectations. Please use this software at your own discretion and responsibility.

Key Features and Enhancements

  • CPU backend can now decode int32 and uint32 TIFF images.
  • Added bitstream size to codestream info.
  • Added ICC profile extraction from TIFF images.
  • Added support for tiling in nvJPEG2000 encoding.
  • Python encoding now returns CodeStream object with buffer protocol.
  • Added possibility to create CodeStream for encoding and pre-allocate memory for it (also pinned).
  • Added support for encoding to CodeStream object (reuse allocated memory). Breaking change: The order of parameters in Python encode method has changed.
  • Added support for decoding to Image object (reuse allocated memory). Breaking change: The order of parameters in Python decode method has changed.
  • Added support for decoding to externally managed buffer (from CuPy, NumPy).
  • Added out of bounds region decoding for nvJPEG2000, nvTIFF, and nvJPEG plugins. Different fill values for each plane are supported, but channels in the same plane must have the same fill value.
  • Added support for metadata extraction from following tiff files (nvTIFF only):
    • Medical - Ventana
    • Medical - Leica
    • Medical - Trestle
  • Added support for generic TIFF tag reading.
  • Changed default python logging verbosity to WARNING.
  • Performance: Avoid reparsing the encoded stream after extracting a sub code stream out of it.
  • Added SampleFormat enum to Python API.
  • Added sample_format property to Image class.
  • Added sample_format property to CodeStream class.
  • Breaking change: Extended nvimgcodecSampleFormat_t enum with more commonly used formats and enum values have been changed.
  • Changed parsed sample format for png and webp codecs, from planar to interleaved.
  • Breaking change: nvimgcodecCodeStreamGetImageInfo now returns internal bitstream nvimgcodecSampleFormat_t and not default to be decoded. For example for JPEG codec it can be now usually NVIMGCODEC_SAMPLEFORMAT_P_YCC instead of NVIMGCODEC_SAMPLEFORMAT_P_RGB as previously.
  • Breaking change: nvimgcodecImageCreate, nvimgcodecCodeStreamCreateFromFile, nvimgcodecCodeStreamCreateFromHostMem, nvimgcodecCodeStreamCreateToFile, nvimgcodecCodeStreamCreateToHostMem, nvimgcodecCodeStreamGetSubCodeStream now interpret non-null output pointers as pointers to existing objects, in which case the objects are reused instead of created from scratch. Note that is is now not allowed to pass uninitialized output pointers to these functions.
  • Added python nvImageCodec-torch interoperability example.
  • User can now exclusively specify either CUDA or hardware backend for JPEG encoder extension. Both backends can also be used at the same time.
  • Added color_spec property to Python Image class, providing access to color specification information.
  • Added color_spec property to Python CodeStream class, providing access to color specification information.
  • Changed Python ColorSpec.RGB to ColorSpec.SRGB.
  • Changed Python ColorSpec.YCC to ColorSpec.SYCC.
  • Added mct_mode parameter to nvimgcodecJpeg2kEncodeParams_t and Jpeg2kEncodeParams class in Python API to allow to control multiple component transformation mode in nvJPEG2000 encoding.
  • Breaking change: Changed channels property to num_channels in Python CodeStream class as it represents overall number of channels in the image across all planes.
  • Added support for decoding JPEG images directly to SYCC color space in interleaved format, skipping conversion to RGB. This enables decoding to YCC in Python. Only images encoded into SYCC and without subsampling can be decoded in such a way.
  • Breaking change: Renamed Python API methods to follow snake_case naming convention: getSubCodeStreamget_sub_code_stream, getMetadataget_metadata.
  • Added optional sample_format and color_spec keyword-only parameters to Python as_image and as_images functions, allowing users to override automatic format inference.
  • Breaking change: Changed default parsed chroma_subsampling for png, webp, pnm and tiff codecs to be CSS_GRAY for grayscale images with single channel.
  • Optimized memory allocation when decoding and encoding strided images.
  • Breaking change: buffer_size member was removed from nvimgcodecImageInfo_t.
  • Updated CUDA Toolkit to v12.9.1
  • Updated CUDA Toolkit to v13.0.2
  • Updated libTiff to v4.7.1
  • Upgraded OpenCV to v4.12.0
  • Updated nvJPEG2000 to v0.9.1
  • Upgraded nvTIFF to v0.6.0
  • Added support for Python 3.14
  • Added example notebook about decoding/encoding DICOM files

Fixed Issues

  • Fixed wrong decoding of FP32 TIFF images when using CPU backend.
  • Fixed segfault when passing wrong codec name for encode.
  • Fixed batch decoding of lossless JPEGs.
  • Fixed encoding to PNG based on file extension.
  • Fixed sample format conversion from __array_interface__and __cuda_array_interface__ to Image object for single channel images.
  • Fixed nvJpeg2000 encoding of image which was decoded with color_spec set to ColorSpec.UNCHANGED.
  • Fixed encode array with alpha channel (#36).
  • Added metadata-related and other missing types to documentation.
  • get_sub_code_stream will now keep alive parent CodeStream so that any data (like bytes) referenced by parent will be kept alive.
  • Fixed default nvJPEG library search path on Windows for CUDA 13, ensuring correct dynamic loading in the Python package.
  • Fixed default chroma_subsampling in EncodeParams to be CSS_GRAY for grayscale images with single channel.
  • Fixed decoding to strided (when image rows have padding) buffer.

Deprecated and removed features

  • Removed BackendParams class from Python API. Breaking change: Backend constructor now accepts BackendKind together with optionally load_hint and load_hint_policy parameters.
  • Removed backend_kinds parameter from Decoder and Encoder constructors. Breaking change: Backend constructor now accepts BackendKind which can be automatically converted to Backend.
  • Breaking change: Backend properties backend_kind, load_hint and load_hint_policy are now read-only and can be only set in constructor.
  • Decoding grayscale image to planar YCC is no longer supported, as values for Cb and Cr were wrong (0 instead of 128). Use P_Y sample format instead.
  • Python 3.8 is no longer supported.
  • CUDA 11 is no longer supported.

nvImageCodec Release v0.6.0-beta.6

12 Aug 16:27

Choose a tag to compare

v0.6.0-beta.6

This software is in beta version, which means it is still undergoing testing and development before its official release. It may contain bugs, errors, or incomplete features that could affect its performance and functionality. By using this software, you agree to accept the risks and limitations associated with beta software. We appreciate your feedback and suggestions to help us improve this software, but we do not guarantee that we will implement them or that the software will meet your expectations. Please use this software at your own discretion and responsibility.

Key Features and Enhancements

  • Removed NVIMGCODEC_EXT_API_VER. From now on, extensions versioning is base on NVIMGCODEC_VER instead
  • Added support for nvJpeg2000 v0.9.0:
    • Enabled HT jpeg2000 encoding
    • Enabled int16 encoding
    • Enabled new quality types: Q-Factor (can be used via NVIMGCODEC_QUALITY_TYPE_QUALITY) and Quantization step
  • Added support for nvTiff v0.5.1:
    • Enabled CUDA tiff encoder
  • Added support for CUDA 13.0
  • Added support for CUDA 12.9
  • Upgraded OpenJpeg to v2.5.3
  • Added support for multi-image decoding.
  • Added nvimgcodecCodeStreamInfo_t and nvimgcodecCodeStreamView_t types to C API.
  • Moved region field from nvimgcodecImageInfo_t to nvimgcodecCodeStreamView_t.
  • Removed DecodeSource from Python API. Use CodeStream.getSubCodeStream instead.
  • Changed quality steering mechanism and added new quality types:
    • use quality_type and quality_value to specify quality
    • quality and target_psnr were removed
  • Allow encoding images with padded rows in Python.
  • Added support for BigTiff decoding
  • Added support for metadata extraction from tiff files (Currently only nvTiff is supported)
    • GeoTiff metadata extraction
    • Medical - Philips metadata extraction
    • Medical - Aperio metadata extraction

Fixed Issues

  • Fixed race condition on CPU decoders with GPU memory outputs
  • Use ZLIB_FOUND, JPEG_FOUND CMake variables to determine if ZLIB and JPEG are available
  • Fixed Python encode and write freeze when no valid images were passed
  • Fixed Python decode and read abort when passing only None
  • Fixed Python decode and read segfault when passing None as element of a batch

Deprecated features

  • Support for CUDA 11 will end in the next release.
  • Support for Python 3.8 will end in the next release
  • Support for Maxwell, Volta, Pascal GPUs will end in the upcoming releases.

nvImageCodec Release v0.5.0-beta.5

20 Mar 13:50

Choose a tag to compare

Pre-release

This software is in beta version, which means it is still undergoing testing and development before its official release. It may contain bugs, errors, or incomplete features that could affect its performance and functionality. By using this software, you agree to accept the risks and limitations associated with beta software. We appreciate your feedback and suggestions to help us improve this software, but we do not guarantee that we will implement them or that the software will meet your expectations. Please use this software at your own discretion and responsibility.

Key Features and Enhancements

  • Enhanced Python API documentation
  • Add free-threaded Python (3.13t) tests
  • Python decode and encode functions return None in output list on positions which could not be decoded or encoded
  • Processing pipeline performance optimizations
  • Upgraded to latest manylinux
  • Added support for CUDA Toolkit 12.8
  • Upgraded nvTiff to v0.5.0

Fixed Issues

  • Assigning decoders/encoders to samples to be deterministic
  • Changed default value for num_resolutions in Jpeg2kEncodeParams to 6, to align with existing JPEG 2000 libraries
  • Fixed conversion from num_decomps to num_resolutions in examples
  • Fixed Python API to report error when provided array is not C-style contiguous instead of outputting corrupted image when encoding
  • Fixed OpenCV encoder extension ignoring chroma subsampling setting
  • Fixed standalone example build
  • Fixed missing CMake target when building python module separately from shared libraries
  • Fixed some exceptions not being handled in encoder and decoder

nvImageCodec Release v0.4.1-beta.4

30 Dec 17:59

Choose a tag to compare

Pre-release

This software is in beta version, which means it is still undergoing testing and development before its official release. It may contain bugs, errors, or incomplete features that could affect its performance and functionality. By using this software, you agree to accept the risks and limitations associated with beta software. We appreciate your feedback and suggestions to help us improve this software, but we do not guarantee that we will implement them or that the software will meet your expectations. Please use this software at your own discretion and responsibility.

Fixed Issues

  • Added a check on the API, to verify that the user provided structs have the expected struct_type and struct_size fields. This provides a meaningful error message when using non-compatible library versions (that is, different than the one the application was compiled for).
  • Added nvtiff and nvcomp Python installed directories to the rpath of nvImageCodec libraries, so that they can be found by default
  • Fixed event synchronization between iterations in nvtiff decoder
  • Fixed CPU-only mode so that no CUDA calls are attempted

nvImageCodec Release v0.4.0-beta.3

15 Nov 08:43

Choose a tag to compare

Pre-release

This software is in beta version, which means it is still undergoing testing and development before its official release. It may contain bugs, errors, or incomplete features that could affect its performance and functionality. By using this software, you agree to accept the risks and limitations associated with beta software. We appreciate your feedback and suggestions to help us improve this software, but we do not guarantee that we will implement them or that the software will meet your expectations. Please use this software at your own discretion and responsibility.

Key Features and Enhancements

  • Enabled decoding grayscale tiff images to planar RGB and BGR with LibTIFF.
  • Added nvTIFF decoder extension.
  • Changed the nvimgcodecExecutorDesc_t API to have separate schedule, run and wait functions.
  • Simplified the API for extensions (decoder and encoder) so that the parallelization and synchronization happens in a layer above
  • Added an optional API getMiniBatchSize for batched decoders, to be used by the top level layer to decide the best batch size for each batched decoder implementation.
  • Added an experimental load_hint_policy flag to nvimgcodecBackendParams_t, allowing to control the dynamic load distribution for different backends.
  • Reduced the number of threads and synchronization points used by the generic decoder and encoder classes.
  • Decoders to reuse temporary memory buffers from iteration to iteration.
  • Renamed nvimgcodecJpeg2kImageInfo_t to nvimgcodecTileGeometryInfo_t.
  • Added experimental Python 3.13 support.
  • Added experimental Python 3.13t (no GIL) support.
  • Upgraded LibTIFF to v4.7.0.
  • Added a skip_pre_sync option to nvimgcodecExecutionParams_t to skip the synchronization between user stream and per-thread streams before the decoding starts.
  • Added OpenCV encoder for all formats that were already supported by OpenCV decoder:
    • 8 bit unsigned encoding is supported in following codecs: JPEG, JPEG 2000, PNG, BMP, PNM, TIFF, WebP.
    • 16 bit unsigned encoding is supported in following codecs: JPEG 2000, PNG, PNM, TIFF.
  • In Python, CPU-only decoder instances now write the output to host memory instead of GPU memory.

Fixed Issues

  • Fixed LaunchConvertNormKernel conversion from interleaved RGB to grayscale.
  • Bitdepth is now correctly set to 16 bits in case of TIFF Palette, before it was set to key bitdepth.
  • Fixed error during decoding images with larger sample type with LibTIFF.
  • Fixed a memory leak in Encoder's Python API (#13)
  • Fixed potential segfault error when extension creation failed.
  • Fixed default extension discovery path on Windows.
  • Fixed Python array import to raise error when there are unacceptable number of dimensions or channels (#15).
  • Fixed loading symlinked extensions.
  • PNM parser now correctly recognizes 16 bit unsigned data.

nvImageCodec Release v0.3.0-beta.2

09 Aug 08:22

Choose a tag to compare

Pre-release

This software is in beta version, which means it is still undergoing testing and development before its official release. It may contain bugs, errors, or incomplete features that could affect its performance and functionality. By using this software, you agree to accept the risks and limitations associated with beta software. We appreciate your feedback and suggestions to help us improve this software, but we do not guarantee that we will implement them or that the software will meet your expectations. Please use this software at your own discretion and responsibility.

Key Features and Enhancements

  • Added support for ROI in Python API #4
  • Enable runtime dynamic loading of nvJpeg2000 library
  • Added support for nvJpeg2000 v0.8.0
  • Added GDPR required links to documentation
  • Limit Global Interpreter Lock (GIL) scope on pybind11 exposed functions
  • Support Windows platform
  • Support Linux for Tegra platform
  • Support platforms without stream ordered allocations
  • Added NVIMGCODEC_MAX_JPEG_SCANS environment variable to control the maximum allowed number of progressive JPEG scans
  • Added NVIMGCODEC_MAX_IMAGE_SIZE environment variable to control the maximum allowed image size
  • Switch to new NVIDIA documentation theme
  • Parsers to always provide precision (bitdepth) information

Fixed Issues

  • Fix validation of the whl fails #2
  • Fix incorrect decoding of 16-bit TIFF images #5
  • Fix encoding single channel images #6
  • Fix pip installation for Python higher than 3.12 #9
  • Fix build from source for nvjpeg2k v0.8 #7
  • Fix single-channel encoding issue #6
  • Fix for passing cuda stream to __dlpack__ function as a keyword only argument
  • Fix missing synchronization with user cuda stream before decoding
  • Fix shape returns wrong value for host Images
  • Patch libtiff for CVE-2023-52356
  • Patch libtiff for CVE-2023-6277
  • Patch libtiff for CVE-2023-6228

nvImageCodec Release v0.2.0

03 Feb 17:57

Choose a tag to compare

Pre-release

nvImageCodec v0.2.0 Release Notes

nvImageCodec Beta release (v0.2.0), an open-source library of accelerated codecs featuring a unified interface.
This release serves as a versatile framework for extension modules delivering powerful codec plugins.

Key Features and Enhancements

This nvImageCodec release includes the following key features and enhancements:

  • Changed the name of the library from nvImageCodecs to nvImageCodec
  • Added CUDA 12.3 support
  • Added support for arm64-sbsa
  • Improved decode performance (e.g. nvJpeg2000 tiled)
  • Improved testing
  • Improved documentation
    • Added simple sample C API usage
    • Added Python sample Jupyter notebooks to documentation
  • C API improvements
    • Adjusted cvcuda types adapter
    • Improved error handling and reporting
    • Custom Executor can now be defined per Decoder/Encoder
    • Added possibility to pre-allocate resources
    • Added support for nvjpeg extra_flags option
  • Python API improvements
    • Added support for Python 3.12 and deprecated Python 3.7
    • Added support for DL-pack
    • Added support of array_interface
    • Added cpu() and cuda() convert methods to Python Image to enable transfers between Host and Device memory
    • Added as_images function
    • Added allow_any_depth to decode parameters
    • Added possibility to specify number of CPU threads to use in decoder/encoder
    • Added precision attribute to Image
    • Added enter and exit to Decoder and Encoder so they can be easily used with python “with” statement
    • Python decode function now can convert to interleaved RGB and 8 bits by default

Install nvImageCodec library

NOTE: nvImageCodec builds for CUDA 12 dynamically link the CUDA toolkit. To use nvImageCodec, install the latest CUDA toolkit.

CUDA 11.0 and CUDA 12.0 builds use CUDA toolkit enhanced compatibility. 
They are built with the latest CUDA 11.x/12.x toolkit respectively but they can run on the latest, 
stable CUDA 11.0/CUDA 12.0 capable drivers (450.80 or later and 525.60 or later respectively).
However, using the most recent driver may enable additional functionality. 
More details can be found in enhanced CUDA compatibility guide.

You can download and install the appropriate built binary packages from https://developer.nvidia.com/nvimgcodec-downloads
or
install nvImageCodec Python from PyPI as described below.

nvImageCodec Python for CUDA 12.x

pip install nvidia-nvimgcodec-cu12

nvImageCodec Python for CUDA 11.x

pip install nvidia-nvimgcodec-cu11

Optional installation of nvJPEG library
If you do not have CUDA Toolkit installed, or you would like to install nvJPEG library independently, you can use the instruction described below.

Install the nvidia-pyindex module

pip install nvidia-pyindex

Install nvJPEG for CUDA 12.x

pip install nvidia-nvjpeg-cu12

Install nvJPEG for CUDA 11.x

pip install nvidia-nvjpeg-cu11

License

nvImageCodec operates under the Apache 2.0 license.

Resources

nvImageCodec GitHub
nvImageCodec Documentation