Releases: AcademySoftwareFoundation/OpenImageIO
Releases · AcademySoftwareFoundation/OpenImageIO
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