Releases: AcademySoftwareFoundation/OpenImageIO
OpenImageIO v2.4.9.0
Release 2.4.9.0 (1 Mar 2023) -- compared to 2.4.8.1
- Build: check need for libatomic with check_cxx_source_compiles instead of
the more expensive check_cxx_source_runs. #3774 - Fix(IC): Avoid bad IC stats when no files were read. #3765
- Build: Add a cmake option OIIO_DISABLE_BOOST_STACKTRACE to disable use and
dependency of boost stacktrace. #3777 - ustringhash: Make an explicit constructor from a hash value. #3778
- Build: Add ability to build against Qt6. #3779
OpenImageIO v2.4.8.1
Release 2.4.8.1 (13 Feb 2023) -- compared to 2.4.8.0
- Fix(targa): guard against corrupted tga files Fixes TALOS-2023-1707 /
CVE-2023-24473, TALOS-2023-1708 / CVE-2023-22845. #3768 - Fix: race condition in TIFF reader, fixes TALOS-2023-1709 / CVE-2023-24472.
#3772 - Windows: Fix unresolved external symbol for MSVS 2017 #3763
- Fix: Initialize OpenEXROutput::m_levelmode in init(). #3764
- Fix: improve thread safety for concurrent tiff loads. #3767
- Fix(fits): Make sure to close if open fails to find right magic number.
#3771
OpenImageIO v2.4.8.0
Release 2.4.8.0 (1 Feb 2023) -- compared to 2.4.7.1
- oiiotool --pdiff: test, be sure to count it as making output. #3723
- IBAprep should not zero out deep images when creating dst #3724
- PBM: Fix for incorrect inverting of 1-bit pbm images. #3731
- New
ImageSpec:set_colorspace()
sets color space metadata in a consistent
way. #3734 - BMP: set colorspace to sRGB #3701
- PNG: Add EXIF support when writing PNG files. #3735
- PSD: Fix wrong oiio:UnassociatedAlpha metadata for PSD files. #3750
- platform.h: set up macros for detecting MSVS 2019 and 2022 #3727
- typedesc.h: Extend TypeDescFromC template to the full set of pixel types
#3726 - Testing: many improvements for testing and code coverage. #3730 #3654 #3694
#3699 #3732 #3741 #3745 #3747 - Testing: Fix long-broken ref images for texture-icwrite test #3733
- Docs: Updated RTD docmentation style, looks much nicer. #3737
- Docs: improve description of ociodisplay and others.
- Docs: Fix old release notes to document all CVEs addressed in certain
prior releases.
OpenImageIO v2.4.7.1
OpenImageIO v2.4.7.0
Release 2.4.7.0 (1 Jan 2023) -- compared to 2.4.6.0
- IOMemReader detects and errors for out-of-range read positions. #3712
- Build/Mac: Suppress some deprecation warnings when building wth the newest
Apple clang. #3709 #3710 - ARM: Fix signed/unsigned SIMD mismatch in vbool4::load. #3722
- Build: New CMake variable
INTERNALIZE_FMT
, when set to OFF will ensure
that the fmt headers are not internalized (copied to the installed part
of OIIO). The default is ON, matching old behavior. #3598 - Testing: Improved testing of iinfo #3688 #3706, 'term' output #3714, igrep
#3715. - build_openexr.bash: bump default version of OpenEXR/Imath retrieved to be
3.1.5. #3703 - span.h: Make sure the cspan alias also allows the Extent template
argument; add a custom formatter to print spans. #3685 - ustring.h:
#if
guards to let the header be Cuda-safe. #3718 - Internals: refactoring to remove duplicated code for iinfo and
oiiotool --info
. #3688 - Internals: remove the last instances of unsafe std::sprintf. #3705
OpenImageIO v2.4.6.0
Release 2.4.6 (1 Dec 2022) -- compared to 2.4.5.0
- make_texture / maketx : ensure proper setting of certain metadata when
using a texture as a source to build another texture. #3634 - Build: Make sure use of
${PROJECT_NAME}
doesn't occur before the call to
project()
. #3651 - Fix null pointer dereference when OCIO no configuration is found. #3652
- Support for building against OpenColorIO 2.2. #3662
- Fixes to subtle bugs when ImageBuf is used with IOProxy. #3666
- oiiotool: Fix problems with
--point
when there is no alpha channel. #3684 - oiiotool:
--dumpdata
fix channel name output. #3687 - BMP: Fix possible write errors, fixes TALOS-2022-1653 / CVE-2022-43594,
CVE-2022-43595. #3673 - DPX: Fix possible write errors, fixes TALOS-2022-1651 / CVE-2022-43592 and
TALOS-2022-1652 / CVE-2022-43593. #3672 - IFF files: Add IOProxy support. #3647
- IFF: Fix possible write errors, fixes TALOS-2022-1654 / CVE-2022-43596,
TALOS-2022-1655 / CVE-2022-43597 CVE-2022-43598, TALOS-2022-1656 /
CVE-2022-43599 CVE-2022-43602 #3676 - PSD: Fix thumbnail extraction. #3668
- PSD: when reading, don't reject padded thumbnails. #3677
- Raw: Update Exif orientation if user flip is set. #3669
- Zfile write safety, fixes TALOS-2022-1657 / CVE-2022-43603. #3670
- filesystem.h: new
Filesystem::is_executable()
andfind_program()
. #3638 - filesystem.h: Change IOMemReader constructor to take a const buffer
pointer. #3665 - strutil.h: new
trimmed_whitspace()
. #3636 - New
OIIO::print()
exposesStrutil::print()
in the main OIIO namespace.
#3667 - Testing: improved testing of oiiotool #3637 #3643 #3649, Strutil #3655
OpenImageIO v2.4.5.0
Release 2.4.5 (1 Nov 2022) -- compared to 2.4.4.2
- oiiotool: new commands
--iccread
reads a named file and adds its contents
as the ICCProfile metadata of the top image,--iccwrite
saves the
ICCProfile metadata of the top file to a named file. #3550 - TIFF, JPEG, JPEG-2000, PNG, and PSD files containing ICC profiles now
extract and report extra metadata related to aspects of those profiles.
#3554 - Python: support
int8[]
metadata and retrieving theICCPorofile
metadata.
#3556 - oiiotool: New expression syntax for retrieving metadata
{TOP[foo]}
is
similar to the existing{TOP.foo}
, if there is nofoo
metadata found,
the former evaluates to an empty string, whereas the latter is an error.
#3619 - Strutil: new
utf16_to_utf8(const std::u16string&)
and
Strutil::utf8_to_utf16wstring()
. #3553 - ustring: make
std::hash
work for ustring, addoperator<
for ustringhash,
addfrom_hash()
to ustringhash, make ustringhash==
and!=
be
constexpr for C++17 and beyond. #3577 Custom fmt formatter for ustringhash
that prints the string rather than the hash. #3614 - Build: the version number is now a CMake cache variable that can be
overridden (caveat emptor). #3549 - Build/security: New CMake cache variable
FORTIFY_SOURCE
, if enabled,
builds with the specified gcc_FORTIFY_SOURCE
option defined. This may be
desirable for people deploying OIIO in security-sensitive environments.
#3575 - CI: testing now includes using undefined behavior sanitizer. #3565
- Windows: protect against OpenEXR thread deadlock on shutdown. #3582
- Windows: Work around a static destruction order issue. #3591
- Windows: define
NOGDI
to keep the inclusion of windows.h from adding as
many unneeded symbols. #3596 - MinGW: fix incorrect symbol visibility issue for ImageBuf iterators. #3578
- ARM: improve SIMD operations for ARM NEON. #3599
- Docs: New RELEASING.md documents our releasing procedures. #3564 #3580
- Docs: Better Windows build instructions in INSTALL.md. #3602
- Fix missing OIIO::getattribute support for
limits:channels
and
limits:imagesize_MB
. #3617 - BMP: fix reading 16bpp images. #3592
- BMP: protect against corrupt pixel coordinates. (TALOS-2022-1630,
CVE-2022-38143) #3620 - DDS: fix alpha/luminance files, better testing. #3581
- DDS: optimize loading of compressed images, improves 3-5x. #3583 #3584
- DDS: Fix crashes for cubemap files when a cube face was not present, and
check for invalid bits per pixel. (TALOS-2022-1634, CVE-2022-41838)
(TALOS-2022-1635, CVE-2022-41999) #3625 - HDR: fix a 8x (!) read performance regression for HDR files that was
introduced in OIIO in 2.4. #3588 On top of that, speed up by another 4x
beyond what we ever did before by speeding up the RGBE->float conversion.
#3590 - PNG: fix memory leaks when errors take an early exit. #3543 #3544
- PSD: fix a PSD read error on ARM architecture. #3589
- PSD: protect against corrupted embedded thumbnails. (TALOS-2022-1626,
CVE-2022-41794) #3629 - RAW: additional color metadata is now recognized:
pre_mul
,cam_mul
,
cam_xyz
,rgb_cam
. #3561 #3569 #3572 - RLA: fix potential buffer overrun. (TALOS-2022-1629, CVE-2022-36354) #3624
- Targa: string overflow safety. (TALOS-2022-1628, CVE-2022-4198) #3622
- TIFF/JPEG/PSD: Fix EXIF bugs where corrupted exif blocks could overrun
memory. (TALOS-2022-1626, CVE-2022-41794) (TALOS-2022-1632, CVE-2022-41684)
#3627 - 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.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: