Release Notes#
v0.7.0#
New Features:
- Decoder
Decoding planar JPEG images is now supported.
Parsing Hamamatsu NDPI images larger than 4GB is now supported.
Decoding Hamamatsu NDPI images with dimensions exceeding 65536 x 65536 is now supported.
- The following new APIs have been added:
nvtiffStreamParseFromFileEx()- Extended parsing with pagination / bitstream offset support.nvtiffStreamParseEx()- Extended parsing from memory with pagination / bitstream offset support.nvtiffStreamParseFromParentStream()- Create child streams from a parent stream.nvtiffStreamGetBitstreamOffset()- Get bitstream offset for an image.nvtiffStreamGetNumberOfTags()- Get the number of tags for an image.nvtiffStreamHasTag()- Check if a specific tag exists.
Generic IFD parsing/decoding (e.g. SubIFDs) is now possible with these new APIs.
Bug Fixes:
Fixed a bug in LZW decode for images created by a non-standard encoder.
Fixed minor bug related to BigTIFF IFD parsing.
JPEG hardware decoder is now properly enabled for very large images whose strips/tiles are smaller than 16k x 16k.
Performance Improvements:
- Strip/tile loading optimizations
nvtiffDecodeImage()andnvtiffDecodeImageEx()are up to 2x faster, especially for images with many strips/tiles.For maximal performance,
nvtiffStreamParse()should be used in conjunction with page-locked (pinned) memory.For small ROI in a very large image , memory-mapped buffers or
nvtiffStreamParseFromFile()should be used.
- LZW decoding optimizations
Updated kernels better utilize the GPU, leading to a 10-50% speedup in kernel time (not including strip/tile loading).
These optimizations respect CUDA green contexts.
- Decoding ROIs in Hamamatsu NDPI images is now significantly faster and uses less memory due to a virtual tiling optimization.
For best performance, use
nvtiffStreamGetImageGeometry()to align ROI regions and avoid unnecessary decode work.
Planned Deprecations:
In the next release, we plan on unifying the various decode APIs into a single API, which would support batched decoding, ROI, format conversion, and combinations of these features. This means that
nvtiffDecode(),nvtiffDecodeRange(),nvtiffDecodeImage(),nvtiffDecodeImageEx(), andnvtiffDecodeParamsSetROI()would all be removed.nvtiffDecodeCheckSupported()will have a modified signature to align with the new decode API.nvtiffTag_tand APIs using it will be deprecated. These APIs will be replaced by their generic tag variants.
v0.6.0#
New features:
nvtiffGetProperty() API to retrieve nvTIFF version.
- Decoder
Empty JPEG strips/tiles are filled with white pixels as described in https://openslide.org/formats/philips/.
- The following new APIs have been added:
nvtiffImage_tstruct to store image data and pitch for decode.nvtiffDecodeImageEx()to decode an image usingnvtiffImage_t.
Horizontal predictor now works with signed integer data type.
- Encoder
- The following new APIs have been added:
nvtiffEncodeParamsSetImageGeometry()API to set the image geometry (for now, number of rows per strip).nvtiffEncodeParamsSetTiffVariant()API to set the TIFF variant to regular or Big TIFF.
Horizontal differencing predictor is now available and enabled by default, which improves compression ratios for LZW-encoded TIFFs.
Bug Fixes:
Fixed a misaligned memory access error which could happen when decoding uncompressed images with multiple planes.
nvTIFF is now more robust when decoding malformed TIFF bitstreams and metadata.
Encoder now correctly writes TIFF files containing a single strip.
Encoder now returns an error if there is not enough memory, instead of potentially looping indefinitely.
Encoder now properly writes Big TIFF files.
Performance improvements:
Encoder now uses significantly (~10x) less memory and runs faster (~1.5 to 3x).
Breaking Changes:
nvtiff binaries for CUDA 11 are no longer supported.
The following APIs have been removed -
nvtiffStreamGetFileInfo(nvtiffStream_t tiff_stream, nvtiffFileInfo_t *file_info);
nvTiffEncodeCtx_t *nvTiffEncodeCtxCreate(int dev,
unsigned int imagesMax,
unsigned int stripsPerImageMax,
size_t memLimit=0);
void nvTiffEncodeCtxDestroy(nvTiffEncodeCtx_t *ctx);
int nvTiffWriteFile(const char *fname,
int tiffVer,
unsigned int nImages,
unsigned int nrow,
unsigned int ncol,
unsigned int rowsPerStrip,
unsigned short samplesPerPixel,
unsigned short *bitsPerSample,
unsigned int photometricInt,
unsigned int planarConf,
unsigned long long *stripSize,
unsigned long long *stripOffs,
unsigned char *stripData,
unsigned short sampleFormat);
int nvTiffEncode(nvTiffEncodeCtx_t *ctx,
unsigned int nrow,
unsigned int ncol,
unsigned int pixelSize,
unsigned int rowsPerStrip,
unsigned int nImages,
unsigned char **images_d,
unsigned long long stripAllocSize,
unsigned long long *stripSize_d,
unsigned long long *stripOffs_d,
unsigned char *stripData_d,
cudaStream_t stream=0);
int nvTiffEncodeFinalize(nvTiffEncodeCtx_t *ctx,
cudaStream_t stream);
v0.5.1#
New features:
CUDA 13 support.
Fixed an issue in
nvtiffEncodeParamsSetGeoKeyDOUBLEAPI observed with certain Geokeys of type double.Fixed an issue with
nvtiffStreamGetGeoKeyDOUBLEAPI observed when retrieving data from a non-zero start offset.Improved error handling in
nvtiffDecodeAPI when the tiff file does not have any image data.
Deprecated Features:
nvTIFF binaries for CUDA 11 are deprecated and will be removed in the next release.
The following APIs are deprecated and will be removed in the next release. Use APIs defined in the Encode API Reference section for tiff encode.
nvtiffStreamGetFileInfo(nvtiffStream_t tiff_stream, nvtiffFileInfo_t *file_info);
nvTiffEncodeCtx_t *nvTiffEncodeCtxCreate(int dev,
unsigned int imagesMax,
unsigned int stripsPerImageMax,
size_t memLimit=0);
void nvTiffEncodeCtxDestroy(nvTiffEncodeCtx_t *ctx);
int nvTiffWriteFile(const char *fname,
int tiffVer,
unsigned int nImages,
unsigned int nrow,
unsigned int ncol,
unsigned int rowsPerStrip,
unsigned short samplesPerPixel,
unsigned short *bitsPerSample,
unsigned int photometricInt,
unsigned int planarConf,
unsigned long long *stripSize,
unsigned long long *stripOffs,
unsigned char *stripData,
unsigned short sampleFormat);
int nvTiffEncode(nvTiffEncodeCtx_t *ctx,
unsigned int nrow,
unsigned int ncol,
unsigned int pixelSize,
unsigned int rowsPerStrip,
unsigned int nImages,
unsigned char **images_d,
unsigned long long stripAllocSize,
unsigned long long *stripSize_d,
unsigned long long *stripOffs_d,
unsigned char *stripData_d,
cudaStream_t stream=0);
int nvTiffEncodeFinalize(nvTiffEncodeCtx_t *ctx,
cudaStream_t stream);
v0.5.0#
New features:
Native support for Blackwell.
- Decoder
JPEG 2000 compression is supported(via nvJPEG2000).
Generic APIs to retrieve any tag contents from a tiff file.
- Encoder
- New version of the encoder APIs with the following features -
Ability to reuse
nvtiffEncoder_tobject when compressing multiple TIFF files.Support for geotiff meta data.
Deprecated Features:
The following APIs are deprecated and will be removed in the next release
nvtiffStreamGetFileInfo(nvtiffStream_t tiff_stream, nvtiffFileInfo_t *file_info);
nvTiffEncodeCtx_t *nvTiffEncodeCtxCreate(int dev,
unsigned int imagesMax,
unsigned int stripsPerImageMax,
size_t memLimit=0);
void nvTiffEncodeCtxDestroy(nvTiffEncodeCtx_t *ctx);
int nvTiffWriteFile(const char *fname,
int tiffVer,
unsigned int nImages,
unsigned int nrow,
unsigned int ncol,
unsigned int rowsPerStrip,
unsigned short samplesPerPixel,
unsigned short *bitsPerSample,
unsigned int photometricInt,
unsigned int planarConf,
unsigned long long *stripSize,
unsigned long long *stripOffs,
unsigned char *stripData,
unsigned short sampleFormat);
int nvTiffEncode(nvTiffEncodeCtx_t *ctx,
unsigned int nrow,
unsigned int ncol,
unsigned int pixelSize,
unsigned int rowsPerStrip,
unsigned int nImages,
unsigned char **images_d,
unsigned long long stripAllocSize,
unsigned long long *stripSize_d,
unsigned long long *stripOffs_d,
unsigned char *stripData_d,
cudaStream_t stream=0);
int nvTiffEncodeFinalize(nvTiffEncodeCtx_t *ctx,
cudaStream_t stream);
v0.4.0#
New features:
Support for arm sbsa and jetson.
Python wheels (binaries only) are available on pypi.
nvtiffStreamParse()API added to support tiff files already on host memory.nvtiffDecodeImage()API added which can decode a single image from a tiff file. It also supports region of interest for decoding and also provides the ability to select output format.
Breaking Changes:
nvtiff-*.whl which was posted as part of nvTIFF github samples is no longer supported. Python API support for nvTIFF will be available in a future nvImageCodec release.
Centos 7 is no longer supported.
v0.3.1#
This release provides important security updates for CVE-2023-31027 and is recommended for all users.
To view any published security bulletins for NVIDIA products, see the NVIDIA product security page (https://www.nvidia.com/en-us/security/).
For more information regarding NVIDIA’s security vulnerability remediation policies, see (https://www.nvidia.com/en-us/security/psirt-policies/)
v0.3.0#
New features:
CUDA 12 support - Binaries for both CUDA 11.x and CUDA 12.x are available.
APIs to retrieve GeoTIFF metadata.
TIFF files with the following characteristics can now be decoded -
TIFF files with multiple images having different properties.
Pixel data can be organized as tiles.
Planar Configuration can now be Planar Separate.
Upto 8 samples per pixel in Planar Contiguous mode.
JPEG compression (via nvJPEG).
Color space can be Palette or Transparency Mask.
Breaking Changes:
nvTiff.h renamed to nvtiff.h
Following APIs have been dropped
nvTiffFile_t *nvTiffOpenvoid nvTiffClosevoid nvTiffDumpRawvoid nvTiffPrintvoid nvTiffH2DAsyncint nvTiffDecodeint nvTiffDecodeRangeint nvTiffDecodeRange
v0.2.0#
New features:
New API added to support zlib decode with nvCOMP Library .
Encoder/Decoder supports 16bit and fp32 pixel formats.
Hopper (sm90) support is added.
Deprecated Features:
The following APIs will be removed in next release
nvTiffFile_t NVTIFFAPI *nvTiffOpenvoid NVTIFFAPI nvTiffClosevoid NVTIFFAPI nvTiffDumpRawvoid NVTIFFAPI nvTiffPrintvoid NVTIFFAPI nvTiffH2DAsyncint NVTIFFAPI nvTiffDecodeint NVTIFFAPI nvTiffDecodeRangeint NVTIFFAPI nvTiffDecodeRange
Note
This release tar ball / Windows files will be updated to new installer packages soon.
v0.1.0#
First release of the nvTiff library.
Refer to the NVIDIA nvTiff section of the documentation for the list of features supported.