Releases: AcademySoftwareFoundation/OpenImageIO
Releases · AcademySoftwareFoundation/OpenImageIO
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
OpenImageIO 2.0.8
Release 2.0.8 (3 May, 2019) -- compared to 2.0.7
- Fix Windows broken read of JPEG & PNG in some circumstances. #2231
- Some minor fixes to JPEG & PNG reading and file error robustness. #2187
- Fix crash reading certain old nconvert-written TIFF files. #2207
- Internals: The
OIIO_DISPATCH_COMMON_TYPES2/3
macros used by many
ImageBufAlgo functions have been expanded to handle a few more cases
"natively" without conversion to/from float. This may make a few cases
of odd data type combinations have higher precision. #2203 - ImageBufAlgo::resize() fixes precision issues for 'double' images. #2211
- Testing: A new unit test has been backported from master, which tries to
perform a series of read/write tests on every file format. In partcular,
this tests certain error conditions, like files not existing, or the
directory not being writeable, etc. #2181 - Crashes in the command line utilities now attempt to print a stack trace
to aid in debugging (but only if OIIO is built with Boost >= 1.65, because
it relies on the Boost stacktrace library). #2229 - Dev goodies: fmath.h's powwroundup/pow2rounddown have been renamed
ceil2/floor2 to reflect future C++ standard. The old names still work, so
it's a fully back compatible change. #2199
OpenImageIO 2.0.7
Release 2.0.7 (1 Apr, 2019) -- compared to 2.0.6
- DPX: fix potential crash when file open fails. #2186
- EXR: Suppress empty string for subimage name (fixes a problem when reading
files written by V-Ray). #2190 - Disable JPEG-2000 support for the (rare) combination of an older OpenJPEG
1.x and EMBEDPLUGINS=0 mode, which was buggy. The solution if you really
need EMBEDPLUGINS and JPEG-2000 support is to please use OpenJPEG >= 2.0.
#2183. - New build flag
USE_WEBP=0
can be set to 0 to force disabled support of
WebP even when the webp package is found. #2200 - Bug fix:
ImageInput::create(name)
andImageOutput::create(name)
worked
ifname
was a filename (such asfoo.exr
), or the extension (such as
exr
), but previously did not work if it was the name of the format
(such asopenexr
), despite having been documented as working in that
case. #2185 - Tested and known to work with the recently-released Clang 8.0.
OpenImageIO 2.0.6
Release 2.0.6 (1 Mar, 2019) -- compared to 2.0.5
- PNG: more careful catching of errors and corrupt png files. #2167
- PSD: read now properly extracts layer/subimage name and data window offset
coordinates. #2170 - ImageBuf: Fix bug in propagating unassociated alpha behavior request. #2172
oiiotool -o:all=1
fix crash when outputting 0x0 subimages. #2171- Developer goodies: simd.h ops for vec4 * mat44 multiplication. #2165
- Developer goodies:
Strutil::excise_string_after_head()
#2173 - Fix crashes on Windows from certain regex replacement happening as part
of MakeTexture (internally avoid MSVS implementation of std::regex). #2173
OpenImageIO 2.0.5
Release 2.0.5 (1 Feb, 2019) -- compared to 2.0.4
resize()
,fit()
, andresample()
are no longer restricted to
source and destination images having the same numer of channels. #2125- 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 - Protection against certain divide-by-zero errors when using very blurry
latlong environment map lookups. #2121 - New shell environment variable
OPENIMAGEIO_OPTIONS
can now be used to
set globalOIIO::attribute()
settings upon startup (comma separated
name=value syntax). #2128 - 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 - 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 maketx -u
is smarter about which textures to avoid re-making because
they are repeats of earlier commands. #2140- Detect/error if builder is trying to use a pybind11 that's too old. #2144
- OpenEXR: avoid some OpenEXR/libIlmImf internal errors with DWA compression
by switching to zip for single channel images with certain small tile
sizes. #2147 - On MacOS 10.14 Mojave, fix warnings during
iv
compile about OpenGL
being deprecated in future releases. #2151 iv
info window now sorts the metadata. #2159- At build time, the Python version used can be controlled by setting the
environment variable$OIIO_PYTHON_VERSION
, which if set will initialize
the default value of the CMake variablePYTHON_VERSION
. #2161 (2.0.5) - On non-Windows systems, the build now generates a PkgConfig file, installed
atCMAKE_INSTALL_PREFIX/lib/pkgconfig/OpenImageIO.pc
. #2158 (2.0.5)
OpenImageIO 2.0.4
Release 2.0.4 (Jan 5, 2019) -- compared to 2.0.3
- Fix potential threadpool deadlock issue that could happen if you were
(among possibly other things?) simultaneously calling make_texture from
multiple application threads. #2132 - ImageInput read_image/scanline/tile fixed subtle bugs for certain
combination of strides and channel subset reads. #2108 - TIFF: Fix problems with JPEG compression in some cases. #2117
- TIFF: Fixed error where reading just a subset of channels, if that subset
did not include the alpha channel but the image was "unassociated alpha",
the attempt to automatically associate (i.e. "premultiply" the alpha) upon
read would get bogus values because the alpha channel was not actually
read. Now in this case it will not do the premultiplication. So if you are
purposely reading RGB only from an RGBA file that is specifically
"unassociated alpha", beware that you will not get the automatic
premultiplication. #2122 - Python: define
__version__
for the module. #2096 - IBA::channel_append() previously always forced its result to be float, if
it wasn't previously initialized. Now it uses the uaual type-merging
logic, making the result the "widest" type of the inputs. #2095 - 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 - ImageCache/TextureSystem: more specific error message when tile reads
appear to be due to the file having changed or been overwritten on disk
since it was first opened. #2115 - 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 - oiiotool
--dumpdata
has more intelligible output for uint8 images. #2124 - maketx: the
-u
(update mode) is slightly less conservative now,
no longer forcing a rebuild of the texture just because the file uses
a different relative directory path than last time. #2109 - WebP: fix bug that gave totally incorrect image read for webp images that
had a smaller width than height. #2120 - Developer goodies: string_view now adds an optional
pos
parameter to the
find_first_of
/find_last_of
family of methods. #2114 - Dev goodies: Strutil::wordwrap() now lets you specify the separation
characters more flexibly (rather than being hard-coded to spaces as
separators). #2116
OpenImageIO Release 2.0.3 (first stable 2.0 release)
Release 2.0 (Dec 7, 2018) -- compared to 1.8.x
New minimum dependencies:
- On Windows compiling with MSVS, the new minimum version is MSVS 2015.
Major new features and improvements:
- ImageInput and ImageOutput static create() and open() methods now return
unique_ptr
rather than raw pointers. #1934, #1945 (1.9.3). - ImageInput improvements to thread safety and concurrency, including some
new API calls (see "Public API changes" section below). - ImageBufAlgo overhaul (both C++ and Python): Add IBA functions that
return image results directly rather than passing ImageBuf references
as parameters for output (the old kind of calls still exist, too, and
have their uses). Also in C++, change all IBA functions that took raw
pointers to per-channel colors intospan<>
for safety. #1961 (1.9.4) - For some readers and writers, an "IOProxy" can be passed that customizes
the I/O methods. An important use of this is to write an image "file"
to memory or to read an image "file" from a memory, rather than disk.
Currently, OpenEXR supports this for both reading and writing, and PNG
supports it for writing. You specify a pointer to the proxy via the
configuration option "oiio:ioproxy". #1931 (1.9.3) - New Image Format support:
- OpenVDB file read (as volume images or accessing via texture3d()).
#2010,2018 (1.9.4) - "null" images -- null reader just returns black (or constant colored)
pixels, null writer just returns. This can be used for benchmarking
(to eliminate all actual file I/O time), "dry run" where you want to
test without creating output files. #1778 (1.9.0), #2042 (1.9.4)
- OpenVDB file read (as volume images or accessing via texture3d()).
- TIFF I/O of multiple scanlines or tiles at once (or whole images, as is
typical use case for oiiotool and maketx) is sped up by a large factor
on modern multicore systems. We've seen 10x or more faster oiiotool
performance for uint8 and uint16 TIFF files using "zip" (deflate)
compression, on modern 12-16 core machines. #1853 (1.9.2) - Major refactor of Exif metadata handling, including much more complete
metadata support for RAW formats and support of camera "maker notes"
for Canon cameras. #1774 (1.9.0) - New
maketx
option--bumpslopes
specifically for converting bump maps,
saves additional channels containing slope distribution moments that can
be used in shaders for "bump to roughness" calculations. #1810,#1913,2005
(1.9.2), #2044 (1.9.4) - An official FindOpenImageIO.cmake that we invite you to use in other
cmake-based projects that needs to find OIIO. #2027 (1.9.4)
Public API changes:
- Python binding overhaul
The Python bindings have been reimplemented with
pybind11
, no longer with Boost.Python.
#1801 (1.9.1)
In the process (partly due to what's easy or hard in pybind11, but partly
just because it caused us to revisit the python APIs), there are some minor
API changes, some of which are breaking! To wit:- All of the functions that are passed or return blocks of pixels
(such asImageInput.read_image()
) now use Numpyndarray
objects
indexed as[y][x][channel]
(no longer using old-style Python
array.array
and flattened to 1D). - Specilized enum type
ImageInput.OpenMode
has been replaced by string
parameters, so for example, oldImageInput.open(filename, ImageInput.Create)
is nowImageInput.open (filename, "Create")
- Any function that previously took a parameter of type
TypeDesc
orTypeDesc.BASETYPE
now will accept a string that signifies the
type. For example,ImageBuf.set_write_format("float")
is now a
synonym forImageBuf.set_write_format(oiio.TypeDesc(oiio.FLOAT))
. - For several color conversion functions, parameter names were changed
from "from" to "fromspace" and "to" to "tospace" to avoid a clash with
the Python reserved wordfrom
. #2084
- All of the functions that are passed or return blocks of pixels
- ImageInput API changes for thread safety and statelessness #1927 (1.9.2)
seek_subimage()
no longer takes anImageSpec&
, to avoid the obligatory
copy. (If the copy is desired, just callspec()
to get it afterwards.)- All of the
read_*()
methods now have varieties that take arguments
specifying the subimage and mip level. Theread_native_*()
methods
supplied by ImageInput subclass implementations now ONLY come in the
variety that takes a subimage and miplevel. - All of the
read_*()
calls that take subimage/miplevel explicitly are
guaranteed to be stateless and thread-safe against each other (it's not
necessary to callseek_subimage
first, nor to have to lock a mutex to
ensure that another thread doesn't change the subimage before you get a
chance to call read). For back-compatibility, there are still versions
that don't take subimage/miplevel, require a prior call to seek_subimge,
and are thus not considered thread-safe. - New methods
spec(subimage,miplevel)
andspec_dimensions(s,m)
let you retrieve a copy of the ImageSpec for a given subimage and
MIP level (thread-safe, and without needing a priorseek_subimage
)
call. Note that to be stateless and thread-safe, these return a COPY
of the spec, rather than the reference returned by the stateful
spec()
call that has no arguments and requires a priorseek_subimage
.
However,spec_dimensions()
does not copy the channel names or the
arbitrary metadata, and is thus very inexpensive if the only thing
you need from the spec copy is the image dimensions and channel
formats.
- ImageInput and ImageOutput create/open changes
- The static
create()
andopen()
methods have been changed so that
instead of returning anImageInput *
(orImageOutput *
) and
requiring the caller to correctly manage that resource and eventually
destroy it, now they return aunique_ptr
that automatically deletes
when it leaves scope. In the process we also clean up some edge cases
on Windows where it was possible for ImageInput/ImageOutput to have
been allocated in one DLL's heap but freed in a different DLL's heap,
which could cause subtle heap corruption problems. #1934,#1945 (1.9.3).
- The static
- ImageBuf
- New method
set_origin()
changes the pixel data window origin.
#1949 (1.9.4) - Assignment (
operator=
) is now enabled for ImageBuf, both the copying
and moving variety. Also, an explicit copy() method has been added
that returns a full copy of the ImageBuf. #1952 (1.9.4) - write() method has had its arguments changed and now takes an optional
TypeDesc that lets you specify a requested data type when writing the
output file, rather than requiring a previous and separate call to
set_write_format(). The old call signature of write() still exists,
but it will be considered deprecated in the future. #1953 (1.9.4)
- New method
- ImageBufAlgo
- In C++, functions that take raw pointers for per-channel constant
values or results are deprecated, in favor of new versions that
heavily rely onspan<>
to safely pass array references and their
lengths. #1961 (1.9.4) - In both C++ and Python, every IBA function that takes a parameter
giving an ImageBuf destination reference for results have an additional
variant that directly returns an ImageBuf result. This makes much
cleaner, more readable code, in cases where it's not necessary to
write partial results into an existing IB. #1961 (1.9.4) - In C++, many IBA functions that came in multiple versions for whether
certain parameters could be an image, a per-channel constant, or a
single constant, have been replaced by a single version that takes
a new parameter-passing helper class,Image_or_Const
that will match
against any of those choices. (No changes are necessary for calling
programs, but it makes the header and documentation a lot simpler.)
#1961 (1.9.4) - IBA compare(), computePixelStats(), and histogram() now directly
return their result structures, intead of requiring the passing of
a destination reference. #1961 (1.9.4) - New IBA::fit() resizes and image to just fit in the given size, but
preserve its aspect ratio (padding with black as necessary). It's just
like whatoiiotool --fit
has always done, but now you can call it
directly from C++ or Python. #1993 (1.9.4) - New
contrast_remap()
allows flexible linear or sigmoidal contrast
remapping. #2043 (1.9.4) ImageBufAlgo::colorconvert
and variousocio
transformations have
changed the default value of theirunpremult
parameter fromfalse
totrue
, reflecting the fact that we believe this is almost always
the more correct choice. Also, if their input image is clearly marked
as having unasociated alpha already, they will not bracket the color
conversion with the requested unpremult/premult. #1864 (1.9.2)- Updated the OpenCV interoperability with new functions to_OpenCV (make
an ImageBuf out of a cv::Mat) and from_OpenCV (fill in a cv::Mat with
the contents of an ImageBuf). Deprecated the old from_IplImage and
to_IplImage, which are very OpenCV-1.x-centric. (2.0.2)
- In C++, functions that take raw pointers for per-channel constant
- ImageCache/TextureSystem:
- ImageCache and TextureSystem now have
close(filename)
and
close_all()
methods, which for one file or all files will close the
files and release any open file handles (also unlocking write access
to those files on Windows), but without invalidating anything it knows
about the ImageSpec or any pixel tiles already read from the files, as
would happen with a call to the much ...
- ImageCache and TextureSystem now have
OpenImageIO Release 1.8.17 (stable branch release)
- Fix
oiiotool --info
in Windows -- printed path wrong. #2052 - Build: When finding OpenEXR, use the version detected by pkg-config, if available. #2057
- zfile: more careful gzopen on Windows that could crash when given bogus filename. (Particularly on Windows.) #2070
ImageCache::invalidate(filename)
did not properly invalidate the "fingerprint" is used to detect duplicate files. #2081- Fix Strutil::vsnprintf detection of encoding errors on Windows. #2082