Skip to content

Releases: NVIDIA/nvImageCodec

nvImageCodec Release v0.9.0-beta.10

Choose a tag to compare

@smatysik-nv smatysik-nv released this 14 Jul 19:55
e7a7ef0

v0.9.0-beta.10

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 device_id parameter to Image.cuda() method, allowing explicit selection of the target GPU device when copying host images to device memory. When called on an image already in device memory with a different device_id, a direct device-to-device (peer-to-peer) copy is performed without going through host memory.
  • Added cuda_stream parameter to Image.cuda() method, allowing the caller to specify the CUDA stream for the data transfer.
  • Added read-only device_id property to Decoder, Encoder, and Image classes.
  • Added read-only cuda_stream property to Image class.
  • Added keyword-only precision parameter to nvimgcodec.as_image and nvimgcodec.as_images. Use it to describe lower-precision data stored in a wider container, e.g. 12-bit values held in a uint16 buffer: nvimgcodec.as_image(arr, precision=12). Accepted values are 0 (or None, both meaning "use the full bitdepth of the sample data type") and any integer in 1..bitdepth(dtype). For floating-point dtypes only 0/None or the dtype's full bitdepth (e.g. 32 for float32) is accepted. Defaults to None.
  • nvJPEG 2000 encoder now honors custom precision: a value set via as_image(arr, precision=N) is written into the JPEG 2000 SIZ marker and survives the bitstream round-trip.
  • Other built-in encoders log a warning when given a custom precision and continue encoding at the full type bitdepth.
  • Added keyword-only sample_format parameter to DecodeParams for driving the decoder's output layout and channel order. Must be *_AUTO_COMPONENTS (a.k.a. *_UNCHANGED) or compatible with color_spec, otherwise a ValueError is raised. Defaults to I_AUTO_COMPONENTS.
  • Added SampleFormat.I_AUTO_COMPONENTS and SampleFormat.P_AUTO_COMPONENTS as the preferred names for the case where the caller wants to pin only the channel interleaving (I_ / P_) and let color_spec choose the components. They are exact aliases of I_UNCHANGED / P_UNCHANGED (identical values and behaviour); the older *_UNCHANGED names remain valid.
  • nvimgcodec.as_image / as_images accept planar (CHW) inputs: pass a concrete P_* format with a (C, H, W) array whose leading axis is at least the format's arity (single-channel P_Y also accepts a 2-D (H, W) shape), or P_AUTO_COMPONENTS (P_UNCHANGED) as a layout hint with no arity constraint. Concrete interleaved formats (I_*) are similarly arity-checked against the input's last axis.
  • Decoder.decode(..., image=) accepts multi-plane externally-managed reuse targets. Cross-layout reuse (e.g. a contiguous HWC buffer used as a CHW decode target) is allowed when the buffer is row- and plane-contiguous; layout mismatches with a padded buffer raise ValueError.
  • Added read-only num_channels property to Image, returning the total number of channels across all planes. Mirrors the existing CodeStream.num_channels property.
  • Updated CUDA 13 Docker images used to produce release binaries from CUDA Toolkit 13.0 to CUDA Toolkit 13.3.
  • Breaking change: When chroma_subsampling is not specified in EncodeParams, the default for images with at least 3 channels is now codec-dependent: JPEG uses CSS_420 (previously CSS_444), while other codecs continue to use CSS_444. Images with fewer than 3 channels still default to CSS_GRAY. The 4:2:0 JPEG default is broadly compatible and is the only mode the nvJPEG hardware encoder accepts. Pass an explicit chroma_subsampling to override — e.g. ChromaSubsampling.CSS_444 to keep full-resolution chroma for JPEG.
  • Breaking change: Image.precision and CodeStream.precision now return the full bitdepth of the sample data type (e.g. 8 for uint8, 16 for uint16) when no explicit precision is set, instead of the previous 0. Explicit precision values supplied via as_image are returned unchanged.
  • Breaking change: TIFF CodeStreamInfo::size and Python CodeStream.size now report the backing stream/file size, rather than an exact per-IFD compressed payload size. The size reported by the previous library version can be computed by using the generic TIFF metadata APIs to query the TIFF tile/strip size tags directly.
  • Breaking change: TIFF pagination and IFD selection model has been reworked:
    • limit_images has been removed.
    • bitstream_offset and image_idx now select a single IFD rather than a parse-start position, reporting num_images=1.
    • The next_bitstream_offset property was renamed to next_ifd_offset; it now exists alongside ifd_offset which reports the current offset of a selected IFD.
    • The TIFF parser keeps a cache of parsed IFDs to avoid repeated work and supports incremental parsing of the root IFD chain which is useful for very large images. See the advanced multi-image example for more details.
  • Added Torch DataLoader integration example notebook, demonstrating how to plug nvImageCodec into torch.utils.data.DataLoader for GPU-accelerated image decoding.
  • Improved nvJPEG hardware-decoder throughput on multi-engine GPUs for concurrent single-image decoding and batches with mixed chroma subsampling, including Python workloads using one Decoder per thread.
  • Breaking change: Python decoder is now using fancy_upsampling by default for JPEG (C decoder was already using it). Decoded images will now be upsampled using interpolation instead of nearest neighbor, which should improve the quality of the decoded images and make decoded images more similar to those produced by other libraries, but it may reduce the decode speed (especially for HW decoder). By default fancy upsampling with ROI decode is not enabled with nvJPEG version older than 13.2 (available in CTK 13.3) due to decode bug in nvJPEG, to enable it, pass :enable_roi_fancy_upsampling=1 option when creating decoder.
  • Updated Docker images to use the newest released nvTIFF, nvCOMP and nvJPEG2000.

