Releases: AcademySoftwareFoundation/OpenImageIO
OpenImageIO 2.1.9.0
This is the official transition of the supported production release to 2.1. Some very high level highlights you might want to know about 2.1:
- The primary documentation is now hosted on https://openimageio.readthedocs.io and there you can find both beautiful HTML as well as PDF. A PDF book is no longer included in the distribution. I think everything has transitioned properly, but if you notice anything deficient in the new docs, please let me know.
- We have overhauled the build system, modernized and improved. It is much better at finding, hinting, or excluding individual components and dependent packages. The new build scripts now require a CMake minimum version of cmake 3.12. Please read the notes below for details.
- Support for HEIC/HEIF images.
- A new notation for getting and setting attributes in ParamList and ImageSpec. For details, see #2204 and #2297.
- Improved performance particularly for DPX reading, reading individual frames from movie files, and TextureSystem improvements under high threading.
- Although we still use Travis and Appveyor (for now), much of the CI heavy lifting is now being done by GitHub Actions CI.
We will continue to issue new (compatible) 2.1.x releases approximately monthly, with bug fixes or minor/safe/nonbreaking enhancements.
Detailed release notes are below. Enjoy.
Release 2.1 (8 Dec 2019) -- compared to 2.0
New minimum dependencies:
- CMake minimum is now 3.12. #2348 (2.1.5)
Major new features and performance improvements:
- Support for HEIC/HEIF images. HEIC is the still-image sibling of HEVC
(a.k.a. H.265), and compresses to about half the size of JPEG but with
higher visual quality. #2160 #2188 (2.1.0) - oiiotool new commands:
-evaloff
-evalon
--metamerge
--originoffset
- ImageCache/TextureSystem improved perf of the tile and file caches under
heavy thread contention. In the context of a renderer, we have seen
improvements of around 7% in overall render time, averaged across a suite
of typical production scenes. #2314, #2316 (2.1.3) #2381 #2407 (2.1.8) - Fix huge DPX reading performance regression. Technically this is a bug
fix that restores performance we once had, but it's a huge speedup.
#2333 (2.1.4) - Reading individual frames from very-multi-image files (movie files) has
been greatly sped up (10x or more). #2345 (2.1.4)
Public API changes:
-
ImageSpec new methods
getattribute()
andgetattributetype()
. #2204
(2.1.1) -
ImageSpec and ParamValueList now support operator
["name"]
as a way
to set and retrieve attributes. For example,myimagespec["compression"] = "zip"; myimagespec["PixelAspectRatio"] = 1.0f; int dither = myimagespec["oiio:dither"].get<int>(); std::string cs = myimagespec["colorspace"];
See the documentation about "Attribute Delegates" for more information,
or the new headerattrdelegate.h
. #2204 (2.1.1) #2297 (2.1.3) -
ImageSpec::find_attribute now will retrive "datawindow" and "displaywindow"
(type int[4] for images int[6] for volumes) giving the OpenEXR-like bounds
even though there is no such named metadata for OIIO (the results will
assembled from x, y, width, height, etc.). #2110 (2.1.0/2.0.4) -
"Compression" names (where applicable) can now have the quality appended
to the name (e.g.,"jpeg:85"
) insead of requiring quality to be passed
as a separate piece of metadata. #2111 (2.1.0/2.0.5) -
Python: define
__version__
for the module. #2096 (2.1.0/2.0.4) -
Python error reporting for
ImageOutput
andImageBuf.set_pixels
involving transferring pixel arrays have changed from throwing exceptions
to reporting errors through the usual OIIO error return codes and queries.
#2127 (2.1.0/2.0.5) -
New shell environment variable
OPENIMAGEIO_OPTIONS
can now be used to
set globalOIIO::attribute()
settings upon startup (comma separated
name=value syntax). #2128 (2.1.0/2.0.5) -
ImageInput open-with-config new attribute
"missingcolor"
can supply
a value for missing tiles or scanlines in a file in lieu of treating it
as an error (for example, how OpenEXR allows missing tiles, or when reading
an incompletely-written image file). A new globalOIIO::attribute()
setting (same name) also accomplishes the same thing for all files read.
Note that this is only advisory, and not all file times are able to do
this (OpenEXR is the main one of interest, so that works). #2129 (2.1.0/2.0.5) -
ImageCache::invalidate()
andTextureSystem::invalidate()
now take an
optionalforce
parameter (default: true) that if false, will only
invalidate a file if it has been updated on disk since it was first opened.
#2133, #2166 (2.1.0/2.0.5) -
New filter name
"nuke-lanczos6"
matches the "lanczos6" filter from Nuke.
In reality, it's identical to our "lanczos3", but the name alias is
supposed to make it more clear which one to use to match Nuke, which uses
a different nomenclature (our "3" is radius, their "6" is full width).
#2136 (2.1.0/2.0.5) -
New helper functions in
typedesc.h
:tostring()
converts nearly any
TypeDesc-described data to a readable string,convert_type()
does data
type conversions as instructed by TypeDesc's. #2204 (2.1.1) -
ImageBuf:
- Construction from an ImageSpec now takes an optional
zero
parameter
that directly controls whether the new ImageBuf should have its buffer
zeroed out or left uninitialized. #2237 (2.1.2) set_write_format()
method has a new flavor that takes a
cspan<TypeDesc>
that can supply per-channel data types. #2239 (2.1.1)
- Construction from an ImageSpec now takes an optional
-
ColorConfig:
-
Formal version numbers are now four parts: MAJOR.MINOR.PATCH.TWEAK.
#2313,#2319 (2.1.3) -
ImageInput now sets "oiio:subimages" attribute to an int representing the
number of subimages in a multi-image file -- if known from reading just
the header. A positive value can be relied upon (including 1), but a
value of 0 or no such metadata does not necessarily mean there are not
multiple subimages, it just means it could not be known from inexpensively
reading only the header. #2344 (2.1.4) -
The
imagesize_t
andstride_t
values now have revised definitions.
It should be fully API/ABI compatible (at least for 64 bit systems), but
is a simpler, more modern, more platform-independent definition.
#2351 (2.1.5) -
DeepData
has been altered to make pixel indices and total counts int64_t
rather than int, in order to be safe for very large images that have > 2
Gpixels. #2363 (2.1.5) -
On OSX, we now expect non-embedded plugins to follow the convention of
naming runtime-loaded modulesfoo.imageio.so
(just like on Linux),
whereas we previously used the convention offoo.imageio.dylib
. Turns
out that dylib is supposed to be only for shared libraries, not runtime
loadable modules. #2376 (2.1.6)
Fixes and feature enhancements:
- oiiotool:
- New
-evaloff
and-evalon
lets you disable and enable the expression
substitution for regions of arguments (for example, if you have an
input image filename that contains{}
brace characters that you want
interpreted literally, not evaluated as an expression). #2100 (2.1.0/2.0.4) --dumpdata
has more intelligible output for uint8 images. #2124
(2.1.0/2.0.4)- Fixed but that could prevent
-iconvert oiio:UnassociatedApha 1
from
correctly propagating to the input reader. #2172 (2.1.0/2.0.6) -o:all=1
(which outputs all subimages to separate files) fixed a
crash that would occur if any of the subimages were 0x0 (it could
happen; now it just skips outputting those subimages). #2171 (2.1.0)- Improved support of files with multiple subimages: Several commands
honored-a
but did not respect individualallsubimages=
modifiers
(--ch, --sattrib, --attrib, --caption, --clear-keywords,
--iscolorspace, --orientation, --clamp, -fixnan); Several commands
always worked on all subimages, but now properly respect-a
and
allsubimages=
(--origin, --fullpixels, --croptofull, --trim);
Several commands were totally unaware of subimages, but now are so and
respect-a
andallsubimages=
(--crop, --fullsize, --zover, --fill,
--resize, --resample). #2202 #2219, #2242 (2.1.1, 2.1.2) --ociodisplay
: empty display or view names imply using the default
display or view. #2273 (2.0.10/2.1.3)--metamerge
option causes binary image operations to try to "merge"
the metadata of their inputs, rather than simply copy the metadata
from the first input and ignore the others. #2311 (2.1.3)--colormap
now supports a new "turbo" color map option. #2320 (2.1.4)- Expression evaluation has been extended to support operators
//
for
integer division (whereas/
is floating point division), and%
for integer modulus. #2362 (2.1.5) - New
--originoffset
resets the data window origin relative to its
previous value (versus the existing--origin
that sets it absolutely).
#2369 (2.1.5) --paste
has two new optional modifiers::all=1
pastes the entire
stack of images together (versus the default of just pasting the top
two images on the stack), and:mergeroi=1
causes the result to have
the merged data window of all inputs, instead of the foreground image
clipping against the boundary of the background image data. #2369 (2.1.5)--paste
now works with deep images. #2369 (2.1.5)--paste
semantics have c...
- New
OpenImageIO 2.1.8.2-RC3
- Fix important bug that surfaced with the new fmt code update.
- Remove obsolete PDF docs, rely on readthedocs now.
- Turn off default for STOP_ON_WARNING.
I am expecting to make a final release on 8 Dec.
OpenImageIO 2.0.13
This is the newest stable supported release, guaranteed to be API/ABI back-compatible with prior 2.0.x releases. This will likely be the LAST update to 2.0 as the "supported release" family, though there may be subsequent bug fixes as it transitions to the obsolete (but occasionally supported) branch. Release notes are below.
Release 2.0.13 (1 Dec 2019) -- compared to 2.0.12
- Bug fix in deep image compare (
IBA::compare()
oroiiotool --compare
)
would fail to notice differences in deep images where the corresponding
pixels had differing numbers of samples. #2381 (2.1.8/2.0.13) - DPX: Fix bugs related to int32 math that would lead to incorrect behavior
in very high-resolution files. #2396 (2.1.3/2.0.13) - When converting images to texture (via maketx or IBA::make_texture),
correctly handle color space conversions for greyscale images. #2400
(2.1.8/2.0.13) - Build: suppress warnings with libraw for certain gcc versions.
- Build: Fix compiler warnings in ustring.h when
_LIBCPP_VERSION
is not
defined. #2415 (2.1.8.1/2.0.13)
OpenImageIO 2.1.8.1-RC2
This is the second and hopefully final release candidate for the IMMINENT transition of 2.1 to be the supported release branch. I plan to retag it as the final release on 8 December. The API/ABI is hereby and irrevocably frozen; subsequent 2.1.x releases should all be fully back compatible for both API and ABI. The only changes since RC1 are a few minor build/warning fixes, and switch of the embedded "fmt" string formatting library to a newer version. Full release notes will be published on 8 Dec when the final release is announced (or you can check the CHANGES.md that comes with it).
OpenImageIO 2.1.8.0-RC1
This is the release candidate for 2.1. Please test. We will strive to keep the API locked and also to only add critical bug fixes between now and the scheduled release on 1 December.
OpenImageIO 2.0.12
Release 2.0.12 (1 Nov, 2019) -- compared to 2.0.11
- Fix compiler warnings on some platforms. #2375
- Work around bug in OpenEXR, where dwaa/dwab compression can crash when
used on 1-channel tiled images with a tile size < 16. This can crop up for
MIP-maps (high levels where rez < 16), so we detect this case and switch
automatically to "zip" compression. #2378
OpenImageIO 2.1 Beta (2.1.7-beta)
We have also branched 2.1 and tagged Release-2.1.7-beta. This has many big changes (and potential compatibility breaks) compared to 2.0. I encourage you all to try it and report any problems. Please see the CHANGES.md in that branch for the full list of enhancements and fixes.
My plan is to let the beta span the course of November, with a goal of declaring a true 2.1 release on December 1, at that point 2.1 then becoming the fully supported stable release branch and 2.0 fading to be an obsolete branch that will only get sporadic updates to address the most critical bugs.
During the beta period, there may be some last minute touch-ups that change the API/ABI, but once we hit release candidates at the end of the month, the API and ABI will be frozen as befitting a supported release.
For the moment, master will continue to track the 2.1 betas, but at the moment that we have a PR that we agree should not be incorporated into 2.1 (because it's risky or breaks compatibility), master will diverge and truly be the pre-2.2 work area.
OpenImageIO 2.0.11
OpenImageIO 2.0.10
Release 2.0.10 (1 Aug, 2019) -- compared to 2.0.9
- ColorConfig improvements: (a) new getColorSpaceFamilyByName(); (b) new
methods to return the list of all color spaces, looks, displays, or views
for a display; (c) all of ColorConfig now exposed to Python. #2248 IBA::ociodisplay()
andoiiotool --ociodisplay
: empty display or view
names imply using the default display or view. #2273- Bug fix in
ustring::compare(string_view)
, in cases where the string_view
was longer than the ustring, but had the same character sequennce up to
the length of the ustring. #2283 oiiotool --stats
: Fixed bug where-iconfig
hints were not being
applied to the file as it was opened to compute the stats. #2288- Bug fix:
IBA::computePixelStats()
was not properly controlling the
number of threads with thenthreads
parameter. #2289 - Bug fix when reading TIFF bugs: In cases where the reader needed to close
and re-open the file silently (it could happen for certain scanline
traversal patterns), the re-open was not properly honorig any previous
"rawcolor" hints from the original open. #2285 - Nuke txWriter updates that expose additional make_texture controls. #2290
- Build system: Improvements for finding certain new Boost versions. #2293
- Build system: Improvements finding OpenEXR installation.
- Fix bugs when reading TIFF "cmyk" files. #2292.
- DPX: support for reading and writing 1-channel (luma, etc.) DPX images.
#2294 IBA::fixNonFinite()
: fixed impicit float/double casts to half. #2301- Build fixes for MinGW. #2304
Release 2.0.9
Release 2.0.9 (4 Jul, 2019) -- compared to 2.0.8
- RAW: Clarification about color spaces: The open-with-config hint
"raw:ColorSpace" is more careful about color primaries versus transfer
curve. Asking for "sRGB" (which is the default) gives you true sRGB --
both color primaries and transfer. Asking for "linear" gives you linear
transfer with sRGB/Rec709 primaries. The default is true sRGB, because it
will behave just like JPEG. #2260 (2.1.2) - Improved oiiotool support of files with multiple subimages: Several
commands honored-a
but did not respect individualallsubimages=
modifiers (--ch, --sattrib, --attrib, --caption, --clear-keywords,
--iscolorspace, --orientation, --clamp, -fixnan); Several commands always
worked on all subimages, but now properly respect-a
andallsubimages=
(--origin, --fullpixels, --croptofull, --trim); Several commands were
totally unaware of subimages, but now are so and respect-a
and
allsubimages=
(--crop, --fullsize, --zover, --fill, --resize,
--resample). #2202 #2219, #2242 - Fix broken ability to specify compression of multipart exr files. #2252
- Fix Strutil::stof() return type error and other windows warnings. #2254
- IBA::colortmatrixtransform() and
oiiotool --ccmatrix
allow you to
perform a matrix-based color space transformation. #2168 - Guard simd.h against shenanigans when Xlib.h having been included and
#define
ing True and False. #2272 - RAW: Clarification about color spaces: The open-with-config hint
"raw:ColorSpace" is more careful about color primaries versus transfer
curve. Asking for "sRGB" (which is the default) gives you true sRGB --
both color primaries and transfer. Asking for "linear" gives you linear
transfer with sRGB/Rec709 primaries. The default is true sRGB, because it
will behave just like JPEG. #2260 - Fix inability for python to set timecode attributes (specifically, it was
trouble setting ImageSpec attributes that were unnsigned int arrays).
#2279