Changelog History
Page 1
-
v2.3.1.1
December 07, 2020 -
v2.3.1.0
November 09, 2020 -
v2.3.0.0
September 24, 2020 -
v2.2.9.0 Changes
December 01, 2020๐ Release 2.2.9 (1 Dec 2020) -- compared to 2.2.8
- TIFF: Fix reading files with "separate" planarconfig and rowsperstrip more
than 1. #2757 (2.3.0.1/2.2.9) - ๐ง RAW: add "raw:user_flip" input configuration hint to control this option
in the underlying libraw. #2769 (2.3.1.0) - PNG: Read Exif data from PNG files. #2767
- BMP: Fix reading BMP images with bottom-to-top row order. #2776
- ๐ Work to ensure that OIIO will build correctly against the upcoming
Imath 3.0 and OpenEXR 3.0. - ๐ Make the OIIO CMake files work properly if OIIO is a subproject. Also
๐จ various other CMake script refactoring. #2770
- TIFF: Fix reading files with "separate" planarconfig and rowsperstrip more
-
v2.2.8.0 Changes
November 02, 2020๐ Release 2.2.8 (1 Nov 2020) -- compared to 2.2.7
- ๐ Fix that ImageBuf images backed by ImageCache, could hold an outdated copy
of the image if it was in the imagecache once, then changed on disk. #2696 - ๐ Fix stack overflow crash in IBA::colorconvert of unusually wide images.
#2716 - ๐ Fix boost linkage problem on Windows. #2727
- ๐ Fix broken reads of 16 bit iff files. #2736
- ๐ Fix make_texture incorrectly setting tile sizes. #2737
- ๐ Fix incorrect ARM NEON code in simd.h. #2739
- ๐ Improve oiiotool --chappend and --siappend, allowing an optional modifier
":n=" to specify the number of images from the stack to be combined by
having their channels or subimages appended. #2709 - ๐ WebP: add support for requesting compression "lossless". #2726
- ๐ Improve build system for finding Python, now if a specific version is not
0๏ธโฃ requested, default to whichever is found rather than always defaulting to
Python 2.7. #2705 #2764 - ๐ Fix deprecation warnings when building with very new PugiXML versions.
#2733 - Fix ImageCache bug: add_tile/get_tile not properly honoring when
chend < chbegin
it should get all channels. #2742 - ๐ Fix build break when strutil.h was included in Cuda 10.1 code. #2743
- ๐ Docs: Make readthedocs generate downloadable htm as well as pdf. #2746
- ๐ Improve oiiotool's guessing about the desired output format based on
inputs (in the absence of-d
to specify the format). #2717 - ๐ JPEG output: add support for writing progressive JPEGS (set the
attribute "jpeg:progressive" to 1). #2749 - WebP input improvements including: RGB images are kept as RGB instead of
always adding alpha; more efficient by skipping alpha premultiplication
when it's unnecessary; now can read animated WebP images as multi-subimage
files. #2730 - ๐ Docs: ImageInput chapter now has an example of reading image data into
separate per-channel buffers. #2756 - ๐ Fixes to build against recent changes in OpenColorIO v2 master. #2765
- ๐ Fix that ImageBuf images backed by ImageCache, could hold an outdated copy
-
v2.2.7.0 Changes
October 01, 2020๐ 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
- oiiotool new command:
-
v2.2.6.1 Changes
September 01, 2020๐ 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
0๏ธโฃ 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
0๏ธโฃ 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:
- 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:
- Video files:
- Fix possible infinite loop in the FFMpeg-based reader. #2576
(2.1.15/2.2.3)
- Fix possible infinite loop in the FFMpeg-based reader. #2576
Developer goodies / internals:
- ๐ argparse.h:
- attrdelegate.h:
- New
as_vec<>
method returns the whole attribute as a std::vector.
#2528 (2.2.2)
- New
- filesystem.h:
- fmath.h:
- clamp() is 2x faster. #2491 (2.1.12/2.2.2)
- Very minor fix to OIIO::clamp(), shouldn't affect normal use with
๐ floats at all, but fixed a subtle quasi-bug in OSL. #2594 (2.1.15/2.2.3) - madd() is improved especially on platforms without fma hardware
#2492 (2.1.12/2.2.2) - Perf improvements to
fast_sin
,fast_cos
#2495 (2.1.12/2.2.2) - New
safe_fmod()
is faster than std::fmod. #2495 (2.1.12/2.2.2) - New
fast_neg
is faster than simple negation in many cases, if you
don't care that -(0.0) is 0.0 (rather than a true -0.0). #2495
(2.1.12/2.2.2) - Add vint4, vint8, and vint16 versions of
clamp()
. #2617 (2.2.4)
- oiioversion.h:
- paramlist.h:
- platform.h:
OIIO_PRETTY_FUNCTION
definition is more robust for weird compilers
(will fall back to__FUNCTION__
if all else fails). #2413 (2.2.0)OIIO_ALIGN
definition is more robust, will fall back to C++11
alignas when not a compiler with special declspecs (instead of being
a compile time error!). #2412 (2.2.0)- A variety of
OIIO_PRAGMA_...
macros have been added to help deal
with compiler-specific pragmas. #2467 (2.2.1)
- simd.h:
- vfloat3 has added a
normalize()
,length()
, andlength2()
methods, to more closely match the syntax of Imath::Vec3f. #2437
(2.1.11/2.2.0) - fix errors in vbool == and !=. #2463 (2.1.11/2.2.1)
- Add float3 versions of abs, sign, ceil, floor, and round (they already
existed for float4, float8, float16, but not float4). #2612 (2.2.4) - Improved support for ARM NEON SIMD (caveat: this is still not well
โ tested). #2614 (2.2.4) - Improve performance for many float8/int8 functions and operators when
โ running on only 4-wide hardware, by using two 4-wide instructions
โช instead of reverting to scalar. #2621
- vfloat3 has added a
- span.h:
- Allow the constructor from
std::vector
to allow vectors with custom
allocators. #2533 (2.2.2)
- Allow the constructor from
- strutil.h / ustring.h:
- New
Strutil::concat()
andustring::concat()
concatenate two
๐จ strings, more efficiently thansprintf("%s%s")
by avoiding any
unnecessary copies or temporary heap allocations. #2478 (2.2.1) - Strutil::upper() and lower() return all-upper and all-lowercase
versions of a string (liketo_lower
andto_upper
, but not in-place
modifications of the existing string). #2525 (2.2.2/2.1.13) Strutil::repeat()
has been internally rewritten to more efficient by
avoiding any unnecessary copies or temporary heap allocations. #2478
(2.2.1)
- New
- typedesc.h:
- TypeDesc has additional helpers of constexpr values TypeFloat2,
TypeVector2, TypeVector4, TypeVector2i, TypePointer. #2592 (2.1.16/2.2.3)
- TypeDesc has additional helpers of constexpr values TypeFloat2,
- unordered_map_concurrent.h:
- Fix missing decrement of
size()
aftererase()
. #2624 (2.2.4)
- Fix missing decrement of
- ๐
More reshuffling of printf-style vs fmt-style string formatting. #2424
(2.2.0) #2649 (2.2.4) - ๐ Internals: changed a lot of assertions to only happen in debug build mode,
๐ and changed a lot that happen in release builds to only print the error
but not force a termination. #2435 (2.1.11/2.2.0) - Internals: Replaced most uses of
boost::thread_specific_ptr
with C++11
thread_local
. #2431 (2.2.0) - oiiotool: Big overhaul and simplification of internals. #2586 #2589 (2.2.3)
๐ Build/test system improvements and platform ports:
- ๐ท CMake build system and scripts:
- New non-default CMake build flag
EXTRA_WARNINGS
, when turned on, will
cause gcc and clang to compile with -Wextra. This identified many new
โ warnings (mostly about unused parameters) and fixes were applied in
#2464, #2465, #2471, #2475, #2476. (2.2.1) - FindOpenColorIO.cmake now correctly discerns the OCIO version (2.2.1),
and now sets up a true imported target. #2529 (2.2.2) - FindOpenEXR.cmake has better detection of debug openexr libraries.
#2505 (2.2.2/2.1.13) - Additional cmake controls to customize required vs optional
dependencies:REQUIRED_DEPS
(list of dependencies normally optional
that should be treated as required) andOPTIONAL_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. #2507
(2.2.2/2.1.13) - Fix exported cmake config file, it was not ensuring that the Imath
headers properly ended up in the config include path. #2515
(2.2.2/2.1.13) - Change all CMake references to PACKAGE_FOUND to Package_Found (or
๐ฆ whatever capitalization matches the actual package name). #2569 (2.2.2) - The exported CMake config files now set cmake variable
๐OpenImageIO_PLUGIN_SEARCH_PATH
#2584 (2.1.16/2.2.3) - Improved hints printed about missing dependencies. #2682 (2.2.6)
- New non-default CMake build flag
- ๐ Dependency version support:
- Pybind11 is no longer auto-downloaded. It is assumed to be
๐ pre-installed. A scriptsrc/build-scripts/build_pybind11.bash
is
provided for convenience if you lack a system install. #2503 (2.2.2)
โฌ๏ธ Bump the minimum pybind11 version that we accept, to 2.4.2 #2453,
๐ and add fixes to allow support of pybind11 2.5. #2637 (2.2.4) - fmt libray: Un-embed fmt headers. If they are not found on the system
๐ at build time, they will be auto-downloaded. #2439 (2.2.0) - Support for building against libraw 0.20. #2484 (2.2.1) #2580 (2.2.3)
- Build properly against OpenColorIO's current master (which is the
in-progress work on OCIO v2). #2530 (2.2.2) - Fix static boost to not overlink on Windows. #2537 (2.2.2)
- Fix build breaks against TOT libtiff master, which had
#define
clashes with our GPSTag enum values. #2539 (2.2.2) - Ensure compatibility and clean builds with clang 10. #2518 (2.2.2/2.1.3)
- Support verified for gcc 10, added to CI tests. #2590 (2.2.3)
- Support for Qt 5.15. #2605 (2.2.3)
- Fixes to support OpenColorIO 2.0. #2636 (2.2.4)
- Build against more recent versions of fmtlib. #2639 (2.2.4)
- Included scripts to download and build libtiff #2543 (2.1.13/2.2.2),
PugiXML #2648 (2.2.4), zlib, libpng, libjpeg-turbo. #2663 (2.2.5) - Minor fixes for libheif 1.8. #2685 (2.2.6)
- Add a build_libtiff.bash script to make it easy to build the libtiff
dependency. #2543 (2.1.13/2.2.2) - "tinyformat" is no longer used, even optionally. We have switched
entirely to fmtlib, which is more similar to the upcoming C++20
std::format. #2647 (2.2.4)
- Pybind11 is no longer auto-downloaded. It is assumed to be
- โ
Testing and Continuous integration (CI) systems:
- Mostly retire TravisCI for ordinary Linux x64 and Mac builds, now we
๐ณ rely on GitHub Actions CI. Nightly test added. Use ASWF docker images
๐ง to test exactly against VFX Platform 2019 and 2020 configurations.
#2563 (2.2.2) #2579 (2.2.3) - Add Travis test for arm64 (aka aarch64) builds. This is still a work
โ in progress, and not all testsuite tests pass. #2634 (2.2.4) - Our CI tests now have a "bleeding edge" matrix entry that tests against
๐ the current TOT master build of libtiff, openexr (#2549), and pybind11
(#2556). (2.2.2) - GitHub CI tests, when they fail, leave behind an "artifact" tar file
โ containing the output of the tests, so that they can be easily
downloaded and inspected (or used to create new reference output).
#2606 (2.2.4) - CI Mac tests switch to Python 3.8. (2.2.4)
- Windows CI switched from using Vcpkg to building its own dependencies.
#2663 (2.2.5) - Testing of TGA now assumes the test images are in the oiio-images
project, not separately downloaded (the download location disappeared
from the net). #2512 (2.2.2) - Beef up OpenEXR compliance tests, many more examples from
openexr-images, including many corrupted image failure cases. #2607
(2.2.4)
- Mostly retire TravisCI for ordinary Linux x64 and Mac builds, now we
- ๐ Progress on support for using Conan for dependency installation. This is
๐ง experimental, it can't yet build all dependencies. Work in progress.
#2461 (2.2.1) - โก๏ธ The version of gif.h that we embed for GIF output has been updated.
#2466 (2.2.1) - The
farmhash
functions have been cleaned up to be more careful that none
of their internal symbols are left visible to the linker. #2473 (2.2.1) - ๐ Clarification about .so name versioning: In supported releases, .so
contains major.minor, but in master (where ABI is not guaranteed stable,
we name major.minor.patch). #2488 (2.2.1) - Protect against certain compiler preprocessor errors for user programs
that include strutil.h but also includefmt
on its own. #2498.
(2.1.12/2.2.2) - ๐ Build: All the
build_foo.bash
helper scripts now useset -ex
to ensure
that if any individual commands in the script fails, the whole thing will
exit with a failure. #2520 (2.2.2/2.1.3) - ๐ Fix compiler warning about incorrect extra braces. #2554 (2.2.2)
- ๐ All build-scripts bash scripts now use /usr/bin/env to find bash. #2558
(2.2.2) - Avoid possible link errors by fully hiding IBA functions taking IplImage
parameters, when no OpenCV headers are encountered. #2568 (2.2.2) - โ In (obsolete) FindOpenImageIO.cmake, avoid CMake warnings by changing
the nameOPENIMAGEIO_FOUND
->OpenImageIO_FOUND
. #2578 (2.2.3) - ๐ Moved headers that are not part of OIIO's supported public API, but that
still must be installed to be transitively included, do a "detail"
subdirectory. #2648 (2.2.4) - ๐ Fix many Mingw compiler warnings. #2657 (2.1.19/2.2.5)
- Windows: Improve Strutil::get_rest_arguments() handling of long path
๐ syntax ("\\?\"
style). #2661 (2.1.19/2.2.6) - ๐ Fix compilation error with armv7 + x86. #2660 (2.2.6)
๐ Notable documentation changes:
- Many enhancements in the ImageBuf chapter. #2460 (2.1.11/2.2.0)
- The
LICENSE-THIRD-PARTY.md
file has been reorganized to be clearer,
grouping parts with identical licenses. #2469 (2.2.1) And renamed to
"THIRD-PARTY.md" to avoid confusing GitHub's reporting of the project's
license. (2.2.6) - ๐ Many fixes to the new readthedocs documentation, especially fixes to
section cross-references and links. - ๐ Improved INSTALL instructions. (2.2.2/2.1.13)
- ๐ Fix a variety of breaks on ReadTheDocs. #2581
- ๐ Improve the way we discuss optional modifiers.
- Document the PNG output controls for compression level. #2642 (2.2.4)
- ๐ Lots of spell check / typo fixes in docs and comments. #2678 (2.2.6)
- ๐ INSTALL.md: remove misleading old Windows build instructions. #2679 (2.2.6)
- ๐ New file .git-blame-ignore-revs lists the hashes of commits that only
performed bulk reformatting, so that they don't misattribute authorship
or modification date. Everybody do this in your local repo:
git config blame.ignoreRevsFile .git-blame-ignore-revs
#2683 (2.2.6)
-
v2.2.6.0 Changes
August 29, 2020๐ 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.
-
v2.2.5.0 Changes
August 11, 2020๐ Second and hopefully last 2.2 beta, with some minor fixes and last-minute additions (but none that break compatibility).
-
v2.2.4.0 Changes
July 31, 2020๐ 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
0๏ธโฃ 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
0๏ธโฃ 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:
- Video files:
- Fix posible infinite loop in the FFMpeg-based reader. #2576
(2.1.15/2.2.3)
- Fix posible infinite loop in the FFMpeg-based reader. #2576
Developer goodies / internals:
- ๐ argparse.h:
- attrdelegate.h:
- New
as_vec<>
method returns the whole attribute as a std::vector.
#2528 (2.2.2)
- New
- filesystem.h:
- fmath.h:
- clamp() is 2x faster. #2491 (2.1.12/2.2.2)
- Very minor fix to OIIO::clamp(), shouldn't affect normal use with
๐ floats at all, but fixed a subtle quasi-bug in OSL. #2594 (2.1.15/2.2.3) - madd() is improved especially on platforms without fma hardware
#2492 (2.1.12/2.2.2) - Perf improvements to
fast_sin
,fast_cos
#2495 (2.1.12/2.2.2) - New
safe_fmod()
is faster than std::fmod. #2495 (2.1.12/2.2.2) - New
fast_neg
is faster than simple negation in many cases, if you
don't care that -(0.0) is 0.0 (rather than a true -0.0). #2495
(2.1.12/2.2.2) - Add vint4, vint8, and vint16 versions of
clamp()
. #2617 (2.2.4)
- oiioversion.h:
- paramlist.h:
- platform.h:
OIIO_PRETTY_FUNCTION
definition is more robust for weird compilers
(will fall back to__FUNCTION__
if all else fails). #2413 (2.2.0)OIIO_ALIGN
definition is more robust, will fall back to C++11
alignas when not a compiler with special declspecs (instead of being
a compile time error!). #2412 (2.2.0)- A variety of
OIIO_PRAGMA_...
macros have been added to help deal
with compiler-specific pragmas. #2467 (2.2.1)
- simd.h:
- vfloat3 has added a
normalize()
,length()
, andlength2()
methods, to more closely match the syntax of Imath::Vec3f. #2437
(2.1.11/2.2.0) - fix errors in vbool == and !=. #2463 (2.1.11/2.2.1)
- Add float3 versions of abs, sign, ceil, floor, and round (they already
existed for float4, float8, float16, but not float4). #2612 (2.2.4) - Improved support for ARM NEON SIMD (caveat: this is still not well
โ tested). #2614 (2.2.4) - Improve performance for many float8/int8 functions and operators when
โ running on only 4-wide hardware, by using two 4-wide instructions
โช instead of reverting to scalar. #2621
- vfloat3 has added a
- span.h:
- Allow the constructor from
std::vector
to allow vectors with custom
allocators. #2533 (2.2.2)
- Allow the constructor from
- strutil.h / ustring.h:
- New
Strutil::concat()
andustring::concat()
concatenate two
๐จ strings, more efficiently thansprintf("%s%s")
by avoiding any
unnecessary copies or temporary heap allocations. #2478 (2.2.1) - Strutil::upper() and lower() return all-upper and all-lowercase
versions of a string (liketo_lower
andto_upper
, but not in-place
modifications of the existing string). #2525 (2.2.2/2.1.13) Strutil::repeat()
has been internally rewritten to more efficient by
avoiding any unnecessary copies or temporary heap allocations. #2478
(2.2.1)
- New
- typedesc.h:
- TypeDesc has additional helpers of constexpr values TypeFloat2,
TypeVector2, TypeVector4, TypeVector2i, TypePointer. #2592 (2.1.16/2.2.3)
- TypeDesc has additional helpers of constexpr values TypeFloat2,
- unordered_map_concurrent.h:
- Fix missing decrement of
size()
aftererase()
. #2624 (2.2.4)
- Fix missing decrement of
- ๐
More reshuffling of printf-style vs fmt-style string formatting. #2424
(2.2.0) #2649 (2.2.4) - ๐ Internals: changed a lot of assertions to only happen in debug build mode,
๐ and changed a lot that happen in release builds to only print the error
but not force a termination. #2435 (2.1.11/2.2.0) - Internals: Replaced most uses of
boost::thread_specific_ptr
with C++11
thread_local
. #2431 (2.2.0) - ๐ Python: Fixed a bug that lost certain string arguments, especially when
passing a TypeDesc as its string equivalent. #2587 (2.1.16/2.2.3) - oiiotool: Big overhaul and simplification of internals. #2586 #2589 (2.2.3)
๐ Build/test system improvements and platform ports:
- ๐ท CMake build system and scripts:
- New non-default CMake build flag
EXTRA_WARNINGS
, when turned on, will
cause gcc and clang to compile with -Wextra. This identified many new
โ warnings (mostly about unused parameters) and fixes were applied in
#2464, #2465, #2471, #2475, #2476. (2.2.1) - FindOpenColorIO.cmake now correctly discerns the OCIO version (2.2.1),
and now sets up a true imported target. #2529 (2.2.2) - FindOpenEXR.cmake has better detection of debug openexr libraries.
#2505 (2.2.2/2.1.13) - Additional cmake controls to customize required vs optional
dependencies:REQUIRED_DEPS
(list of dependencies normally optional
that should be treated as required) andOPTIONAL_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. #2507
(2.2.2/2.1.13) - Fix exported cmake config file, it was not ensuring that the Imath
headers properly ended up in the config include path. #2515
(2.2.2/2.1.13) - Change all CMake references to PACKAGE_FOUND to Package_Found (or
๐ฆ whatever capitalization matches the actual package name). #2569 (2.2.2) - The exported CMake config files now set cmake variable
๐OpenImageIO_PLUGIN_SEARCH_PATH
#2584 (2.1.16/2.2.3)
- New non-default CMake build flag
- Continuous integration (CI) systems:
- Mostly retire TravisCI for ordinary Linux x64 and Mac builds, now we
๐ณ rely on GitHub Actions CI. Nightly test added. Use ASWF docker images
๐ง to test exactly against VFX Platform 2019 and 2020 configurations.
#2563 (2.2.2) #2579 (2.2.3) - Add Travis test for arm64 (aka aarch64) builds. This is still a work
โ in progress, and not all testsuite tests pass. #2634 (2.2.4) - Our CI tests now have a "bleeding edge" matrix entry that tests against
๐ the current TOT master build of libtiff, openexr (#2549), and pybind11
(#2556). (2.2.2) - GitHub CI tests, when they fail, leave behind an "artifact" tar file
โ containing the output of the tests, so that they can be easily
downloaded and inspected (or used to create new reference output).
#2606 (2.2.4) - CI Mac tests switch to Python 3.8. (2.2.4)
- Mostly retire TravisCI for ordinary Linux x64 and Mac builds, now we
- ๐ Dependency version support:
- Pybind11 is no longer auto-downloaded. It is assumed to be
๐ pre-installed. A scriptsrc/build-scripts/build_pybind11.bash
is
provided for convenience if you lack a system install. #2503 (2.2.2)
โฌ๏ธ Bump the minimum pybind11 version that we accept, to 2.4.2 #2453,
๐ and add fixes to allow support of pybind11 2.5. #2637 (2.2.4) - fmt libray: Un-embed fmt headers. If they are not found on the system
๐ at build time, they will be auto-downloaded. #2439 (2.2.0) - Support for building against libraw 0.20. #2484 (2.2.1) #2580 (2.2.3)
- Build properly against OpenColorIO's current master (which is the
in-progress work on OCIO v2). #2530 (2.2.2) - Fix static boost to not overlink on Windows. #2537 (2.2.2)
- Fix build breaks against TOT libtiff master, which had
#define
clashes with our GPSTag enum values. #2539 (2.2.2) - Ensure compatibility and clean builds with clang 10. #2518 (2.2.2/2.1.3)
- Support verified for gcc 10, added to CI tests. #2590 (2.2.3)
- Support for Qt 5.15. #2605 (2.2.3)
- Fixes to support OpenColorIO 2.0. #2636 (2.2.4)
- Build against more recent versions of fmtlib. #2639 (2.2.4)
- Pybind11 is no longer auto-downloaded. It is assumed to be
- ๐ Progress on support for using Conan for dependency installation. This is
๐ง experimental, it can't yet build all dependencies. Work in progress.
#2461 (2.2.1) - โก๏ธ The version of gif.h that we embed for GIF output has been updated.
#2466 (2.2.1) - The
farmhash
functions have been cleaned up to be more careful that none
of their internal symbols are left visible to the linker. #2473 (2.2.1) - ๐ Clarification about .so name versioning: In supported releases, .so
contains major.minor, but in master (where ABI is not guaranteed stable,
we name major.minor.patch). #2488 (2.2.1) - Protect against certain compiler preprocessor errors for user programs
that include strutil.h but also inculdefmt
on its own. #2498.
(2.1.12/2.2.2) - โ
Testing of TGA now assumes the test images are in the oiio-images project,
not separately downloaded (the download location disappered from the net).
#2512 (2.2.2) - ๐ Build: All the
build_foo.bash
helper scripts now useset -ex
to ensure
that if any individual commands in the script fails, the whole thing will
exit with a failure. #2520 (2.2.2/2.1.3) - ๐ Fix compiler warning about incorrect extra braces. #2554 (2.2.2)
- ๐ All build-scripts bash scripts now use /usr/bin/env to find bash. #2558
(2.2.2) - Avoid possible link errors by fully hiding IBA functions taking IplImage
parameters, when no OpenCV headers are encountered. #2568 (2.2.2) - โ In (obsolete) FindOpenImageIO.cmake, avoid CMake warnings by changing
the nameOPENIMAGEIO_FOUND
->OpenImageIO_FOUND
. #2578 (2.2.3) - โ
Beef up OpenEXR compliance tests, many more examples from openexr-images,
including many corrupted image failure cases. #2607 (2.2.4) - "tinyformat" is no longer used, even optionally. We have switched entirely
to fmtlib, which is more similar to the upcoming C++20 std::format.
#2647 (2.2.4) - ๐ Moved headers that are not part of OIIO's supported public API, but that
still must be installed to be transitively included, do a "detail"
subdirectory. #2648 (2.2.4)
๐ Notable documentation changes:
- Many enhancements in the ImageBuf chapter. #2460 (2.1.11/2.2.0)
- The
LICENSE-THIRD-PARTY.md
file has been reorganized to be clearer,
grouping parts with identical licenses. #2469 - ๐ Many fixes to the new readthedocs documentation, especially fixes to
section cross-references and links. - ๐ Improved INSTALL instructions. (2.2.2/2.1.13)
- ๐ Fix a variety of breaks on ReadTheDocs. #2581
- ๐ Improve the way we discuss optional modifiers.
- Document the PNG output controls for compression level. #2642 (2.2.4)