Releases: AcademySoftwareFoundation/OpenImageIO
OpenImageIO v2.3.21.0
Release 2.3.21 (1 Nov 2022) -- compared to 2.3.20
- oiiotool: protect against OpenEXR thread deadlock on Windows. #3582
- oiiotool: work around static destruction order issue. #3591
- Fix PSD import on ARM. #3589
- Docs: write Windows build instructions in INSTALL.md. #3602
- RLA: fix potential buffer overrun. (TALOS-2022-1629, CVE-2022-36354) #3624
- TIFF: guard against corrupt files with buffer overflows. (TALOS-2022-1627,
CVE-2022-41977) #3628 - TIFF: guard against buffer overflow for certain CMYK files.
(TALOS-2022-1633, CVE-2022-41639) (TALOS-2022-1643, CVE-2022-41988) #3632
OpenImageIO v2.4.4.2
OpenImageIO v2.4.4.1
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:
OpenImageIO v2.3.20.0
Release 2.3.20 (1 Oct 2022) -- compared to 2.3.19
- Fixes to compile with gcc 12. #3551
- Fixes to compile with clang 15. #3563
- PNG: better error handling when errors are encountered while writing. #3535
The 2.3 family is now considered the OBSOLETE (semi-supported) branch. From here on out, additional patch releases to 2.3 will be small, increasingly infrequent, and focused on fixing truly critical bugs or keeping up with being able to build with new versions of compilers and dependencies. Over the coming months we will transition to eventually no longer updating 2.3 at all. At your earliest convenience, you are encouraged to upgrade to 2.4.
OpenImageIO v2.4.4.0-RC2
Changes since RC1:
- ImageCache/TextureSystem both have added a
getattributetype()
method, which retrieves just the type of a named attribute. #3559
(2.4.4.0) NOTE: THIS IS AN ABI BREAKING CHANGE - Python: Fix the ability to
getattribute()
of int64 and uint64
metadata or attributes. #3555 (2.4.4.0) - Build: Improvements to the generated cmake config files when
building static libraries. #3552 #3557 (2.4.4.0) - 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)
- Fix cross-compiling on Android failing due to
-latomic
check. #3560
(2.4.4.0) - Fix building on iOS. #3562 (2.4.4.0)
OpenImageIO v2.4.3.0-RC1
Release candidate for v2.4. We anticipate a full release on
September 15. Please consult the CHANGES.md for a full
list of improvements between the first 2.3 release and 2.4.
OpenImageIO v2.4.3.0-beta
This is the beta release of 2.4. We anticipate a full release on
September 15. Please consult the CHANGES.md for a full
list of improvements between the first 2.3 release and 2.4.
v2.3.19.0
Release 2.3.19 (1 Sep 2022) -- compared to 2.3.18
- idiff:
--allowfailures
allows the specified number of pixels to differ by
any amount, and still consider the images to compare successfully. #3455 - idiff:
--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 - A new flavor of
ImageBufAlgo::compare()
allows relative as well as
absolute error thresholds. #3508 - Build: Fixes for ffmpeg 5.1 detection. #3516
- Build: suppress incorrect warnings for gcc 12. #3524
- CI: New test on MacOS 12, remove test on MacOS 10.15 (GitHub Actions is
imminently removing MacOS 10.15). #3528 - oiiotool, maketx, iinfo, igrep, and iv now all take a
--version
command
line argument, which just prints the OIIO version and exits. #3534 OIIO::getattribute("version")
now retrieves the version string. #3534- Developer goodies:
ArgParse::add_version(str)
tells ArgParse the version
string, which will automatically add an option--version
. #3534
OpenImageIO v2.3.18.0
Release 2.3.18 (1 Aug 2022) -- compared to 2.3.17
- Windows: Allow loading of dlls from PATH on Python 3.8+. #3470
- JPEG: Fix a race condition in read_native_scanline. #3495
- JPEG: Fix aspect ratio logic. #3500
- Bug fix: incorrect assignment of oiio_missingcolor attribute. #3497
- Bug fix: possible null pointer dereference in inventory_udim(). #3498
- Bug fix: print_info_subimage botched condition. #3499
- CI: Test against fmt 9.0.0. #3466
- CI: Test against pybind11 v2.10. #3478
- Strutil: safe_strcat() #3471 and safe_strlen() #3501
- Change build_opencolorio.bash to default to OCIO 2.1.2. #3475
OpenImageIO v2.3.17.0
Release 2.3.17 (1 Jul 2022) -- compared to 2.3.16
- TIFF: fix read problems with TIFF files with non-zero y offset. #3419
- Targa: Fix reading of tiny 1x1 2-bpp Targa 1.0 images. #3433 (2.3.17/2.2.21)
(2.3.17/2.2.21) - BMP: better detection of corrupted files with nonsensical image dimensions
or total size. #3434 (2.3.17/2.2.21) - BMP: protect against corrupted files that have palette indices out of bound.
#3435 (2.3.17/2.2.21) - TextureSystem: Fix typo that prevented "max_tile_channels" attribute from
being set or retrieved. (2.3.17) - ustring.h: ustring has added a from_hash() static method #3397, and a
ustringhash helper class #3436. (2.3.17/2.2.21) - benchmark.h: Alter the declaration of DoNotOptimize() so that it doesn't
have compilation problems on some platforms. #3444 (2.3.17) - Fix crash when ioproxy is passed to an image writer that doesn't support it.
#3453 (2.3.17) - Fix the "Makefile" wrapper to correctly recognize arm64 ("Apple silicon").
#3456 (2.3.17)