Releases: AcademySoftwareFoundation/OpenImageIO
Releases · AcademySoftwareFoundation/OpenImageIO
OpenImageIO v2.3.14.0
Release 2.3.14 (1 Apr 2022) -- compared to 2.3.13
- Add support for UDIM pattern
<uvtile>
(used by Clarisse & V-Ray). #3358 - BMP: Support for additional (not exactly fully documented) varieties used by
some Adobe apps. #3375 - Python: support uint8 array attributes in and out. This enables the proper
Python access to "ICCProfile" metadata. #3378 - Improved precision in IBA::computePixelStats(). #3353
- ffmpeg reader not uses case-insensitive tests on file extensions. #3364
- Fix writing deep exrs when buffer datatype doesn't match the file. #3369
- Fix conflict between RESTful and Windows long path notations. #3372
- ffmpeg reader: take care against possible double-free of allocated memory
crash upon destruction. #3376 - simd.h fixes for armv7 and aarch32. #3361
- Fix compiler warnings related to discrepancies between template declaration
and redeclaration in simd.h and benchmark.h. #3350 - Suppress MacOS warnings about OpenGL depreation. #3380
- Now doing CI builds for Intel icc and icx compilers. #3355 #3363
- CI: Overhaul of yml file to be more clear and compact by using GHA
"strategy" feature. #3356 #3365
OpenImageIO v2.3.13.0
Release 2.3.13 (1 Mar 2022) -- compared to 2.3.12
- Filesystem::searchpath_split better handling of empty paths. #3306
- New Strutil::isspace() is an isspace replacement that is safe for char
values that are < 0. #3310 - Expose the Strutil::utf8_to_utf16() and utf16_to_utf8() utilities on
non-Windows platforms (and also modernize their internals). #3307 - For the most important ImageInput, ImageOutput, and ImageBuf methods that
take a filename, add new flavors that can accept awstring
as the
filename. #3312 #3318 - PPM: properly report color space as Rec709 (as dictated by PPM spec). #3321
- PNG: more robust reporting of color space as sRGB in the absence of header
fields contradicting this. #3321 - strutil.h: Split the including of fmt.h and some related logic into a
separate detail/fmt.h. This is still included by strutil.h, so users
should not notice any change. #3327 - Targa: Fix parsing of TGA 2.0 extension area. #3323
- Support building against FFmpeg 5.0. #3282
- oiiotool --pixelaspect : fix setting of "PixelAspectRatio", "XResolution",
and "YResolution" attributes in the output file (were not set properly
before). #3340
OpenImageIO v2.3.12.0 release
Release 2.3.12 (1 Feb 2022) -- compared to 2.3.11
- oiiotool: Don't give spurious warnings about no output when the --colorcount
or --rangecheck commands are used. #3262 oiiotool --pattern checker
fixed behavior so that if only the checker
width was specified but not the height, height will be equal to width. #3255oiiotool --point
lets you set individual pixels. #3256- Python: A new ImageBuf constructor was added that takes only a NumPy
ndarray, and deduces the resolution, channels, and format (pixel data type)
from the shape of the array. #3246 - Python: Implement
ROI.copy()
. #3253 - Python: ImageSpec and ParamValueList now support
'key' in spec
,
del spec['key']
, andspec.get('key', defaultval)
to more fully emulate
Pythondict
syntax for manipulating metadata. #3252 (2.3.12/2.4.0) - Python bug fix: fix
clamp()
when the min or max are just a float. Now
it uses that one value for all channels, instead of using it only for
the first channel. #3265 - ImageSpec gained an additional constructor that takes a string
representation of the pixel data type (where it used to insist on a
TypeDesc), such asImageSpec(640, 480, 3, "uint8")
. This is especially
helpful for new/casual users, or when you want code to be maximally
readable. #3245 Imagepec::getattribute()
new query token"format"
can retrieve the pixel
data type. #3247IBA::make_texture()
: ensure that "maketx:ignore_unassoc" is honored. #3269- Support an additional UDIM pattern
<UVTILE>
, which is specified by
MaterialX. #3280 - TIFF: support 16-bit palette images. #3260
- TIFF: Gracefully handle missing ExtraSamples tag. #3287
- Targa: Better interpretation of TGA 1.0 files with alpha that is zero
everywhere. Be more consistent with Targa attributes all being called
"targa:foo". Add "targa:version" to reveal whether the file was TGA 1.0
or 2.0 version of the format. #3279 - simd.h: Better guards to make it safe to include from Cuda. #3291 #3292
- Fix bugs in the build_opencolorio.bash script, did not correctly handle
installation into custom directories. #3278 - Fixes to FindOpenColorIO.cmake module, now it prefers an OCIO exported cmake
config (for OCIO 2.1+) unless OPENCOLORIO_NO_CONFIG=ON is set. #3278 - Docs: The ImageBufAlgo chapter now has examples for C++, Python, and
oiiotool for almost every operation. #3263
OpenImageIO 2.2.20.0
Release 2.2.20 (1 Feb 2022) -- compared to 2.2.19
- Fix some address sanitizer failures. #3160
- Build/CI: Deal with OpenColor renaming its master branch to main. #3169
- Windows: Fix error when compiling with MSVC. #3168
- Fix excessive memory usage when saving EXR with many channels. #3176
- TIFF: now works for 16-bit palette images. #3260
- Fix ImageBuf::read bug for images of mixed per-channel data types. #3088
OpenImageIO v2.3.11.0
Release 2.3.11 (1 Jan 2022) -- compared to 2.3.10
- JPEG2000: enable multithreading for decoding (if using OpenJPEG >= 2.2)
and encoding (if using OpenJPEG >= 2.4). This speeds up JPEG-2000 I/O
by 3-4x. #2225 - TIFF: automatically switch to "bigtiff" format for >4GB images. #3158
- Security: New global OIIO attributes "limits:channels" (default: 1024) and
"limits:imagesize_MB" (default: 32768, or 32 GB) are intended to reject
input files that exceed these limits, on the assumption that they are either
corrupt or maliciously constructed, and would, if read, lead to absurd
allocations, crashes, or other mayhem. Apps may lower or raise these limits
if they know that a legitimate input image exceeds these limits. Currently,
only the TIFF reader checks these limits, but others will be modified to
honor the limits over time. #3230 - TextureSystem: enhance safety/correctness for untiled images that exceed
2GB size (there was an integer overflow problem in computing offsets within
tiles). #3232 - Cleanup: Get rid of an obsolete header c-imageio.h that was experimental
and the functions declared therein were not implemented in this release.
#3237 - Build: rely on env variable "OpenImageIO_CI" to tell us if we are running in
a CI environment, not the more generic "CI" which could be set for other
reasons in some environments. #3211 - Build: Improvements in how we find OpenVDB. #3216
- Build: If CMake variable
BUILD_TESTING
is OFF, don't do any automatic
downloading of missing test data. #3227 - Dev: Add Strutil::edit_distance(). #3229
- Docs: Clean up intra-document section references, new explanations about
input and output configuration hints, more code examples in both C++ and
Python (especially for the ImageInput and ImageOutput chapters). #3238 #3244
OpenImageIO v2.3.10.1
Release 2.3.10.1 (7 Dec 2021) -- compared to 2.3.10.0
- Build: restore code that finds Jasper when using statically-linked libraw.
#3210 - Build/test: Gracefully handle failing to find git for test data download.
#3212 - fmath.h: bit_cast specialization should take refs, like the template.
This made warnings for some compilrs. #3213 - Build: make sure to properly use the tbb target if it exists. #3214
OpenImageIO v2.3.10.0
Release 2.3.10 (1 Dec 2021) -- compared to 2.3.9
New (non-compatibility-breaking) features:
- TextureSystem: add feature for stochastic mipmap interpolation. This adds
new interpolation modes "StochasticTrilinear" and "StochasticAniso", which
in conjunction with the "rnd" field in TextureOpt, will stochastically
choose between bracketing MIPmap levels rather than interpolating them. This
reduces texture lookup cost by up to 40%, but it's only useful in the
context of a renderer that uses many samples per pixel. #3127 - maketx/make_texture() now supports options to store Gaussian forward and
inverse transform lookup tables in image metadata (must be OpenEXR textures
for this to work) to aid writing shaders that use histogram-preserving
blending of texture tiling. This is controlled by new maketx arguments
--cdf
,--cdfsigma
,--sdfbits
, or forIBA::make_texture()
by using
hintsmaketx:cdf
,maketx:cdfsigma
, andmaketx:cdfbits
. #3159 oiitool --oiioattrib
can set "global" OIIO control attributes for
an oiiotool run (equivalent of callingOIIO::attribute()
). #3171oiiotool --repremult
exposes the previously existingIBA::repremult()
.
The guidance here is that--premult
should be used for one-time conversion
of "unassociated alpha/unpremultiplied color" to associated/premultiplied,
but when you are starting with a premultiplied image and have a sequence of
unpremultiply, doing some adjustment in unpremultiplied space, then
re-premultiplying, it's--repremult
you want as the last step, because it
preserves alpha = 0, color > 0 data without crushing it to black. #3192oiiotool --saturate
andIBA::saturate()
can adjust saturation level of a
color image. #3190- When building against OpenEXR >= 3.1.3, our OpenEXR output now supports
specifying the zip compression level (for example, by passing the
"compression" metadata as "zip:4"). Also note than when using OpenEXR >=
3.1.3, the default zip compression has been changed from 6 to 4, which
writes compressed files significantly (tens of percent) faster, but only
increases compressed file size by 1-2%. #3157 - Improved image dithering facilities: When dithering is chosen, it now
happens any time you reduce >8 bits to <= 8 bits (not just when converting
from float or half); change the dither pattern from hashed to blue noise,
which looks MUCH better (beware slightly changed appearance);IBA::noise()
andoiiotool --noise
now take "blue" as a noise name, giving a blue noise
pattern;IBA::bluenoise_image()
returns a reference to a stored periodic
blue noise iamge;oiiotool -d
now lets you ask for "uint6", "uint4",
"uint2", and "uint1" bit depths, for formats that support them. #3141 - New global OIIO attribute
"try_all_readers"
can be set to 0 if you want to
override the default behavior and specifically NOT try any format readers
that don't match the file extension of an input image (usually, it will try
that one first, but it if fails to open the file, all known file readers
will be tried in case the file is just misnamed, but sometimes you don't
want it to do that). #3172 - Raise the default ImageCache default tile cache from 256MB to 1GB. This
should improve performance for some operations involving large images or
images with many channels. #3180 - IOProxy support has been added to JPEG output (already was supported for
JPEG input) and for GIF input and output. #3181 #3182 oiiotool --maxchan
and--minchan
, andIBA::maxchan()
andminchan()
turn an N-channel image into a 1-channel images that for each pixel,
contains the maximum value in any channel of the original for that pixel.
#3198
Bug fixes:
- Fix
oiiotool --invert
to avoid losing the alpha channel values. #3191 - Fix excessive memory usage when saving EXR files with many channels. #3176
- WebP: Fix previous failure to properly set the "oiio:LoopCount" metadata
for animated webp images. #3183 - Targa: Better detection/safety when reading corrupted files, and fixed
bug when reading x-flipped images. #3162 - RLA: better guards against malformed input. #3163
- Fix oiiotool bug when autocropping output images when the entire pixel data
window is in the negative coordinate region. #3164 - oiiotool improved detection of file reading failures. #3165
- DDS: Don't set "texturetype" metadata, it should always have been only
"textureformat". Also, add unit testing of DDS to the testsuite. #3200 - When textures are created with the "monochrome-detect" feature enabled,
which turns RGB textures where all channels are always equal into true
single channel greyscale, the single channel that results is now correctly
named "Y" instead of leaving it as "R" (it's not red, it's luminance).
#3205
Build fixes and developer goodies:
- Update internal stb_printf implementation (avoids some sanitizer alerts).
#3160 - Fixes for MSVS compile. #3168
- Add Cuda host/device decorations to TypeDesc methods to make them GPU
friendly. #3188 - TypeDesc: The constructor from a string now accepts "box2f" and "box3f"
as synonyms for "box2" and "box3", respectively. #3183 - New Strutil::parse_values, scan_values, scan_datetime, parse_line. #3173
#3177 - New
Filesystem::write_binary_file()
utility function. #3199 - New build option
-DTIME_COMMANDS=ON
will print time to compile each module
(for investigating build performance; only useful when building with
CMAKE_BUILD_PARALLEL_LEVEL=1
). #3194
OpenImageIO 2.3.9.1
Release 2.3.9.1 (1 Nov 2021) -- compared to 2.3.8
- OpenEXR: When building against OpenEXR 3.1+ and when the global OIIO
attribute "openexr:core" is set to nonzero, do more efficient multithreaded
reading of OpenEXR files. #3107 oiiotool --dumpdata:C=name
causes the dumped image data to be formatted
with the syntax of a C array. #3136- oiiotool: Allow quotes in command modifiers. #3112
- jpeg input: remove stray debugging output to console. #3134
- HEIF: Handle images with unassociated alpha. #3146
- Targa: improved error detection for read errors and corrupted files. #3120
- raw: When using libraw 0.21+, now support new color space names "DCE-P3",
"Rec2020", and "sRGB-linear", and "ProPhoto-linear". Fix incorrect gamma
values for "ProPhoto". #3123 #3153 Fixes to work with the libraw 202110
snapshot. #3143 - TIFF: honor zip compression quality request when writing TIFF. #3110
- Fix broken oiiotool --dumpdata output. #3131
- Fix possible bad data alignment and SIMD assumptions inside TextureSystems
internals. #3145 - Field3D, which is no longer actively supported, now has support disabled in
the default build. To enable Field3D support, you must build with
-DENABLE_FIELD3D=1
. Note that we expect it to be no longer supported at
all, beginning with OIIO 2.4. #3140 - Build: Address new warnings revealed by clang 13. #3122
- Build: Fix when building with Clang on big-endian architectures. #3133
- Build: Fix occasional build breaks related to OpenCV headers. #3135
- Build: Improvements to NetBSD and OpenBSD support. #3137.
- docs: Add an oiiotool example of putting a border around an image. #3138
- docs: Fix explanation of ImageCache "falure_retries" attribute. #3147
OpenImageIO v2.2.19.0
Release 2.2.19 (1 Nov 2021) -- compared to 2.2.18
- Better catching of exceptions thrown by OCIO 1.x if it encounters 2.0 config
files. #3089 - Address new warnings revealed by clang 13. #3122
- Fixed some minor python binding bugs. #3074 #3094
- Fix when building with Clang on big-endian architectures. #3133
- Fix occasional build breaks related to OpenCV headers. #3135
- Improvements to NetBSD and OpenBSD support. #3137.
- Fixes to work with the libraw 202110 snapshot. #3143
Note: This is an update to the obsolete 2.2 release family. The current
fully-supported release family is 2.3.
OpenImageIO v2.3.8.0
Release 2.3.8 (1 Oct 2021) -- compared to 2.3.7
- Fix ImageBuf::read() bug for images of mixed per-channel data types. #3088
- Fix crash that could happen with invalidly numbered UDIM files. #3116
- Better catching of exceptions and other error handling when OpenColorIO 1.x
is used but encounters an OpenColorIO 2.x config file. #3089 #3092 #3095 - Ensure that OpenColorIO doesn't send info messages to the console if no
config is found. #3113 - Fix: make sure ImageSpec deserialization works for arbitrary attribs. #3066
oiiotool -ch
now has greatly reduced cost (no useless allocations or
copies) when the channel order and names don't change. #3068oiiotool --runstats
is now much better about correctly attributing I/O
time to-i
instead of to the subsequent operations that triggers the
read. #3073- TIFF output now supports IO proxies. #3075 #3077
- Improved finding of fonts (by IBA::render_text and oiiotool --text). It now
honors environment variable$OPENIMAGEIO_FONTS
and global OIIO attribute
"font_searchpath" to list directories to be searched when fonts are needed.
#3096 - We no longer install a FindOpenImageIO.cmake module. It was incomplete, out
of date, and wholly unnecessary now that we correctly export a config file
OpenImageIOConfig.cmake and friends. #3098 - When building against OpenEXR 3.1+, use of the OpenEXRCore library no longer
requires a build-time option, but instead is always available (though off by
default) and can be enabled by an application setting the OIIO global
attribute "openexr:core" to 1. #3100 - dev: Timer::add_seconds and add_ticks methods. #3070
- dev: Add
round_down_to_multiple()
and improveround_to_multiple()
to
correctly handle cases where the value is less than 0. #3104