Releases: AcademySoftwareFoundation/OpenImageIO
OpenImageIO 2.2.7.0
This is the latest monthly instalment of the current supported production release series. It is API and ABI compatible with prior 2.2 releases.
Release 2.2.7 (1 Oct 2020) -- compared to 2.2.6
- oiiotool new command:
--pastemeta
takes two images as arguments, and
appends all the metadata (only) from the first image onto the second
image's pixels and metadata, producing a combined image. #2708 - TIFF: Fix broken reads of multi-subimage non-spectral files (such as
photometric YCbCr mode). #2692 - Python: When transferring blocks of pixels (e.g.,
ImageInput.read_image()
orImageOutput.write_scanline()
), "half" pixels ended up mangled into
uint16, but now they use the correct numpy.float16 type. #2694 - Python: The value passed to
attribute(name, typedesc, value)
can now be
a tuple, list, numpy array, or scalar value. #2695 IBA::contrast_remap()
fixes bug that could crash for very large images
#2704- Warn about recommended minimum versions of some dependencies.
- Windows fix: correct OIIO_API declaration on aligned_malloc, aligned_free
of platform.h. #2701 - Fix oiiotool crash when --resize was used with multi-subimage files. #2711
- Bug fix in Strutil::splits and splitsv: when input is the empty string,
the split should return no pieces. #2712 - Support for libheif 1.9. #2724
- TIFF: Fix spec() and spec_dimensions() for MIPmapped TIFF files, they
did not recognize being asked to return the specs for invalid subimage
indices. #2723 - TIFF: add ability to output 1bpp TIFF files. #2722
OpenImageIO 2.1.20
Note that this is a bug-and-build fix release on the obsolete 2.1 release series.
Release 2.1.20 (1 Oct 2020) -- compared to 2.1.19
- Windows: make sure aligned_malloc and aligned_free are properly declared
as OIIO_API. #2701 - Support for libheif 1.8 and 1.9. #2685 #2724
- Fix crash in IBA::contrast_remap for very large images. #2704
- Bug fix in Strutil::splits and splitsv: when input is the empty string,
the split should return no pieces. #2712
OpenImageIO 2.2.6.1
Release 2.2 (1 Sept 2020) -- compared to 2.1
New minimum dependencies:
- pybind11 >= 2.4.2
- openjpeg >= 2.0 (if JPEG-2000 support is desired) #2555 (2.2.2)
New major features and public API changes:
- Improved IOProxy support:
- ImageInput and ImageOutput now have direct API level support for IOProxy
in theiropen()
andcreate()
calls, as well as a newset_ioproxy()
method in these classes. #2434 (2.2.0) - ImageBuf can now specify a proxy upon construction for reading, and for
writing via aset_write_ioproxy()
method that applies to subsequent
write
call. #2477 (2.2.1). - DPX input now supports IOProxy. #2659 #2665 (2.2.5)
- ImageCache (and ImageBuf backed by ImageCache) entries that use IOProxy
are careful not to fully "close" their proxies when trying to reclaim
space in the file cache (that would be bad, since the proxy can't be
re-opened). #2666 (2.2.5)
- ImageInput and ImageOutput now have direct API level support for IOProxy
- Improved support for multi-subimage files:
- oiiotool: Nearly all operations now allow an optional
:subimages=...
modifier that restricts the operation to be performed on only a subset
of named or indexed subimages. See docs for details. #2582 - Python
ImageBuf.write()
variety added that takes an open
ImageOutput
. This is the key to writing a multi-subimage file (such
as a multi-part OpenEXR) using the Python ImageBuf interface. #2640
(2.2.4) - Fixes to
--croptofull
and-o
with multi-subimages. #2684 (2.2.6)
- oiiotool: Nearly all operations now allow an optional
- Python bindings:
- Python bindings have been added for missing ParamValue constructors.
We previously exposed the PV constructors from just a plain int, float,
or string, but there wasn't an easy way to construct from arbitrary
data like there is in C++. Now there is. #2417 (2.2.0) ParamValueList.attribute()
, when being passed attributes containing
multiple values, now can have those values passed as Python lists and
numpy arrays (previously they had to be tuples). #2437 (2.1.11/2.2.0)ImageBufAlgo.color_range_check()
is now available to the Python
bindings (was previously only C++). #2602 (2.2.3)- New variety of
ImageBuf.write()
that takes an openImageOutput
.
This is the key to writing a multi-subimage file (such as a multi-part
OpenEXR) using the Python ImageBuf interface. #2640 (2.2.4)
- Python bindings have been added for missing ParamValue constructors.
- ImageBuf:
- Easier direct use of IOProxy with ImageBuf: constructor and reset()
for file-reading ImageBuf now take an optionalIProxy*
parameter,
and a newset_write_ioproxy()
method can supply an IOProxy for
subsequentwrite()
. #2477 (2.2.1) - Add
ImageBuf::setpixel()
methods that use cspan instead of ptr/len.
#2443 (2.1.10/2.2.0) - Add "missing"
reset()
varieties so that every IB constructor has a
correspondingreset()
with the same parameters and vice versa. #2460
- Easier direct use of IOProxy with ImageBuf: constructor and reset()
- ImageBufAlgo:
- ColorConfig: add OCIO "role" accessors. #2548
- Low-res I/O of images to terminals that support full color and Unicode
characters. Just output to a file ending in ".term", and it will convert
(on certain terminals) to an image displayed directly in the terminal.
#2631 (2.2.4)
Try:
oiiotool myfile.exr -o out.term
Performance improvements:
- Greatly improved TextureSystem/ImageCache performance in highly threaded
situations where access to the cache was a main bottlenecks. In renders of
scenes with lots of texture access, with dozens of threads all contending
for the cache, we are seeing some cases of 30-40% reduction in total
render time. In scenes that are less texture-bottlenecked, or that don't
use huge numbers of threads, the improvement is more modest. #2433 (2.2.0)
Fixes and feature enhancements:
- oiiotool:
- Intelligible error messages (rather than crashes) if you attempt to
create an image too big to fit in memory. #2414 (2.2.0) --create
and--proxy
take an additional optional modifier:
:type=name
that specifies the type of buffer to be created (the
default, as usual, is to create an internal float-based buffer). #2414
(2.2.0)-o
optional argument:type=name
is a new (and preferred) synonym
for what used to be:datatype=
. #2414 (2.2.0)--autotrim
now correctly trims to the union of the nonzero regions
of all subimages, instead of incorrectly trimming all subimages to the
nonzero region of the first subimage. #2497 (2.2.1.2)--subimage
now has an optional:delete=1
modifier that causes the
operation to delete one named or indexed subimage (versus the default
behavior of extracing one subimage and deleting the others). #2575
(2.2.3)- The list of dependent libraries (part of
oiiotool --help
) now
correctly reports the OpenEXR version. #2604 (2.2.3) - Fix:
--eraseattrib
did not correctly apply to all subimages when
-a
or:allsubimages=1
were used. #2632 (2.2.4)
- Intelligible error messages (rather than crashes) if you attempt to
- ImageBuf / ImageBufAlgo:
- Huge ImageBuf allocation failures (more than available RAM) now are
caught and treated as an ImageBuf error, rather than crashing with an
uncaught exception. #2414 (2.2.0) - ImageBuf constructors that are passed an ImageSpec (for creating an
allocated writable IB or "wrapping" a user buffer) now check that the
spec passed has enough information to know the size of the buffer
(i.e., it will be recognized as an error if the width, height, depth,
channels, or data type have not been set validly). #2460 - Fix:
ImageBuf::getchannel()
did not honor itswrap
parameter.
#2465 (2.2.1/2.1.12) - Fix:
IBA::reorient()
andIBA::computePixelHashSHA1()
did not honor
theirnthreads
parameter. #2465 (2.2.1/2.1.12) resample()
has been modified to more closely matchresize
by using
clamp wrap mode to avoid a black fade at the outer edge of the
resampled area. #2481- Fix:
ImageBuf::get_pixels()
did not honor the stride parameters.
#2487. (2.1.12/2.2.1) - Fix
resize()
to avoid a crash / stack overflow in certain cases of
very big images and very large filter kernels. #2643 (2.2.4) - Minor improvements to ImageBuf error formatting. #2653 (2.2.5)
- Huge ImageBuf allocation failures (more than available RAM) now are
- ImageCache / TextureSystem / maketx:
- New IC/TS attribute "trust_file_extensions", if nonzero, is a promise
that all files can be counted on for their formats to match their
extensions, which eliminates some redundant opens and format checks
in the IC/TS and can reduce needless network/filesystem work. Use with
caution! #2421 (2.2.0) - texture3d() fixed some cases where derivative results were not
correctly copied to the outputs. #2475 (2.2.1) maketx
/IBA::make_texture
: better error detection and messages when
using "overscan" textures with formats that can't support it properly.
(Punchline: only OpenEXR textures can do it.) #2521 (2.2.0)- Fix possible redundant tile reads in multithread situations (harmless,
but makes for redundant I/O). #2557 (2.2.2)
- New IC/TS attribute "trust_file_extensions", if nonzero, is a promise
- Python:
- Exif read: guard better against out of range offsets, fixes crashes when
reading jpeg files with malformed exif blocks. #2429 (2.1.10/2.2.0) - Fix:
ImageSpec::erase_attribute()
did not honor itssearchtype
parameter. #2465 (2.2.1/2.1.12) - Fix: Some ColorProcessor::apply() methods were not using their
chanstride
parameters correctly. #2475 (2.1.12) - Fix: iinfo return code now properly indicates failures for files that
can't be opened. #2511 (2.2.2/2.1.13) - DPX:
- HDR files:
- Improve performance when reading HDR files out of order (when combined
with ImageCache, observed to speed up out-of-order HDR reading by 18x).
#2662 (2.2.5)
- Improve performance when reading HDR files out of order (when combined
- JPEG:
- OpenEXR:
- Add support for reading and writing float vector metadata. #2459 #2486
- Fix bug in the channel sorting order when channels are "X" and
"Y" (was reversing the order by confusing "Y" for "luminance"). #2595
(2.1.16/2.2.3) - We no longer automatically rename the "worldToNDC" attribute to
"worldtoscreen" and vice versa. #2609 (2.2.4)
- PNG:
- Fix loss of 'config' info upon close/reopen. #2549 (2.2.2)
- Add output configuration hint "png:filter" to control PNG filter
options. #2650 (2.2.5) - Improved propagation of PNG write errors. #2655 (2.2.5)
- Tell libpng to turn off sRGB profile check, which has a known problem of
false positives. #2655 (2.2.5) - New output option "png:filter" allows control of the PNG filter
options. #2650 (2.1.19/2.2.6)
- Raw images:
OpenImageIO 2.1.19.0
Release 2.1.19 (1 Sep 2020) -- compared to 2.1.18
- DPX: Add support for reading DPX files from IOProxy (such as from a memory
buffer). #2659 #2665 - PNG: New output option "png:filter" allows control of the PNG filter
options. #2650 - Python: Fix binding of ImageSpec.erase_attribute. #2654
- Python: Fix missing ImageInput.read_image(). #2677
- Windows: Improve Strutil::get_rest_arguments() handling of long path
syntax ("\\?\"
style). #2661 - MinGW: Fix a variety of compiler warnings on this platform. #2657
- Fix build on Elbrus 2000 architecture. #2671
OpenImageIO 2.2.6.0-RC1
Release candidate for 2.2. The branch is frozen for release. If no critical bugs are identified, we anticipate a full release on Sept 1, 2020.
OpenImageIO 2.2 beta2
Second and hopefully last 2.2 beta, with some minor fixes and last-minute additions (but none that break compatibility).
OpenImageIO 2.1.18.1
Immediately after releasing 2.1.18.0, it was discovered to still be reporting itself as 2.1.17. Quickly pushing out an update that only changes the reported version number itself.
OpenImageIO 2.2 beta1
We have now branched for a 2.2 release (for reference, 2.1 was released in December, 2019). Please be aware of the following:
-
We have tagged "Release-2.2.4.0-beta" as the first beta release of the 2.2 family. (Note that the version numbers designated 2.2.0-2.2.3 were earlier developer snapshots.)
-
The branch marker RB-2.2 is the tip of development/merging of future 2.2.x releases, which may add features destined for later 2.2.x patch releases, but (certainly after the beta period is over) will avoid any changes that break backwards API, ABI, or linkage compatibility within the 2.2 family.
-
Henceforth, 'master' will be home to development for future releases (presumed 2.3?), and thus makes no guarantees at all about compatibility breaks.
-
My goal is to have a "beta" period of about two weeks for last minute changes, then one or more "release candidates", culminating in a final official 2.2 release on or close to August 1.
-
I strongly encourage you to test the beta while there is plenty of time to change things before a release. Please let us know if you find any bugs or build problems.
-
After the official 2.2 release, further patches to the 2.1 family will start to tail off, becoming more conservative and only including the most critical or specifically requested fixes.
The preliminary release notes (subject to revision before final release) are as follows:
Release 2.2 (1 Sept 2020??) -- compared to 2.1
New minimum dependencies:
- pybind11 >= 2.4.2
- openjpeg >= 2.0 (if JPEG-2000 support is desired) #2555 (2.2.2)
New major features and public API changes:
- New IOProxy support: ImageInput and ImageOutput now have direct API level
support for IOProxy in theiropen()
andcreate()
calls, as well as a
newset_ioproxy()
method in these classes. ImageBuf similarly can specify
a proxy upon construction for reading, and for writing via a
set_write_ioproxy()
method that applies to subsequentwrite
call.
#2434 (2.2.0), #2477 (2.2.1). - Python bindings:
- Python bindings have been added for missing ParamValue constructors.
We previously exposed the PV constructors from just a plain int, float,
or string, but there wasn't an easy way to construct from arbitrary
data like there is in C++. Now there is. #2417 (2.2.0) ParamValueList.attribute()
, when being passed attributes containing
multiple values, now can have those values passed as Python lists and
numpy arrays (previously they had to be tuples). #2437 (2.1.11/2.2.0)ImageBufAlgo.color_range_check()
is now available to the Python
bindings (was previously only C++). #2602 (2.2.3)- Add a version of
ImageBuf.write()
that takes an openImageOutput
.
This is the key to writing a multi-subimage file (such as a multi-part
OpenEXR) using the Python ImageBuf interface. #2640 (2.2.4)
- Python bindings have been added for missing ParamValue constructors.
- ImageBuf:
- Easier direct use of IOProxy with ImageBuf: constructor and reset()
for file-reading ImageBuf now take an optionalIProxy*
parameter,
and a newset_write_ioproxy()
method can supply an IOProxy for
subsequentwrite()
. #2477 (2.2.1) - Add
ImageBuf::setpixel()
methods that use cspan instead of ptr/len.
#2443 (2.1.10/2.2.0) - Add "missing"
reset()
varieties so that every IB constructor has a
correspondingreset()
with the same parameters and vice versa. #2460
- Easier direct use of IOProxy with ImageBuf: constructor and reset()
- ImageBufAlgo:
- ColorConfig: add OCIO "role" accessors. #2548
- oiiotool subimage support:
- Nearly all operations now allow an optional
:subimages=...
modifier that restricts the operation to be performed on only a subset
of named or indexed subimages. See docs for details. #2582
- Nearly all operations now allow an optional
- Low-res I/O of images to terminals that support full color and Unicode
characters. Just output to a file ending in ".term", and it will convert
(on certain terminals) to an image displayed directly in the terminal.
#2631 (2.2.4)
Try:
oiiotool myfile.exr -o out.term
Performance improvements:
- Greatly improved TextureSystem/ImageCache performance in highly threaded
situations where access to the cache was a main bottlenecks. In renders of
scenes with lots of texture access, with dozens of threads all contending
for the cache, we are seeing some cases of 30-40% reduction in total
render time. In scenes that are less texture-bottlenecked, or that don't
use huge numbers of threads, the improvement is more modest. #2433 (2.2.0)
Fixes and feature enhancements:
- oiiotool:
- Intelligible error messages (rather than crashes) if you attempt to
create an image too big to fit in memory. #2414 (2.2.0) --create
and--proxy
take an additional optional modifier:
:type=name
that specifies the type of buffer to be created (the
default, as usual, is to create an internal float-based buffer). #2414
(2.2.0)-o
optional argument:type=name
is a new (and preferred) synonym
for what used to be:datatype=
. #2414 (2.2.0)--autotrim
now correctly trims to the union of the nonzero regions
of all subimages, instead of incorrectly trimming all subimages to the
nonzero region of the first subimage. #2497 (2.2.1.2)--subimage
now has an optional:delete=1
modifier that causes the
operation to delete one named or indexed subimage (versus the default
behavior of extracing one subimage and deleting the others). #2575
(2.2.3)- The list of dependent libraries (part of
oiiotool --help
) now
correctly reports the OpenEXR version. #2604 (2.2.3) - Fix:
--eraseattrib
did not correctly apply to all subimages when
-a
or:allsubimages=1
were used. #2632 (2.2.4)
- Intelligible error messages (rather than crashes) if you attempt to
- ImageBuf / ImageBufAlgo:
- Huge ImageBuf allocation failures (more than available RAM) now are
caught and treated as an ImageBuf error, rather than crashing with an
uncaught exception. #2414 (2.2.0) - ImageBuf constructors that are passed an ImageSpec (for creating an
allocated writable IB or "wrapping" a user buffer) now check that the
spec passed has enough information to know the size of the buffer
(i.e., it will be recognized as an error if the width, height, depth,
channels, or data type have not been set validly). #2460 - Fix:
ImageBuf::getchannel()
did not honor itswrap
parameter.
#2465 (2.2.1/2.1.12) - Fix:
IBA::reorient()
andIBA::computePixelHashSHA1()
did not honor
theirnthreads
parameter. #2465 (2.2.1/2.1.12) resample()
has been modified to more closely matchresize
by using
clamp wrap mode to avoid a black fade at the outer edge of the
resampled area. #2481- Fix:
ImageBuf::get_pixels()
did not honor the stride parameters.
#2487. (2.1.12/2.2.1) - Fix
resize()
to avoid a crash / stack overflow in certain cases of
very big images and very large filter kernels. #2643 (2.2.4)
- Huge ImageBuf allocation failures (more than available RAM) now are
- ImageCache / TextureSystem / maketx:
- New IC/TS attribute "trust_file_extensions", if nonzero, is a promise
that all files can be counted on for their formats to match their
extensions, which eliminates some redundant opens and format checks
in the IC/TS and can reduce needless network/filesystem work. Use with
caution! #2421 (2.2.0) - texture3d() fixed some cases where derivative results were not
correctly copied to the outputs. #2475 (2.2.1) maketx
/IBA::make_texture
: better error detection and messages when
using "overscan" textures with formats that can't support it properly.
(Punchline: only OpenEXR textures can do it.) #2521 (2.2.0)- Fix possible redundant tile reads in multithread situations (harmless,
but makes for redundant I/O). #2557 (2.2.2)
- New IC/TS attribute "trust_file_extensions", if nonzero, is a promise
- Exif read: guard better against out of range offests, fixes crashes when
reading jpeg files with malformed exif blocks. #2429 (2.1.10/2.2.0) - Fix:
ImageSpec::erase_attribute()
did not honor itssearchtype
parameter. #2465 (2.2.1/2.1.12) - Fix: Some ColorProcessor::apply() methods were not using their
chanstride
parameters correctly. #2475 (2.1.12) - Fix: iinfo return code now properly indicates failures for files that
can't be opened. #2511 (2.2.2/2.1.13) - JPEG:
- OpenEXR:
- Add support for reading and writing float vector metadata. #2459 #2486
- Fix bug in the channel sorting order when channels are "X" and
"Y" (was reversing the order by confusing "Y" for "luminance"). #2595
(2.1.16/2.2.3) - We no longer automatically rename the "worldToNDC" attribute to
"worldtoscreen" and vice versa. #2609 (2.2.4)
- PNG:
- Fix loss of 'config' info upon close/reopen. #2549 (2.2.2)
- Raw images:
- Support for new Canon .cr3 file, but only if you build against
libraw >= 0.20.0 developer snapshot. #2484 (2.2.1) #2613 (2.2.4) - RAW input: set the "raw:flip" attribute if the underlying libraw did a
reorientation. #2572 (2.1.15/2.2.3) - Avoid errors (in libraw) that resulted from multiple threads opening
raw files at the same time. #2633 (2.2.4)
- Support for new Canon .cr3 file, but only if you build against
- RLA:
- Additional sanity checks and error checks/messages for detecting files
that might be first mistaken for RLA files, but actually are not.
#2600 (2.2.3)
- Additional sanity checks and error checks/messages for detecting files
- TIFF:
- Internal improvements to handling metadata retrieval for certain
unusual tags. #2504 (2.2....
- Internal improvements to handling metadata retrieval for certain
OpenImageIO 2.1.18.0
Release 2.1.18 (1 Aug 2020) -- compared to 2.1.17
- Python
ImageBuf.write()
added a variety that takes an open ImageOutput.
This is the key to writing multi-subimage files from Python. #2640 oiiotool --eraseattrib
fixed: was not applying to all subimages. #2632- RAW: Improve thread safety when more than one thread might be opening
different raw files at the same time. #2633 - unordered_map_concurrent fixed a missing size decrement upon erase(). #2624
- Fixes to support certain recent pybind11 changes. #2637
- Fixes to support OpenColorIO v2. #2636
- Fixes to support more recent fmtlib versions. #2639
- PNG: document the "png:compressionLevel" output hint. #2642
- In oiioversion.h, add a
OIIO_MAKE_VERSION
macro that constructs the
integer code for a particular major/minor/patch release. #2641
OpenImageIO 2.1.17.0
Release 2.1.17 (1 Jul 2020) -- compared to 2.1.16
- Build: Use the discovered python binary name, to address the Fedora
retriction that you must use "python2" or "python3" by name. #2598 - Docs: ImageBufAlgo::nonzero_region had been inadvertently left out of the
Python chapter. - Improve RLA reader's ability to detect corrupt or non-RLA files, which
fixes crashes you could get from trying to read non-image files. #2600 - Support for building against Qt 5.15. (Note: Qt support is only needed
for the "iv" viewer.) #2605 - Fixes to support LibRaw 0.20 (which is currently in beta3). Note that this
will make it incompatible with 0.20 beta1 and beta2, due to a fixed typo
of a struct field in one of the LibRaw's headers. #2613 - oiioversion.h: fix typo that left the OIIO_VERSION_RELEASE_TYPE symbol
undefined. #2616