OpenImageIO version 2.4 has been released! Officially tagged as "v2.4.4.1", we have also moved the "release" branch tag to this position. Henceforth, 2.4 is the supported production release family. The API is now frozen -- we promise that subsequent 2.4.x releases (which should happen monthly) will not break back-compatibility of API, ABI, or linkage, compared to this release. Please note that this release is not ABI or link compatible with 2.3 or older releases (and not necessarily with earlier in-progress 2.4 development before this release).
Release notes for 2.4 outlining all the changes since last year's release are below.
Please note that a few of the build and runtime dependencies have changed their minimum supported versions. OpenEXR versions 2.0, 2.1, and 2.2 are no longer supported, 2.3 is now the minimum. Field3D is now no longer supported as a volume data format, as it is no longer actively maintained and everybody seems to have switched to OpenVDB for volume data.
Enjoy, and please report any problems. We will continue to make patch releases to the 2.4 family roughly monthly, which will contain bug fixes and non-breaking enhancements.
The older 2.3 series of releases is now considered obsolete. We will continue for now to make 2.3 patch releases, but over time, these will become less frequent and be reserved for only the most critical bug fixes.
The "master" branch is now progressing toward an eventual 2.5 release next summer. As usual, you are welcome to use master for real work, but we do not make any compatibility guarantees and don't guarantee continuing API compatibility in master.
Release 2.4 (1 Oct 2022) -- compared to 2.3
New minimum dependencies and compatibility changes:
- OpenEXR minimum is now 2.3 (raised from 2.0). #3109 (2.4.0)
- Field3D support has been removed entirely. The Field3D library appears to be
no longer maintained, and is incompatible with modern versions of
OpenEXR/Imath. We believe that all prior uses of Field3D use via OIIO have
been migrated to OpenVDB. #3151 (2.4.0)
New major features and public API changes:
- Imath header and class hiding:
- Header includes have been shuffled around so that Imath headers are not
included from OIIO headers where they are not needed, and some OIIO
headers that need Imath types only for few function parameters now guard
those functions with#if
so that Imath-taking functions are not
visible unless the calling app has previously had an#include
of
Imath. If your app uses Imath types but did not include the right Imath
headers (relying on the accidental fact of other OIIO headers
transitively including them), you may need to adjust your includes.
#3301 #3332 (2.4.0.2) #3406 #3474 (2.4.2) - New
V3fParam
,M33fParam
, andM44fParam
(defined in vecparam.h) are
used just for parameter passing in public APIs, instead of Imath::V3f,
M33f, or M44f, in order to more fully hide Imath types from our public
interfaces. These are only parameter-passing classes, and are not useful
as vector or matrix classes in their own right. But they seamlessly cast
to and from other vector- and matrix-like classes. #3330 (2.4.1.0) OPENIMAGEIO_IMATH_DEPENDENCY_VISIBILITY
is a new CMake cache variable
at OIIO build time that controls whether the Imath library dependencies
will be declared as PUBLIC (default) or PRIVATE target dependencies of
libOpenImageIO and libOpenImageIO_Util. #3322 (4.2.0.2) #3339 (4.2.0.3)- For downstream projects that consume OIIO's exported cmake config
files, setting CMake variableOPENIMAGEIO_CONFIG_DO_NOT_FIND_IMATH
to
ON will skip the find_depencency() calls for Imath and OpenEXR. To
clarify, this is not a variable that has any effect when building OIIO,
it's something set in the downstream project itself. #3322 (4.2.0.2)
- Header includes have been shuffled around so that Imath headers are not
- The dithering that happens when saving high bit depth image data to low bit
depth formats has been improved in several ways. It now applies when writing8 bit data to <= 8 bit files, not just when the source is float or half.
The dither pattern is now based on blue noise, and this dramatically
improves the visual appearance. #3141 (2.4.0/2.3.10) - TextureSystem now supports stochastic sampling. If the new TextureOpt field
rnd
(which now defaults to -1.0) is set to a value >= 0, the filtered
texture lookup can use stochastic sampling to save work. The shading system
attribute "stochastic" is set to the stochastic strategy: 0 = no stochastic
sampling; 1 = for trilinear or anisotropic MIP modes, choose one MIP level
stochastically instead of blending between two levels; 2 = for anisotropic
mode, use just one anisotropic sample, chosen across the filter axis. (This
is a bit field, so 3 combines both strategies.) We measure this speeding up
texture lookups by 25-40%, though with more visual noise (which should be
resolved cleanly by a renderer that uses many samples per pixel). This
should only used for texture lookups where many samples per pixel will be
combined, such as for surface or light shading. It should not be used for
texture lookups that must return a single correct value (such as for
displacement, when each grid position is sampled only once). Even when the
"stochastic" attribute is nonzero, any individual texture call may be made
non-stochastic by setting TextureOpt.rnd to a negative value. #3127
(2.4.0/2.3.10) #3457 (2.4.2) - 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 #3206
(2.4.0/2.3.10) - oiiotool new commands and features:
- Control flow via
--if
,--else
,--endif
,--while
,--endwhile
,
--for
,--endfor
let you prototypes conditional execution and loops
in the command sequence. #3242 (2.4.0) --set
can set variables and their values can be retrieved in
expressions. #3242 (2.4.0)- Expressions now support: numerical comparisons via
<
,>
,<=
,>=
,
==
,!=
,<=>
; logical operators&&
,||
,!
,not()
; string
comparison functionseq(a,b)
andneq()
. #3242 #3243 (2.4.0) --oiioattrib
can set "global" OIIO control attributes for an oiiotool
run (equivalent of callingOIIO::attribute()
). #3171 (2.4.0/2.3.10)--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. #3192 (2.4.0/2.3.10)--saturate
can adjust saturation level of a color image. #3190
(2.4.0/2.3.10)--maxchan
and--minchan
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 (2.4.0/2.3.10)--point
lets you color one or more pixels in an image (analogous to
IBA::render_point). #3256 (2.4.0)--warp
now takes an optional modifier:wrap=...
that lets you set
which wrap mode to use when sampling past the edge of the source image.
#3341 (2.4.0.3)- New
--st_warp
performs warping of an image where a second image gives
the (s,t) coordinates to look up from at every pixel. #3379
(2.4.2/2.3.14) - Many attribute actions now take optional modifier
:subimages=
that
instructs oiiotool to apply to a particular subset of subimges in
multi-subimage files (such as multi-part exr). The commands so enabled
include--attrib
,--sattrib
,--eraseattrib
,--caption
,
--orientation
,--clear-keywords
,--iscolorspace
. The default, if
subimages are not specified, is to only change the attributes of the
first subimage, unless-a
is used, in which case the default is to
change the attributes of all subimages. #3384 (2.4.2)
- Control flow via
- ImageSpec :
- New constructors to accept a string for the data type. #3245
(2.4.0/2.3.12)
- New constructors to accept a string for the data type. #3245
- ImageBuf/ImageBufAlgo :
IBA::saturate()
can adjust saturation level of a color image. #3190
(2.4.0/2.3.10)IBA::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 (2.4.0/2.3.10)- New
IBA::st_warp()
performs warping of an image where a second image
gives the (s,t) coordinates to look up from at every pixel. #3379
(2.4.2/2.3.14) IBA::bluenoise_image()
returns a reference to a periodic blue noise
image. #3141 #3254 (2.4.0/2.3.10)
- ImageCache / TextureSystem :
- IC/TS both have added a
getattributetype()
method, which retrieves
just the type of a named attribute. #3559 (2.4.4.0)
- IC/TS both have added a
- Python bindings:
- New ImageBuf constructor and reset() from a NumPy array only -- it
deduces the resolution, channels, and data type from the array
dimensions and type. #3246 (2.4.0/2.3.12) - ROI now has a working
copy()
method. #3253 (2.4.0/2.3.12) - 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) - Support uint8 array attributes in and out. This enables the proper
Python access to "ICCProfile" metadata. #3378 (2.4.1.0/2.3.14) - New
ImageSpec.get_bytes_attribute()
method is for string attributes,
but in Python3, skips decoding the underlying C string as UTF-8 and
returns abytes
object containing the raw byte string. #3396 (2.4.2) - Fixes for Python 3.8+ to ensure that it can find the OpenImageIO module
as long as it's somewhere in the PATH. This behavior can be disabled by
setting environment variableOIIO_LOAD_DLLS_FROM_PATH=0
. #3470
(2.4.0/2.3.18)
- New ImageBuf constructor and reset() from a NumPy array only -- it
- New global OIIO attributes:
"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 (2.4.0/2.3.10)"use_tbb"
if nonzero, and if OIIO was built with TBB enabled and
found, then will use the TBB thread pool instead of the OIIO internal
thread pool. #3473 (2.4.2.2)"version"
(read only) now retrieves the version string. #3534
(2.3.19.0/2.4.2.2)
- Full IOProxy support has been added to TIFF #3075 (2.4.0/2.3.8), JPEG, GIF
#3181 #3182 (2.4.0/2.3.10), DDS #3217, PNM #3219, PSD #3220, Targa #3221,
WebP #3224, BMP #3223, JPEG-2000 #3226 (2.4.0). - Convention change: Image readers who wish to convey that the color space of
an input image is a simple gamma-corrected space will now call the color
space "GammaX.Y" (previously we sometimes used this, but sometimes called it
"GammaCorrectedX.Y"). #3202 (2.4.0) oiioversion.h
now defines symbolsOIIO_USING_IMATH_VERSION_MAJOR
and
OIIO_USING_IMATH_VERSION_MINOR
that reveal which Imath version was used
internally to OIIO when it was built (which may be different than the
version found when the downstream app is being compiled). #3305 (2.4.0.1)- Most of the major APIs (including ImageInput, ImageOutput, and ImageBuf)
that took a std::string or string_view to indicate a filename (assumed to
support UTF-8 encoding of Unicode filenames) now have additional versions
that directly take astd::wstring
, thus supporting UTF-16 Unicode
filenames as "wide strings". #3312 #3318 (2.4.0.1) - The ColorConfig API adds new calls
getDisplayViewColorSpaceName()
and
getDisplayViewLooks()
that expose the underlying OpenColorIO
functionality. #3319 (2.4.0.2) - Many long-deprecated functions in imageio.h and imagbufalgo.h are now
marked as OIIO_DEPRECATED, and therefore may start to generate warnings
if used by downstream software. #3328 (2.4.1.0)
Performance improvements:
- 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 (2.4.0/2.3.10) - Performance of JPEG-2000 I/O is improved by 2-3x due to multithreading,
but only if you are using a sufficiently new version of OpenJPEG (2.2
for encoding, 2.4 for decoding). #2225 (2.3.11/2.4.0) - Dramatically speed up (50-100x) the implementation of Strutil iequals,
iless, starts_with, istarts_with, ends_with, iends_with. This in turn speeds
up ParamValueList find/get related methods, ImageSpec find/get methods, and
TS::get_texture_info. #3388 (2.4.1.1) - Renderer users of the TextureSystem might see up to a ~40% speedup if
using the new stochastic sampling features. #3127 #3457 - Speed up reading of uncompressed DDS images by about 3x. #3463 (2.4.2.0)
Fixes and feature enhancements:
- ImageSpec:
- ImageInput / ImageOutput:
- ImageBuf / ImageBufAlgo:
- Fix ImageBuf::read bug for images of mixed per-channel data types. #3088
(2.4.0/2.3.8) IBA::noise()
now takes "blue" as a noise name. Also, "white" is now
the preferred name for what used to be "uniform" (which still works as a
synonym). #3141 (2.4.0/2.3.10)- Refactor ImageBuf::Iterator, ConstIterator templates, reduces compile
time substantially. #3195 (2.4.0) - IBA functions taking a
cspan<>
now more flexibly can be passed
an init list like{ 0.2f, 0.4f, 0.5f }
instead of needing to wrap it
in acspan<float>()
constructor. #3257 (2.3.12/2.4.0) make_texture()
: ensure that "maketx:ignore_unassoc" is honored.
#3269 (2.4.0.1/2.3.12)IBA::computePixelStats()
improved precision. #3353 (2.4.1.0/2.3.14)IBA::isConstantColor()
is faster -- now if one thread finds its
portion not constant, it can signal the other threads to stop
immediately instead of completing their regions. #3383 (2.4.1.1)- A new flavor of
IBA::compare()
allows relative as well as absolute
error thresholds. #3508 (2.3.19.0/2.4.2.2)
- Fix ImageBuf::read bug for images of mixed per-channel data types. #3088
- ImageCache / TextureSystem / maketx:
- 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 (2.4.0/2.3.10) - Enhance safety/correctness for untiled images that exceed 2GB size
(there was an integer overflow problem in computing offsets within
tiles). #3232 (2.3.11/2.4.0) - Improve error propagation from ImageCache to higher levels, especially
for tile-reading errors encountered during ImageBuf iterator use, and
ImageCache errors encountered when using the TextureSystem. #3233
(2.4.0) - Support an additional UDIM pattern
<UVTILE>
, which is specified by
MaterialX. #3280 #3285 (2.3.12/2.4.0.1) - Add support for UDIM pattern
<uvtile>
(used by Clarisse & V-Ray). #3358
(2.4.1.0/2.3.14) - The
maketx --handed
option, oroiiotool -attrib -otex:handed=...
, or
adding "handed" metadata to the configuration ImageSpec being passed to
IBA::make_texture()
is now supported for communicating the handedness
of a vector displacement or normal map. #3331 (2.4.0.2) - Speed up UDIM lookups by eliminating internal mutex. #3417 (2.4.0)
- TextureSystem: Fix typo that prevented "max_tile_channels" attribute from
being set or retrieved. (2.4.2/2.3.17)
- When textures are created with the "monochrome_detect" feature enabled,
- oiiotool:
--ch
now has virtually no expense if the arguments require no change
to the channel order or naming (previously, it would always incur an
image allocation and copy even if no real work needed to be done). #3068
(2.4.0/2.3.8)--ch
now warns if you specify a channel name that was not present
in the input image. #3290 (2.4.0.1)--runstats
timing report has been improved and now more accurately
attributes time to each operation. In particular, input I/O is now
credited to "-i" rather than being incorrectly attributed to the other
ops that happen to trigger I/O of previously mentioned files. #3073
(2.4.0/2.3.8)- Allow quotes in command modifiers. #3112 (2.4.0/2.3.9)
- Fix
--dumpdata
getting the formatting of floating point values wrong.
#3131 (2.4.0/2.3.9) --dumpdata:C=name
causes the dumped image data to be formatted with
the syntax of a C array. #3136 (2.4.0/2.3.9)--noise
now takes "blue" as an additional noise type. #3141
(2.4.0/2.3.10)-d
now accepts "uint1", "uint2", "uint4", and "uint6" for formats that
support such low bit depths (TIFF). #3141 (2.4.0/2.3.10)--invert
fixed to avoid losing the alpha channel values. #3191
(2.4.0/2.3.10)- Fix bug when autocropping output images when the entire pixel data
window is in the negative coordinate region. #3164 (2.4.0/2.3.10) - Improved detection of file reading failures. #3165 (2.4.0/2.3.10)
- All commands that do filtering (--rotate, --warp, --reize, --fit, and
--pixelaspect) now accept optional modifier:highlightcomp=1
to enable
"highlight compensation" to avoid ringing artifacts in HDR images with
very high-contrast regions. #3239 (2.4.0) --pattern checker
behavior has changed slightly: if the optional
modifier:width=
is specified but:height=
is not, the height will
be equal to the width. #3255 (2.4.0)--pixelaspect
fixes setting of the "PixelAspectRatio", "XResolution",
and "YResolution" metadata, they were not set properly before. #3340
(2.4.0.3)- Fix bug that prevented metadata from being able to print as XML. #3499
(2.4.2.2) i:ch=...
fixes crashes, and also improves the warning message in cases
where the requested channels don't exist in the source image. #3513
(2.4.2.2)
- Python bindings:
- Subtle/asymptomatic bugs fixed in
ImageBufAlgo.color_range_check()
and
histogram()
due to incorrect release of the GIL. #3074 (2.4.0) - Bug fix for
ImageBufAlgo.clamp()
: when just a float was passed for the
min or max, it only clamped the first channel instead of all channels.
#3265 (2.3.12/2.4.0) - Fix the ability to
getattribute()
of int64 and uint64 metadata or
attributes. #3555 (2.4.4.0)
- Subtle/asymptomatic bugs fixed in
- idiff:
--allowfailures
allows that number of failed pixels of any magnitude.
#3455 (2.4.2)--failrelative
and--warnrelative
allows the failure and warning
threshold to use a symmetric mean relative error (rather than the
absolute error implied by the existing--fail
and--warn
arguments).
#3508 (2.3.19.0, 2.4.2.2)
- BMP:
- IOProxy support. #3223 (2.4.0)
- Support for additional (not exactly fully documented) varieties used by
some Adobe apps. #3375 (2.4.1.0/2.3.14) - Better detection of corrupted files with nonsensical image dimensions or
total size. #3434 (2.4.2/2.3.17/2.2.21) - Protect against corrupted files that have palette indices out of bound.
#3435 (2.4.2/2.3.17/2.2.21)
- DDS:
- Don't set "texturetype" metadata, it should always have been only
"textureformat". Also, add unit testing of DDS to the testsuite. #3200
(2.4.0/2.3.10) - IOProxy support. #3217 (2.4.0)
- Add support for BC4-BC7 compression methods. #3459 (2.4.2)
- Speed up reading of uncompressed DDS images (by about 3x). #3463
- Better handling of cube maps with MIPmap levels. #3467 (2.4.0)
- For 2-channel DDS files, label them as Y,A if the flags indicate
luminance and/or alpha, otherwise label them as R,G. #3530 (2.4.2.2) - Do not set "oiio:BitsPerSample" for cases where the dds.fmt.bpp field is
not assumed to be valid. MS docs say it's valid only if the flags field
indicates RGB, LUMINANCE, or YUV types. #3530 (2.4.2.2)
- Don't set "texturetype" metadata, it should always have been only
- FFMpeg
- GIF
- IOProxy support. #3181 (2.4.0/2.3.10)
- HDR:
- IOProxy support. #3218 (2.4.0)
- HEIF:
- Handle images with unassociated alpha. #3146 (2.4.0/2.3.9)
- JPEG:
- IOProxy support. #3182 (2.4.0/2.3.10)
- Better handling of PixelAspectRatio. #3366 (2.4.1.0)
- Fix multithreaded race condition in read_native_scanline. #3495
(2.4.2.2) - Fix bug in XRes,YRes aspect ratio logic. #3500 (2.4.2.2)
- When asked to output 2-channel images (which JPEG doesn't support), use
the channel names to decide whether to drop the second channel (if it
seems to be a luminance/alpha image) or add a third black channel (other
cases). #3531 (2.4.2.2)
- JPEG2000:
- 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 (2.4.0/2.3.9.1) - Fix excessive memory usage when saving EXR files with many channels.
#3176 (2.4.0/2.3.10) - 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 (2.4.0/2.3.10) Fixes in
#3387 (2.4.1.1) - Fix writing deep exrs when buffer datatype doesn't match the file. #3369
(2.4.1.0/2.3.14)
- When building against OpenEXR 3.1+ and when the global OIIO attribute
- PNG:
- Assume sRGB color space as default when no color space attribute is
in the file. #3321 (2.4.0.2/2.3.13) - Improve error detection and propagation for corrupt/broken files. #3442
(2.4.2) - Improve error detection and messages when writing PNG files, for various
kinds of errors involving metadata. #3535 (2.4.2.2)
- Assume sRGB color space as default when no color space attribute is
- PPM:
- Mark all PPM files as Rec709 color space, which they are by
specification. #3321 (2.4.0.2/2.3.13)
- Mark all PPM files as Rec709 color space, which they are by
- PSD:
- RAW:
- RLA:
- Better guards against malformed input. #3163 (2.4.0/2.3.10)
- Targa:
- Improved error detection for read errors and corrupted files. #3120
(2.4.0/2.3.9.1) #3162 (2.4.0/2.3.10) - Fixed bug when reading x-flipped images. #3162 (2.4.0/2.3.10)
- IOProxy support. #3221 (2.4.0)
- 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 (2.4.0.1/2.3.12) - Fix parsing of TGA 2.0 extension area when the software name was
missing form the header. #3323 (2.4.0.2/2.3.13) - Fix reading of tiny 1x1 2-bpp Targa 1.0 images. #3433 (2.3.17/2.2.21)
- Improved error detection for read errors and corrupted files. #3120
- Socket imageio plugin has been removed entirely, it never was completed or
did anything useful. #3527 (2.3.2.2) - TIFF:
- IOProxy is now supported for TIFF output. #3075 (2.4.0/2.3.8)
- Honor zip compression quality request when writing TIFF. #3110
(2.4.0/2.3.11) - Automatically switch to "bigtiff" format for really big (> 4GB) images.
#3158 (2.4.0) - Support for palette images with 16 bit palette indices. #3262
(2.4.0/2.3.12) - Gracefully handle missing ExtraSamples tag. #3287 (2.4.0.1/2.3.12)
- New output configuration hint: "tiff:write_extrasamples" (default: 1),
if set to 0, will cause the TIFF output to NOT include the required
EXTRASAMPLES tag in the header. This is not recommended, but fixes
a specific problem in some circumstances where PhotoShop misbehaves
when the extrasamples tag is present. #3289 (2.4.0.1) - No longer write IPTC blocks to the TIFF header by default, it caused
trouble and was sometimes corrupted. You can force it to write an IPTC
block by using the output open configuration hint "tiff:write_iptc" set
to nonzero. #3302 (2.4.0.1) - Fix read problems with TIFF files with non-zero y offset. #3419
(2.3.17/2.4.2) - Fixed some longstanding issues with IPTC data in the headers. #3465
(2.4.0) - Protect against crashes with certain empty string attributes. #3491
(2.4.2.1)
- WebP:
- Better catching of exceptions thrown by OCIO 1.x if it encounters 2.0 config
files. #3089 (2.4.0/2.3.9) - Improved internal logic and error reporting of missing OCIO configs. #3092
#3095 - 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 (2.4.0/2.3.8) - Fix crash that could happen with invalidly numbered UDIM files. #3116
(2.4.0/2.3.9) - Fix possible bad data alignment and SIMD assumptions inside TextureSystems
internals. #3145 (2.4.0/2.3.9) - Update internal stb_printf implementation (avoids some sanitizer alerts).
#3160 (2.4.0/2.3.10) - Replace the few remaining instances of
sscanf
in the codebase with Strutil
utilities that are guaranteed to be locale-independent. #3178 (2.4.0) - 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 (2.3.11/2.4.0) - Fix integer overflow warnings. #3329 (2.4.1.0)
- Improved behavior when opening a file whose format doesn't correctly match
its extension: try common formats first, rather than alphabetically; and
improve error messages. #3400 (2.4.2) - The maximum number of threads you can set with option "oiio:threads"
has been increased from 256 to 512. #3484 (2.4.2.1) - Make access to the internal imageio_mutex not be recursive. #3489 (2.4.2.2)
- Various protections against string metadata found in file that has zero
length. #3493 (2.4.2.2) - Fix possible null pointer dereference in inventory_udim. #3498 (2.4.2.2)
- oiiotool, maketx, iinfo, igrep, and iv now all take a
--version
command
line argument, which just prints the OIIO version and exits. #3534
Developer goodies / internals:
- benchmark.h:
- Alter the declaration of DoNotOptimize() so that it doesn't have
compilation problems on some platforms. #3444 (2.4.2/2.3.17)
- Alter the declaration of DoNotOptimize() so that it doesn't have
- filesystem.h:
- fmath.h:
- Added
round_down_to_multiple()
. Also, more correctly handle
round_to_multiple()
results when the value is < 0. #3104 - Add
round_down_to_multiple()
and improveround_to_multiple()
to
correctly handle cases where the value is less than 0. #3104
(2.4.0/2.3.8) - Make bit_cast specialization take refs, like the template. This fixes
warnings for some compilers. #3213 (2.4.0/2.3.10.1)
- Added
- imageio.h:
- Imath.h:
- In addition to including the right Imath headers for the version that
OIIO is built with, this defines custom formatters for the Imath types
for use with fmt::format/print or Strutil::format/print. #3367 (2.4.1.0)
- In addition to including the right Imath headers for the version that
- oiioversion.h
OIIO_MAKE_VERSION_STRING
andOIIO_VERSION_STRING
now print all 4
version parts. #3368 (2.4.1.0)
- parallel.h
- Refactoring of the entry points (back compatible for API), and add
support for using TBB for the thread pool (which seems slightly faster
than our internal thread pool). By default it still uses the internal
pool, but if OIIO::attribute("use_tbb") is set to nonzero, it will use
the TBB thread pool if built against TBB. #3473 (2.4.2.2) #3566
(2.4.4.0)
- Refactoring of the entry points (back compatible for API), and add
- paramlist.h
- Various internal fixes that reduce the amount of ustring construction
that happens when constructing ParamValue and ParamList, and making
certain ImageSpec::attribute() calls. #3342 (2.4.1.0)
- Various internal fixes that reduce the amount of ustring construction
- simd.h:
- Better guards to make it safe to include from Cuda. #3291 #3292
(2.4.0.1/2.3.12) - Fix compiler warnings related to discrepancies between template
declaration and redeclaration in simd.h. #3350 (2.4.1.0/2.3.14) - The vector types all now have a
size()
method giving its length.
#3367 (2.4.1.0) - Defines custom formatters for the vector and matrix types, for use
with fmt::format/print or Strutil::format/print. #3367 (2.4.1.0)
- Better guards to make it safe to include from Cuda. #3291 #3292
- string_view.h
- strutil.h:
- New utility functions: parse_values(), scan_values(), scan_datetime()
#3173 #3177 (2.4.0/2.3.10), edit_distance() #3229 (2.4.0/2.3.11) - The
utf8_to_utf16()
andut16_to_utf8()
utilities are now exposed on
all platforms, not just windows (and their internals have been
modernized). #3307 (2.4.0.1) Strutil::isspace()
is a safe alternative to C isspace(), that works
even for signed characters. #3310 (2.4.1.0)Strutil::print()
now is buffered (and much more efficient, and
directly wraps fmt::print). A newStrutil::sync::print()
is a version
that does a flush after every call. #3348 (2.4.1.0)get_rest_arguments()
fixes conflict between RESTful and Windows long
path notations. #3372 (2.4.1.0/2.3.14)- Dramatically speed up (50-100x) Strutil iequals, iless, starts_with,
istarts_with, ends_with, iends_with. #3388 (2.4.1.1) - New
safe_strcat
is a buffer-length-aware safe replcement for strcat.
#3471 (2.4.0/2.3.18) Strutil::debug()
is the new OIIO::debug(), moving it from
libOpenImageIO to libOpenImageIO_Util. #3486 (2.4.2.1)- New
Strutil::safe_strlen()
is a portable safe strlen replacement.
#3501 (2.4.2.2)
- New utility functions: parse_values(), scan_values(), scan_datetime()
- sysutil.h:
- The
Term
class now recognizes a wider set of terminal emulators as
supporting color output. #3185 (2.4.0)
- The
- timer.h:
- typedesc.h:
- type_traits.h:
- This new header contains a variety of type traits used by other OIIO
headers. They aren't really part of the public API, but they are sometimes
used by public headers. #3367 (2.4.1.0)
- This new header contains a variety of type traits used by other OIIO
- unittest.h:
- Changes
OIIO_CHECK_SIMD_EQUAL_THRESH
macro to compare<= eps
instead of<
. #3333 (2.4.0.3)
- Changes
- unordered_map_concurrent.h: Fix bug in
erase()
method. #3485 (2.4.2.2) - ustring.h:
- vecparam.h:
- New
V3fParam
,M33fParam
, andM44fParam
(defined in vecparam.h) are
used just for parameter passing in public APIs, instead of Imath::V3f,
M33f, or M44f, in order to more fully hide Imath types from our public
interfaces. These are only parameter-passing classes, and are not useful
as vector or matrix classes in their own right. But they seamlessly cast
to and from other vector- and matrix-like classes. #3330 (2.4.1.0)
- New
- More internals conversion to use the new fmt style for string formatting,
console output, error messages, and warnings: oiiotool internals #3240
(2.4.0); TS/IC stats output #3374 (2.4.1.0); misc #3777 (2.4.1.0); testshade
#3415 (2.4.2) - Internals are working toward removing all uses of string_view::c_str(),
since that isn't part of C++17 std::string_view. #3315 (2.4.0.1) - New testtex options:
--minthreads
sets the minimum numer of threads that
will be used for thread wedges,--lowtrials
is an optional maximum number
of trials just for the 1 or 2 thread cse. #3418 (2.4.2) - Internals: internal classes with vertual methods now mark all their
overridden destructors correctly asoverride
. #3481 (2.4.2.1) #3488 #3511
(2.4.2.2)
Build/test system improvements and platform ports:
- CMake build system and scripts:
- Remove the old FindOpenImageIO.cmake module; downstream clients should
instead use our exported configs. #3098 (2.4.0/2.3.8) - Fix over-use of targets when we should have been using variables. #3108
(2.4.0/2.3.9) - CMake variable
-DENABLE_INSTALL_testtex=1
causestesttex
to be
installed as an application. #3111 (2.4.0) - Make
OpenImageIO_SUPPORTED_RELEASE
into a CMake cache variable so it
can be overridden at build time. #3142 (2.4.0) - New build option
-DTIME_COMMANDS=ON
will print time to compile each
module (for investigating build performance; only useful when building
withCMAKE_BUILD_PARALLEL_LEVEL=1
). #3194 (2.4.0/2.3.10) PROJECT_VERSION_RELEASE_TYPE
is now a cache variable that can be
overridden at build time. #3197 (2.4.0/2.3.10)- Set and use the variable
PROJECT_IS_TOP_LEVEL
to know if OIIO is a
top level project or a subproject. #3197 (2.4.0/2.3.10) - Restore code that finds Jasper when using statically-linked libraw.
#3210 (2.4.0/2.3.10.1) - Gracefully handle failing to find git for test data download. #3212
(2.4.0/2.3.10.1) - Make sure to properly use the tbb target if it exists. #3214
(2.4.0/2.3.10.1) - Use a project-specific "OpenImageIO_CI" for whether we're running in CI,
rather than the confusingly generic "CI" #3211 (2.4.0/2.3.11) - If CMake variable
BUILD_TESTING
is OFF, don't do any automatic
downloading of missing test data. #3227 (2.3.11/2.4.0) - 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 (2.4.0.1/2.3.12) - Fix problems with FindOpenEXR build script for Windows. #3281
(2.4.0.1/2.3.12) - New CMake cache variable
DOWNSTREAM_CXX_STANDARD
specifies which C++
standard is the minimum for downstream projects (currently 14), which
may be less than theCMAKE_CXX_STANDARD
that specifies which C++
standard we are using to build OIIO itself. #3288 (2.4.0.1) - The exported cmake configs now use relative paths so they are
relocatable. #3302 (2.4.0.1) - CMake variable
OPENIMAGEIO_CONFIG_DO_NOT_FIND_IMATH
, if set to ON,
will make our generated config file not do a find_dependency(Imath).
(Use with caution.) #3335 (2.4.0.3) - Can now do unity/jumbo builds. This isn't helpful when building with
many cores/threads, but in thread-limited situtations (such as CI), it
can speed up builds a lot to use-DCMAKE_UNITY_BUILD=ON
. #3381 #3389
#3392 #3393 #3398 #3402 (2.4.2.0) - Do not auto-download test images by default. To auto download test
images, build with-DOIIO_DOWNLOAD_MISSING_TESTDATA=ON
. #3409 (2.4.0) - Allow using the Makefile wrapper on arm64 systems. #3456 (2.4.2)
- The export OpenImageIOConfig.cmake fixes
OpenImageIO_INCLUDE_DIR
to
work correctly on Debian systems where there are multiple filesystem
components to the path. #3487 (2.4.2.1) - On MacOS, do not force MACOS_RPATH on. #3523 (2.4.2.2)
- Improvements to the generated cmake config files when building static
libraries. #3552 #3557 (2.4.4.0)
- Remove the old FindOpenImageIO.cmake module; downstream clients should
- Dependency version support:
- When using C++17, use std::gcd instead of boost. #3076 (2.4.0)
- When using C++17, use
inline constexpr
instead of certain statics.
#3119 (2.4.0) - Fixes to work with the libraw 202110 snapshot. #3143 (2.4.0/2.3.9.1)
- Fix occasional build breaks related to OpenCV headers. #3135
(2.4.0/2.3.9) - The internals of
Filesystem::searchpath_split
have been reimplemented
in such a way as to no longer need boost.tokenzer. #3154 (2.4.0/2.3.10) - Deal with the fact that OpenColorIO has changed its default branch
name to "main". #3169 (2.4.0/2.3.10/2.2.20) - pybind11 v2.9.0 incorporated into our testing and CI. #3248
- Fix clang10 compile warnings. #3272 (2.4.0.1/2.3.12)
- Support for ffmpeg 5.0. #3282 (2.4.0.2/2.3.13)
- Support for fmtlib 9.0.0. #3327 (2.4.0.2/2.3.13) #3466 (2.4.2/2.3.18)
build_opencolorio.bash
helper script bumped its default build of
OpenColorIO to 2.1.2. #3475 (2.4.2.1)- When building with C++17 or higher, Boost.filesystem is no longer
needed or used. #3472 #3477 (2.4.2.1) - Upgrade the internal fallback implemention of PugiXML to the latest
version. #3494 (2.4.2.2) - Fixes for ffmpeg 5.1 detection. #3516 (2.3.19.0/2.4.2.2)
- Support for gcc 12.1. #3480 (2.4.2.1) #3551 (2.4.4.0)
- Support building with clang 15.0. #3563 (2.4.4.0)
- Testing and Continuous integration (CI) systems:
- Properly test against all the versions of VFX Platform 2022. #3074
(2.4.0) - The helper script
build_libtiff.bash
now allows you to override the
build type (by settingLIBTIFF_BUILD_TYPE
) and also bumps the default
libtiff that it downloads and builds from 4.1.0 to 4.3.0. #3161 (2.4.0) - New tests on MacOS 11 #3193 (2.4.0/2.3.10) and MacOS 12, remove test on
MacOS 10.15 (GitHub Actions is imminently removing MacOS 10.15). #3528
(2.3.19.0/2.4.2.2) - Add a DDS test (we never had one before). #3200 (2.4.0/2.3.10)
imageinout_test
now has options to make it easy to unit test just one
named format, as well as to preserve the temp files for inspection.
#3201 (2.4.0/2.3.10)- Add an HDR test (we never had one before). #3218 (2.4.0)
- Fix bugs in the build_opencolorio.bash script, did not correctly handle
installation into custom directories. #3278 (2.4.0.1/2.3.12) - Failed build artifact storage is revised to save more cmake-related
artifacts to help debugging. #3311 (2.4.0.1) - Now doing CI builds for Intel icc and icx compilers. #3355 #3363
(2.4.1.0/2.3.13) #3407 (2.4.0) - Overhaul of ci.yml file to be more clear and compact by using GHA
"strategy" feature. #3356 #3365 (2.4.1.0/2.3.13) - Removed CI for windows-2016 GHA instance which will soon be removed.
#3370 (2.4.1.0) - Test against clang 14. #3404
- Various guards against supply chain attacks durig CI. #3454 (2.4.2)
- Test against pybind11 v2.10. #3478 (2.4.2.1)
- Run SonarCloud nightly for static analysis and coverage analysis. #3505
(2.4.2.2)
- Properly test against all the versions of VFX Platform 2022. #3074
- Platform support:
- Fix when building with Clang on big-endian architectures. #3133
(2.4.0/2.3.9) - Improvements to NetBSD and OpenBSD support. #3137. (2.4.0/2.3.9)
- Fixes for MSVS compile. #3168 (2.4.0/2.3.10)
- Fix problems on Windows with MSVC for Debug builds, where crashes were
occurring insideisspace()
calls. #3310 - Improved simd.h support for armv7 and aarch32. #3361 (2.4.1.0/2.3.14)
- Suppress MacOS wasnings about OpenGL deprecation. #3380 (2.4.1.0/2.3.14)
- Fix MSVS/Windows errors. #3382 (2.4.1.1)
- Fix cross-compiling on Android failing due to
-latomic
check. #3560
(2.4.4.0) - Fix building on iOS. #3562 (2.4.4.0)
- Fix when building with Clang on big-endian architectures. #3133
Notable documentation changes:
- Add an oiiotool example of putting a border around an image. #3138
(2.4.0/2.3.9) - Fix explanation of ImageCache "failure_retries" attribute. #3147
(2.4.0/2.3.9) - Improved maketx argument explanations.
- Clean up intra-document section references. #3238 (2.3.11/2.4.0)
- New explanations about input and output configuration hints. #3238
(2.3.11/2.4.0) - More code examples in both C++ and Python (especially for the ImageInput,
ImageOutput, and ImageBufAlgo chapters). #3238 #3244 #3250 (2.3.11/2.4.0)
#3263 (2.3.12/2.4.0) - Pretty much anyplace where a parameter that represents a filename, and it is
supporting UTF-8 encoding of Unicode filenames, the docs for that function
explicitly say that the string is assumed to be UTF-8. #3312 (2.4.0.1) - Fix many typos in docs. #3492 (2.4.2.2)