Reading, writing, and processing images in a wide variety of file formats, using a format-agnostic API, aimed at VFX applications.
APACHE-2.0 License
Bot releases are visible (Hide)
Published by lgritz over 4 years ago
Published by lgritz over 4 years ago
OpenImageIO_PLUGIN_SEARCH_PATH
#2584Published by lgritz over 4 years ago
Published by lgritz over 4 years ago
AttrDelegate::as_vec<>
returns the whole attribute as a std::vector.Published by lgritz over 4 years ago
span<>
methods involving std::vector
now will work properly with vectors that have custom allocators. #2533add_or_replace()
was failing to "replace" if the new attribute had a different type than the existing one. #2527REQUIRED_DEPS
list of dependencies normally optional that should be treated as required) and OPTIONAL_DEPS
(list of dependencies normally required that should be optional). The main use case is to force certain optional deps to be required for your studio, to be sure that missing deps are a full build break, and not a successful build that silently lacks features you need. #2507build_foo.bash
helper scripts now use set -ex
to ensure that if any individual commands in the script fails, the whole thing will exit with a failure. #2520find_pv()
method that is similar to find()
but returns a pointer rather than an iterator and nullptr if the attribute is not found. #2527get_indexed()
method to ParamValueList and AttrDelegate. #2526Published by lgritz over 4 years ago
searchtype
param. #2465nthreads
parameter. #2465.fast_sin
, fast_cos
; new safe_fmod
is faster than std::fmod, newfast_neg
is faster than simple negation in many cases, if you don't carefmt
on its own. #2498.Published by lgritz over 4 years ago
__has_include
is defined before it is used.Published by lgritz over 4 years ago
If you aren't in this corner case and haven't had build problems complaining about missing ImfFloatVectorAttribute.h, there's no need to rush to upgrade to this mini-release.
Published by lgritz over 4 years ago
ParamValueList.attribute()
, when being passednormalize()
, length()
,length2()
methods, to more closely match the syntax of Imath::Vec3f.Published by lgritz almost 5 years ago
Published by lgritz almost 5 years ago
:type=name
that overrides the default behavior of allocating allPublished by lgritz almost 5 years ago
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:
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.
-evaloff
-evalon
--metamerge
--originoffset
ImageSpec new methods getattribute()
and getattributetype()
. #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 header attrdelegate.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
and ImageBuf.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 global OIIO::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 global OIIO::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()
and TextureSystem::invalidate()
now take an
optional force
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:
zero
parameterset_write_format()
method has a new flavor that takes acspan<TypeDesc>
that can supply per-channel data types. #2239 (2.1.1)ColorConfig:
getColorSpaceFamilyByName()
, getColorSpaceNames()
,getLookNames()
, getDisplayNames()
, getDefaultDisplayName()
,getViewNames()
, getDefaultViewName()
. #2248 (2.1.2)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
and stride_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 modules foo.imageio.so
(just like on Linux),
whereas we previously used the convention of foo.imageio.dylib
. Turns
out that dylib is supposed to be only for shared libraries, not runtime
loadable modules. #2376 (2.1.6)
-evaloff
and -evalon
lets you disable and enable the expression{}
brace characters that you want--dumpdata
has more intelligible output for uint8 images. #2124-iconvert oiio:UnassociatedApha 1
from-o:all=1
(which outputs all subimages to separate files) fixed a-a
but did not respect individual allsubimages=
modifiers-a
andallsubimages=
(--origin, --fullpixels, --croptofull, --trim);-a
and allsubimages=
(--crop, --fullsize, --zover, --fill,--ociodisplay
: empty display or view names imply using the default--metamerge
option causes binary image operations to try to "merge"--colormap
now supports a new "turbo" color map option. #2320 (2.1.4)//
for/
is floating point division), and %
--originoffset
resets the data window origin relative to its--origin
that sets it absolutely).--paste
has two new optional modifiers: :all=1
pastes the entire:mergeroi=1
causes the result to have--paste
now works with deep images. #2369 (2.1.5)--paste
semantics have changed: the meaning of pasting FG into BG atpaste()
is now multithreaded and therefore much faster. #2369 (2.1.5)--ociotransform
no longer issues an error message when no valid OCIO--compare
would fail to notice differences in deep images where theIBA::channel_append()
previously always forced its result to be float,resize()
, fit()
, and resample()
are no longer restricted toImageBuf::read()
now properly forwards the "progress" parametersread_image
. #2196 (2.1.1)OIIO_DISPATCH_COMMON_TYPES2/3
macros used internally by many IBAresize()
fix precision issues for 'double' images. #2211IBA::ociodisplay()
: empty display or view names imply using theIBA::fixNonFinite()
: fixed impicit float/double casts to half. #2301IBA::color_map()
: now supports a new "turbo" color map option.IBA::paste()
now works with deep images. #2369 (2.1.5)paste
semantics have changed: the meaning of pasting FG into BG atpaste()
is now multithreaded and therefore much faster. #2369 (2.1.5)ociotransform()
no longer issues an error message when no valid OCIOociotransform
and ociolook
mixed up the names and orders ofinverse
and unpremult
params, making it so that you couldn'tIBA::compare()
would fail to notice differences in deep images where-u
(update mode) is slightly less conservative now,maketx -u
is smarter about which textures to avoid re-making becauseTS::get_texture_info/IC::get_image_info
TS::environment()
can resolve subimage by name, as we do foriinfo -v
or oiiotool -info -v
. #2159 (2.1.0/2.0.5)--help
, will exit withutility --help
is not an error.create()
now properly lets you specify the typeENABLE_<name>=0
(either as a CMake variable or ancmake -DENABLE_PNG=0 -DENABLE_oiiotool=0
vcpkg
to build dependencies. #2113 (2.1.0/2.0.4)OIIO_LIBNAME_SUFFIX
(default: empty) letsiv
compiler about OpenGL$OIIO_PYTHON_VERSION
, which if set will initializePYTHON_VERSION
. #2161 (2.0.5/2.1.0)CMAKE_INSTALL_PREFIX/lib/pkgconfig/OpenImageIO.pc
. #2158 (2.0.5/2.1.0)USE_WEBP=0
can be used to disable building WebPfmt
implementation has been updated to fix windowsbuild_openexr.bash
script_LIBCPP_VERSION
is not defined.OIIO_ASSERT
and OIIO_DASSERT
.OIIO_ASSERT
always tests and prints an error message if the testOIIO_DASSERT
is for debug modeASSERT
DASSERT
, though those deprecated names will continue for at leastfseek()
and ftell()
that always use 64 bit offsets to be safesafe_mod()
does integer modulus but protects against mod-by-zerorotl()
template innstead of separateOIIO_RETURNS_NONNULL
macro implements an attribute that marks#define
ing True and False. #2272 (2.0.9/2.1.3)excise_string_after_head()
. #2173 (2.1.0/2.0.6)stof()
. #2254 (2.1.2)remove_trailing_whitespace()
and trim_whitespace()
. #2298Strutil::wordwrap()
now lets you specify the separation charactersStrutil::parse_while()
. #2139 (2.1.0/2.0.5)join()
that allows you to set the number of itemsjoin
to produce a joined string of float-like values withvsnprintf
to be locale independent. #2410 (2.1.8)lstrip()
and rstrip()
are just like the existing strip()
,string_view
now adds an optional pos
parameter to the find_first_of
find_last_of
family of methods. #2114 (2.1.0/2.0.4)stacktrace()
and setup_crash_stacktrace()
. (Only functionalOIIO_CHECK_IMAGEBUF_STATUS()
test macro. #2394 (2.1.8)ustring::compare(string_view)
, in cases where thenoexcept
when we want to promise thatPublished by lgritz almost 5 years ago
I am expecting to make a final release on 8 Dec.
Published by lgritz almost 5 years ago
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.
IBA::compare()
or oiiotool --compare
)_LIBCPP_VERSION
is notPublished by lgritz almost 5 years ago
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).
Published by lgritz almost 5 years ago
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.
Published by lgritz almost 5 years ago
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.
Published by lgritz almost 5 years ago
Published by lgritz about 5 years ago
invert<>
in fmath.h. #2197Published by lgritz about 5 years ago
IBA::ociodisplay()
and oiiotool --ociodisplay
: empty display or viewustring::compare(string_view)
, in cases where the string_viewoiiotool --stats
: Fixed bug where -iconfig
hints were not beingIBA::computePixelStats()
was not properly controlling thenthreads
parameter. #2289IBA::fixNonFinite()
: fixed impicit float/double casts to half. #2301