Releases: NVIDIA/nvImageCodec
Release list
nvImageCodec Release v0.9.0-beta.10
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_idparameter toImage.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 differentdevice_id, a direct device-to-device (peer-to-peer) copy is performed without going through host memory. - Added
cuda_streamparameter toImage.cuda()method, allowing the caller to specify the CUDA stream for the data transfer. - Added read-only
device_idproperty toDecoder,Encoder, andImageclasses. - Added read-only
cuda_streamproperty toImageclass. - Added keyword-only
precisionparameter tonvimgcodec.as_imageandnvimgcodec.as_images. Use it to describe lower-precision data stored in a wider container, e.g. 12-bit values held in auint16buffer:nvimgcodec.as_image(arr, precision=12). Accepted values are0(orNone, both meaning "use the full bitdepth of the sample data type") and any integer in1..bitdepth(dtype). For floating-point dtypes only0/Noneor the dtype's full bitdepth (e.g.32forfloat32) is accepted. Defaults toNone. - 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_formatparameter toDecodeParamsfor driving the decoder's output layout and channel order. Must be*_AUTO_COMPONENTS(a.k.a.*_UNCHANGED) or compatible withcolor_spec, otherwise aValueErroris raised. Defaults toI_AUTO_COMPONENTS. - Added
SampleFormat.I_AUTO_COMPONENTSandSampleFormat.P_AUTO_COMPONENTSas the preferred names for the case where the caller wants to pin only the channel interleaving (I_/P_) and letcolor_specchoose the components. They are exact aliases ofI_UNCHANGED/P_UNCHANGED(identical values and behaviour); the older*_UNCHANGEDnames remain valid. nvimgcodec.as_image/as_imagesaccept planar (CHW) inputs: pass a concreteP_*format with a(C, H, W)array whose leading axis is at least the format's arity (single-channelP_Yalso accepts a 2-D(H, W)shape), orP_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 raiseValueError.- Added read-only
num_channelsproperty toImage, returning the total number of channels across all planes. Mirrors the existingCodeStream.num_channelsproperty. - Updated CUDA 13 Docker images used to produce release binaries from CUDA Toolkit 13.0 to CUDA Toolkit 13.3.
- Breaking change: When
chroma_subsamplingis not specified inEncodeParams, the default for images with at least 3 channels is now codec-dependent: JPEG usesCSS_420(previouslyCSS_444), while other codecs continue to useCSS_444. Images with fewer than 3 channels still default toCSS_GRAY. The 4:2:0 JPEG default is broadly compatible and is the only mode the nvJPEG hardware encoder accepts. Pass an explicitchroma_subsamplingto override — e.g.ChromaSubsampling.CSS_444to keep full-resolution chroma for JPEG. - Breaking change:
Image.precisionandCodeStream.precisionnow return the full bitdepth of the sample data type (e.g.8foruint8,16foruint16) when no explicit precision is set, instead of the previous0. Explicit precision values supplied viaas_imageare returned unchanged. - Breaking change: TIFF
CodeStreamInfo::sizeand PythonCodeStream.sizenow 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_imageshas been removed.bitstream_offsetandimage_idxnow select a single IFD rather than a parse-start position, reportingnum_images=1.- The
next_bitstream_offsetproperty was renamed tonext_ifd_offset; it now exists alongsideifd_offsetwhich 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.DataLoaderfor 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
Decoderper thread. - Breaking change: Python decoder is now using
fancy_upsamplingby 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=1option when creating decoder. - Updated Docker images to use the newest released nvTIFF, nvCOMP and nvJPEG2000.
Fixed Issues
- Pinned the
nvidia-libnvcomp-cuXXdependency in thenvtiffandallextras to>=5,<6. - Fixed
device_idnot being propagated correctly when creating aDecoderorEncoderwith a non-default device. - Fixed wrong copy direction in the strided device-to-host path of
Image.cpu()that usedcudaMemcpyHostToDeviceinstead ofcudaMemcpyDeviceToHost. - Fixed
DeviceGuardleaking 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_orientationis set,nvimgcodecRegion_tis 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 withROI_UNSUPPORTED. - Fixed a race in
EncoderandDecoderwhere back-to-back submits on the same instance with different params (e.g. JPEGquality_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
CodeStreamreuse (passing an existingCodeStreamascode_stream_s=toEncoder.encode) when the existingCodeStreamwas 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 inbin\<cuda_major>, extension DLLs inbin\<cuda_major>\extensions, import/static libraries inlib\libnvimgcodec\<cuda_major>andlib\libnvimgcodec\<cuda_major>\extensions, headers ininclude, CMake package files inlib\libnvimgcodec\<cuda_major>\cmake\nvimgcodec, and docs inshare\doc\libnvimgcodec.
- Linux, with prefix
- Fixed CPU TIFF decoding of JPEG...
nvImageCodec Release v0.8.0-beta.9
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_offsetsfield to CodeStreams. This allows parsing and decoding SubIFDs throughbitstream_offsetAPI. - Added TIFF pagination support via
limit_imagesandnext_bitstream_offsetto page through large multi-image TIFFs. - Added
TIFF_TAG_LISTmetadata kind to enumerate available TIFF tag IDs. Non-existent tag lookups now returnNoneinstead of raising. - Breaking change:
nvimgcodecCodeStreamCreateFromFileandnvimgcodecCodeStreamCreateFromHostMemnow take an additionalcode_stream_viewparameter (nullable). This can be used to specifybitstream_offsetandlimit_imagesat 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_STREAMSenvironment variable or:num_cuda_streams=Noption (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/orbin/directories in addition tolib64/(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()) andget_sub_code_stream(image_idx=0)work correctly; previouslynum_imageswas 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: callingget_sub_code_stream(idx=0)(invalid kwarg) now raisesTypeErrorwith a clear message instead of aborting; - Fixed a segfault that occurred when passing a GPU-decoded
Imagedirectly to NumPy (e.g.np.array(img)). NumPy now raises a clearRuntimeErrortelling 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
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
CodeStreamobject with buffer protocol. - Added possibility to create
CodeStreamfor encoding and pre-allocate memory for it (also pinned). - Added support for encoding to
CodeStreamobject (reuse allocated memory). Breaking change: The order of parameters in Pythonencodemethod has changed. - Added support for decoding to
Imageobject (reuse allocated memory). Breaking change: The order of parameters in Pythondecodemethod 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
SampleFormatenum to Python API. - Added
sample_formatproperty toImageclass. - Added
sample_formatproperty toCodeStreamclass. - Breaking change: Extended
nvimgcodecSampleFormat_tenum with more commonly used formats and enum values have been changed. - Changed parsed sample format for
pngandwebpcodecs, from planar to interleaved. - Breaking change:
nvimgcodecCodeStreamGetImageInfonow returns internal bitstreamnvimgcodecSampleFormat_tand not default to be decoded. For example for JPEG codec it can be now usuallyNVIMGCODEC_SAMPLEFORMAT_P_YCCinstead ofNVIMGCODEC_SAMPLEFORMAT_P_RGBas previously. - Breaking change:
nvimgcodecImageCreate,nvimgcodecCodeStreamCreateFromFile,nvimgcodecCodeStreamCreateFromHostMem,nvimgcodecCodeStreamCreateToFile,nvimgcodecCodeStreamCreateToHostMem,nvimgcodecCodeStreamGetSubCodeStreamnow 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_specproperty to PythonImageclass, providing access to color specification information. - Added
color_specproperty to PythonCodeStreamclass, providing access to color specification information. - Changed Python
ColorSpec.RGBtoColorSpec.SRGB. - Changed Python
ColorSpec.YCCtoColorSpec.SYCC. - Added
mct_modeparameter tonvimgcodecJpeg2kEncodeParams_tandJpeg2kEncodeParamsclass in Python API to allow to control multiple component transformation mode in nvJPEG2000 encoding. - Breaking change: Changed
channelsproperty tonum_channelsin PythonCodeStreamclass 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:
getSubCodeStream→get_sub_code_stream,getMetadata→get_metadata. - Added optional
sample_formatandcolor_speckeyword-only parameters to Pythonas_imageandas_imagesfunctions, allowing users to override automatic format inference. - Breaking change: Changed default parsed
chroma_subsamplingforpng,webp,pnmandtiffcodecs to beCSS_GRAYfor grayscale images with single channel. - Optimized memory allocation when decoding and encoding strided images.
- Breaking change:
buffer_sizemember was removed fromnvimgcodecImageInfo_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__toImageobject for single channel images. - Fixed nvJpeg2000 encoding of image which was decoded with
color_specset toColorSpec.UNCHANGED. - Fixed encode array with alpha channel (#36).
- Added metadata-related and other missing types to documentation.
get_sub_code_streamwill now keep alive parentCodeStreamso that any data (likebytes) 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_subsamplinginEncodeParamsto beCSS_GRAYfor grayscale images with single channel. - Fixed decoding to strided (when image rows have padding) buffer.
Deprecated and removed features
- Removed
BackendParamsclass from Python API. Breaking change:Backendconstructor now acceptsBackendKindtogether with optionally load_hint and load_hint_policy parameters. - Removed
backend_kindsparameter from Decoder and Encoder constructors. Breaking change:Backendconstructor now acceptsBackendKindwhich can be automatically converted toBackend. - Breaking change:
Backendpropertiesbackend_kind,load_hintandload_hint_policyare 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_Ysample format instead. - Python 3.8 is no longer supported.
- CUDA 11 is no longer supported.
nvImageCodec Release v0.6.0-beta.6
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_typeandquality_valueto specify quality qualityandtarget_psnrwere removed
- use
- 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
encodeandwritefreeze when no valid images were passed - Fixed Python
decodeandreadabort when passing onlyNone - Fixed Python
decodeandreadsegfault when passingNoneas 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
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
decodeandencodefunctions returnNonein 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_resolutionsinJpeg2kEncodeParamsto 6, to align with existing JPEG 2000 libraries - Fixed conversion from
num_decompstonum_resolutionsin 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
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
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_tAPI to have separateschedule,runandwaitfunctions. - Simplified the API for extensions (decoder and encoder) so that the parallelization and synchronization happens in a layer above
- Added an optional API
getMiniBatchSizefor 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_policyflag tonvimgcodecBackendParams_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_ttonvimgcodecTileGeometryInfo_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
LaunchConvertNormKernelconversion 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
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
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.