Fixed Issues

  • Pinned the nvidia-libnvcomp-cuXX dependency in the nvtiff and all extras to >=5,<6.
  • Fixed device_id not being propagated correctly when creating a Decoder or Encoder with a non-default device.
  • Fixed wrong copy direction in the strided device-to-host path of Image.cpu() that used cudaMemcpyHostToDevice instead of cudaMemcpyDeviceToHost.
  • Fixed DeviceGuard leaking a device switch when constructed in a thread or process with no current driver context.
  • Fixed coordinate-system mismatch for ROI decoding of EXIF-rotated images. When DecodeParams.apply_exif_orientation is set, nvimgcodecRegion_t is now consistently interpreted in display (post-orientation) coordinates instead of raw codestream coordinates. Previously, ROIs that fit within the display image but exceeded the raw codestream's smaller axis (for EXIF orientations 5–8, which transpose width and height) were rejected with ROI_UNSUPPORTED.
  • Fixed a race in Encoder and Decoder where back-to-back submits on the same instance with different params (e.g. JPEG quality_value, apply_exif_orientation) could cause the first submission's still-running worker threads to read the second submission's params, silently producing output that did not match the requested params. Each submission now carries its own per-sample params snapshot, written only after the previous submission's workers have drained.
  • Fixed CodeStream reuse (passing an existing CodeStream as code_stream_s= to Encoder.encode) when the existing CodeStream was created from a file or bytes. Previously the output buffer was left uninitialized in those cases, causing segfaults on the subsequent encode.
  • Fixed CUDA device handling for multi-GPU decode, encode, and image transfer paths. Internal worker threads, generic codec processing, metadata extraction, and device/pinned buffer allocation and release now establish the requested CUDA device before issuing CUDA work or invoking user allocators. Previously, work submitted for a non-current GPU could run with a different current device, causing hangs, allocations on the wrong GPU, or custom allocator/deleter calls on the wrong device.
  • Reorganized the native install layout so CUDA-major variants can coexist on the same system. The default layout is now:
    • Linux, with prefix /usr: runtime libraries in /usr/<libdir>/libnvimgcodec/<cuda_major>, extension modules in /usr/<libdir>/libnvimgcodec/<cuda_major>/extensions, runtime tools in /usr/bin/nvimgcodec/<cuda_major>, public headers in /usr/include, CMake package files in /usr/<libdir>/libnvimgcodec/<cuda_major>/cmake/nvimgcodec, package docs in /usr/share/doc/libnvimgcodec, and the loader drop-in at /etc/ld.so.conf.d/nvimgcodec-<cuda_major>.conf.
    • Windows, with prefix C:\Program Files\NVIDIA nvImageCodec: runtime DLLs and tools in bin\<cuda_major>, extension DLLs in bin\<cuda_major>\extensions, import/static libraries in lib\libnvimgcodec\<cuda_major> and lib\libnvimgcodec\<cuda_major>\extensions, headers in include, CMake package files in lib\libnvimgcodec\<cuda_major>\cmake\nvimgcodec, and docs in share\doc\libnvimgcodec.
  • Fixed CPU TIFF decoding of JPEG...
Read more

nvImageCodec Release v0.8.0-beta.9

Choose a tag to compare

@smatysik-nv smatysik-nv released this 14 Apr 13:20

v0.8.0-beta.9

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 pydicom plugin for seamless GPU-accelerated DICOM decoding. The plugin integrates with pydicom's standard workflow, automatically accelerating decoding for supported compressed transfer syntaxes (JPEG, JPEG 2000, JPEG Lossless, HTJ2K).
  • Added DICOM compression tools for HTJ2K transcoding and multi-frame conversion. Includes utility functions for batch transcoding DICOM series to HTJ2K compression and converting single-frame series to Enhanced (multi-frame) DICOM format with optional simultaneous compression.
  • PNG CPU encoder backend now supports quality value in range from 0 (lowest compression ratio, fastest) to 9 (highest compression ratio, slowest), if quality type is NVIMGCODEC_QUALITY_TYPE_LOSSLESS.
  • Added conversion from RGB to grayscale in OpenCV encoder.
  • Added TIFF CodeStream offset support, allowing parsing from a custom IFD offset (bitstream_offset).
  • Added subifd_offsets field to CodeStreams. This allows parsing and decoding SubIFDs through bitstream_offset API.
  • Added TIFF pagination support via limit_images and next_bitstream_offset to page through large multi-image TIFFs.
  • Added TIFF_TAG_LIST metadata kind to enumerate available TIFF tag IDs. Non-existent tag lookups now return None instead of raising.
  • Breaking change: nvimgcodecCodeStreamCreateFromFile and nvimgcodecCodeStreamCreateFromHostMem now take an additional code_stream_view parameter (nullable). This can be used to specify bitstream_offset and limit_images at creation time.
  • CUDA streams are now managed with a shared pool and round-robin thread assignment. The default is num_streams = num_threads. This can be changed with the NVIMGCODEC_DEFAULT_NUM_CUDA_STREAMS environment variable or :num_cuda_streams=N option (1 to num_threads).
  • Reduced overhead of internal GPU stream synchronization.
  • Implemented early library loading and version checking for nvJPEG, nvJPEG2000, and nvTIFF extensions. Libraries are now loaded at plugin registration time (not at first decode/encode), with minimum version requirements enforced. This ensures better error detection and provides early feedback when library dependencies are unavailable or outdated. Minimum versions required: nvJPEG (CUDA version-dependent), nvJPEG2000 0.8.0+, and nvTIFF 0.4.0+. We advise using latest versions to get full feature support.
  • Breaking change: Encoding JPEG2000 on GPU is no longer supported with nvJPEG2000 v0.8.1 or older. Please update to v0.9.0 or newer.
  • Added :doc:sliding window decoding with tile cache <samples/sliding_window_tile_cache> example notebook, demonstrating how to scan a large tiled image with a sliding window while caching already-decoded tiles and batch-decoding only the new tiles needed at each step.
  • JPEG2000 CUDA backend can now encode RGB image with Alpha channel and YUV image.

Fixed Issues

  • Fixed extension auto-discovery to correctly locate extensions when the library is installed under lib/ or bin/ directories in addition to lib64/ (e.g. conda environments on Linux, standard system installs).
  • Fixed issue with nvTIFF encoder not supporting precision 0 (full-precision of the data type) value.
  • Fixed precision handling for signed data types.
  • Fixed DLPack export so that it gives co-ownership of the underlying image buffer to the consumer.
  • Fixed TIFF parser to support LONG8 (64-bit) dimension tags, with validation to reject dimensions exceeding 32-bit limits.
  • Fixed TIFF parser to treat TIFF sample format 0 (uninitialized) as unsigned integer.
  • Fixed TIFF grayscale parsing when SamplesPerPixel tag is missing by defaulting to 1.
  • Added support for parsing Hamamatsu NDPI images larger than 4Gb
  • Improved JPEG2K (JPEG 2000) parser to tolerate slightly malformed but decodable files
  • Fixed encoder-created CodeStream so that metadata (e.g. num_images, get_code_stream_info()) and get_sub_code_stream(image_idx=0) work correctly; previously num_images was 0 and sub-code-stream creation could fail or assert.
  • Fixed TIFF decoder when decoding a sub code stream created with only image_idx (no region), avoiding an assertion in region bounds check.
  • Fixed Python CodeStream: calling get_sub_code_stream(idx=0) (invalid kwarg) now raises TypeError with a clear message instead of aborting;
  • Fixed a segfault that occurred when passing a GPU-decoded Image directly to NumPy (e.g. np.array(img)). NumPy now raises a clear RuntimeError telling the user to call .cpu() first, instead of crashing. CPU images work correctly and produce a zero-copy NumPy array.

nvImageCodec Release v0.7.0-beta.8

Choose a tag to compare

@jantonguirao jantonguirao released this 09 Jan 09:52

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

Choose a tag to compare

@jantonguirao jantonguirao released this 12 Aug 16:27

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

Pre-release

Choose a tag to compare

@smatysik-nv smatysik-nv released this 20 Mar 13:50

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

Pre-release

Choose a tag to compare

@smatysik-nv smatysik-nv released this 30 Dec 17:59

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

Pre-release

Choose a tag to compare

@jantonguirao jantonguirao released this 15 Nov 08:43

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

Pre-release

Choose a tag to compare

@jantonguirao jantonguirao released this 09 Aug 08:22

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

Pre-release

Choose a tag to compare

@mkhadatare mkhadatare released this 03 Feb 17:57

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