## Version 3.1.5 (April 11, 2022)
Patch release that address various bug/build/doc issues:
* Add backwards-compatibilty flags to the core library to match
original behavior of the the c++ library. Fixes reading of certain
files by the new core.
* Fix build failures on MSVC14 and MSVC 2022
* Fix build failure on latest 64-bit Ubuntu
* Documentation refers to primary branch as "main"
* Update the CI workflow matrix to VFX-CY2022
* Update auto-fetch Imath version to v3.1.5
## Version 3.1.3 (October 27, 2021)
Patch release with a change to default zip compression level:
* Default zip compression level is now 4 (instead of 6), which in our
tests improves compression times by 2x with only a tiny drop in
compression ratio.
* ``setDefaultZipCompression()`` and ``setDefaultDwaCompression()``
now set default compression levels for writing.
* The Header how has ``zipCompressionLevel()`` and
``dwaCompressionLevel()`` to return the levels used for writing.
Also, various bug fixes, build improvements, and documentation
updates. In particular:
* Fixes a build failure with Imath prior to v3.1
* Fixes a bug in detecting invalid chromaticity values
## Version 3.1.2 (October 4, 2021)
Patch release with various bug fixes, build improvements, and
documentation updates. In particular:
* Fix a test failure on arm7
* Proper handling of pthread with glibc 2.34+
* Miscellaneous fixes for handling of invalid input by the new
OpenEXRCore library
With this version, the OpenEXR technical documentation formerly
distributed exclusivly as pdf's is now published online at
https://openexr.readthedocs.io, with the document source now
maintained as .rst files in the repo's docs subfolder.
## Version 3.1.1 (August 2, 2021)
Patch release that fixes build failures on various systems, introduces
CMake ``CMAKE_CROSSCOMPILING_EMULATOR`` support, and fixes a few other
minor issues.
## Version 3.1.0 (July 22, 2021)
The 3.1 release of OpenEXR introduces a new library, OpenEXRCore,
which is the result of a significant re-thinking of how OpenEXR
manages file I/O and provides access to image data. It begins to
address long-standing scalability issues with multithreaded image
reading and writing.
The OpenEXRCore library provides thread-safe, non-blocking access to
files, which was not possible with the current API, where the
framebuffer management is separate from read requests. It is written
entirely in C and provides a new C-language API alongside the existing
C++ API. This new low-level API allows applications to do custom
unpacking of EXR data, such as on the GPU, while still benefiting from
efficient I/O, file validation, and other semantics. It provides
efficient direct access to EXR files in texturing applications. This C
library also introduces an easier path to implementing OpenEXR
bindings in other languages, such as Rust.
The 3.1 release represents a technology preview for upcoming
releases. The initial release is incremental; the existing API and
underlying behavior has not changed. The new API is available now for
performance validation testing, and then in future OpenEXR releases,
the C++ API will migrate to use the new core in stages. It is not the
intention to entirely deprecate the C++ API, nor must all applications
re-implement EXR I/O in terms of the C library. The C API does not,
and will not, provide the rich set of utility classes that exist in
the C++ layer. The 3.1 release of the OpenEXRCore library simply
offers new functionality for specialty applications seeking the
highest possible performance. In the future, the ABI will evolve, but
the API will remain consistent, or only have additions.
## Version 3.0.5 (July 1, 2021)
Patch release that fixes problems with library symlinks and
pkg-config, as well as miscellaneous bugs/security issues.
## Version 3.0.4 (June 3, 2021)
Patch release that corrects a problem with the release version number
of v3.0.2/v3.0.3:
## Version 3.0.3 (May 18, 2021)
Patch release that fixes a regression in v3.0.2 the prevented headers
from being installed properly.
# Version 3.0.2 (May 17, 2021)
Patch release with miscellaneous bug/build fixes, including:
* Fix TimeCode.frame max value
* Don't impose C++14 on downstream projects
* Restore fix to macOS universal 2 build lost from #854
* Imath auto-build version defaults to v3.0.2
## Version 3.0.1 (April 1, 2021)
Major release with major build restructing, security improvements, and
new features:
* Restructuring:
- The IlmBase/PyIlmBase submodules have been separated into the
Imath project, now included by OpenEXR via a CMake submodule
dependency, fetched automatically via CMake's FetchContent if
necessary.
- The library is now called ``libOpenEXR`` (instead of
``libIlmImf``). No header files have been renamed, they retain
the ``Imf`` prefix.
- Symbol linkage visibility is limited to specific public symbols.
* Build improvements:
- No more simultaneous static/shared build option.
- Community-provided support for bazel.
* New Features:
- ID Manifest Attributes, as described in ["A Scheme for Storing
Object ID Manifests in OpenEXR
Images"](https://doi.org/10.1145/3233085.3233086), Peter Hillman,
DigiPro 18: Proceedings of the 8th Annual Digital Production
Symposium, August 2018.
- New program: exrcheck validates the contents of an EXR file.
* Changes:
- EXR files with no channels are no longer allowed.
- Hard limit on the size of deep tile sizes; tiles must be less than
2^30 pixels.
- Tiled DWAB files used STATIC_HUFFMAN compression.
- ``Int64`` and ``SInt64`` types are deprecated in favor of
``uint64_t`` and ``int64_t``.
- Header files have been pruned of extraneous ``#include``'s
("Include What You Use"), which may generate compiler errors in
application source code from undefined symbols or
partially-defined types. These can be resolved by identifying and
including the appropriate header.
## Version 2.5.3 (August 12, 2020)
Patch release with various bug/security fixes and build/install fixes, plus a performance optimization:
### Summary
* Various sanitizer/fuzz-identified issues related to handling of invalid input
* Fixes to misc compiler warnings
* Cmake fix for building on arm64 macOS (#772)
* Read performance optimization (#782)
* Fix for building on non-glibc (#798)
* Fixes to tests
## Version 2.5.2 (June 15, 2020)
Patch release with various bug/security fixes and build/install fixes.
### Summary
* [CVE-2020-15305] Invalid input could cause a heap-use-after-free error in DeepScanLineInputFile::DeepScanLineInputFile()
* [CVE-2020-15306] Invalid chunkCount attributes could cause heap buffer overflow in getChunkOffsetTableSize()
* [CVE-2020-15304] Invalid tiled input file could cause invalid memory access TiledInputFile::TiledInputFile()
* OpenEXRConfig.h now correctly sets OPENEXR_PACKAGE_STRING to "OpenEXR" (rather than "IlmBase")
* Various Windows build fixes
Changelog:
2.5.1:
A patch release that corrects the SO version for the v2.5 release, which missed getting bumped in v2.5.0.
This release also fixes an improper failure in IlmImfTest when running on ARMv7 and AAarch64.
2.5.0:
Minor release with miscellaneous bug fixes and small features
## Summary
* No more build-time header generation: toFloat.h, eLut.h,
b44ExpLogTable.h, and dwaLookups.h are now ordinary header files, no
longer generated on the fly.
* New StdISSTream class, an "input" stringstream version of StdOSStream
* New Matrix22 class in Imath
* Chromaticity comparison operator now includes white (formerly ignored)
* Various cmake fixes
* Bug fixes for various memory leaks
* Bug fixes for various invalid memory accesses
* New checks to detect damaged input files
* OpenEXR_Viewers has been deprecated, removed from the top-level
cmake build and documentation.
Summary:
Various fixes for memory leaks and invalid memory accesses
Various fixes for integer overflow with large images.
Various cmake fixes for build/install of python modules.
ImfMisc.h is no longer installed, since it's a private header.
Summary of changes:
All code compiles without warnings on gcc, clang, msvc
Cleanup of license and copyright notices
floating-point exception handling is disabled by default
New Slice::Make method to reliably compute base pointer for a slice.
Miscellaneous bug fixes
This version fixes the following security vulnerabilities:
CVE-2018-18444 Issue #351 Out of Memory
CVE-2018-18443 Issue #350 heap-buffer-overflow
OpenEXR v2.3.0 has been released and is available for download.
Features/Improvements:
ThreadPool overhead improvements, enable custom thread pool to be registered via ThreadPoolProvider class
Fixes to enable custom namespaces for Iex, Imf
Improve read performance for deep/zipped data, and SIMD-accelerated uncompress support
Added rawPixelDataToBuffer() function for access to compressed scanlines
Iex::BaseExc no longer derived from std::string.
Imath throw() specifiers removed
Initial Support for Python 3
Bugs:
25+ various bug fixes (see detailed Release Notes for the full list)
Build Fixes:
Various fixes to the cmake and autoconf build infrastructures
Various changes to support compiling for C++11 / C++14 / C++17 and GCC 6.3.1
Various fixes to address Windows build issues
60+ total build-related fixes (see detailed Release Notes for the full list)
November 30, 2017 - OpenEXR v2.2.1 has been released and is available
for download.
This maintenance release addresses the reported OpenEXR security
vulnerabilities, specifically CVE-2017-9110, CVE-2017-9111,
CVE-2017-9112, CVE-2017-9113, CVE-2017-9114, CVE-2017-9115,
CVE-2017-9116.
Problems found with existing digests:
Package fotoxx distfile fotoxx-14.03.1.tar.gz
ac2033f87de2c23941261f7c50160cddf872c110 [recorded]
118e98a8cc0414676b3c4d37b8df407c28a1407c [calculated]
Package ploticus-examples distfile ploticus-2.00/plnode200.tar.gz
34274a03d0c41fae5690633663e3d4114b9d7a6d [recorded]
da39a3ee5e6b4b0d3255bfef95601890afd80709 [calculated]
Problems found locating distfiles:
Package AfterShotPro: missing distfile AfterShotPro-1.1.0.30/AfterShotPro_i386.deb
Package pgraf: missing distfile pgraf-20010131.tar.gz
Package qvplay: missing distfile qvplay-0.95.tar.gz
Otherwise, existing SHA1 digests verified and found to be the same on
the machine holding the existing distfiles (morden). All existing
SHA1 digests retained for now as an audit trail.
This get's over issues such as encountered with PIC builds.
Upstream issue : https://github.com/openexr/openexr/issues/128
Revbump due to new dependency on GCC_REQD+= 4.3
(additional patches available upon request for bmake test target)
* DreamWorks Lossy Compression A new high quality, high performance lossy compression codec contributed by DreamWorks Animation. This codec allows control over variable lossiness to balance visual quality and file size. This contribution also includes performance improvements that speed up the PIZ codec.
* IlmImfUtil A new library intended to aid in development of image file manipulation utilities that support the many types of OpenEXR images.
This release includes a refactoring of the optimised read paths for RGBA data, optimisations for some of the python bindings to Imath, improvements to the cmake build environment as well as additional documentation describing deep data in more detail.
* Temporarily turning off optimisation code path
* Added additional tests for future optimisation refactoring
* Fixes for StringVectors
* Additional checks for type mismatches
* Fix for Composite Deep Scanline
* Updated Documentation
* Updated Namespacing mechanism
* Fixes for succd & predd
* Fixes for FPE control registers
* Additional checks and tests on DeepImages, scanlines and tiles
* Folded in Autodesk read optimisations for RGB(A) files
* Updated the bootstrap scripts to use libtoolize if glibtoolize isn't available on darwin.
* Numerous minor fixes, missing includes etc
* Added new atttribute types:
M33dAttribute 3x3 double-precision matrix
M44dAttribute 4x4 double-precision matrix
V2d 2D double-precision vector
V3d 3D double-precision vector
* Bug fix: crash when reading a damaged image file (found
by Apple). An exception thrown inside the PIZ Huffman
decoder bypasses initialization of an array of pointers.
The uninitialized pointers are later passed to operator
delete.
* Bug fix: crash when reading a damaged image file (found by
Apple). Computing the size of input certain buffers may
overflow and wrap around to a small number, later causing
writes beyond the end of the buffer.
* In the "Technical Introduction" document, added
Premultiplied vs. Un-Premulitiplied Color section:
states explicitly that pixels with zero alpha and non-zero
RGB are allowed, points out that preserving such a pixel can
be a problem in application programs with un-premultiplied
internal image representations.
* exrenvmap improvements:
- New command line flags set the type of the input image to
latitude-longitude map or cube-face map, overriding the
envmap attribute in the input file header.
- Cube-face maps can now be assembled from or split into six
square sub-images.
- Converting a cube-face map into a new cube-face map with
the same face size copies the image instead of resampling
it. This avoids blurring when a cube-face map is assembled
from or split into sub-images.
* Updated standard chromaticities in ImfAcesFile.cpp to match
final ACES (Academy Color Encoding Specification) document.
* Added worldToCamera and worldToNDC matrices to ImfStandardAttributes.h
* Increased the maximum length of attribute and channel names
from 31 to 255 characters. For files that do contain names
longer than 31 characters, a new LONG_NAMES_FLAG in the fil
version number is set. This flag causes older versions of
the IlmImf library (1.6.1 and earlier) to reject files with
long names. Without the flag, older library versions would
mis-interpret files with long names as broken.
* Reading luminance/chroma-encoded files via the RGBA
interface is faster: buffer padding avoids cache thrashing
for certain image sizes, redundant calls to saturation()
have been eliminated.
* Added "hemispherical blur" option to exrenvmap.
* Added experimental version of I/O classes for ACES file
format (restricted OpenEXR format with special primaries
and white point); added exr2aces file converter.
* Added new constructors to classes Imf::RgbaInputFile and
Imf::TiledRgbaInputFile. The new constructors have a
layerName parameter, which allows the caller to specify
which layer of a multi-layer or multi-view image will
be read.
* A number of member functions in classes Imf::Header,
Imf::ChannelList and Imf::FrameBuffer have parameters
of type "const char *". Added equivalent functions that
take "const std::string &" parameters.
* Added library support for Weta Digital multi-view images:
StringVector attribute type, multiView standard attribute
of type StringVector, utility functions related to grouping
channels into separate views.
This changes the buildlink3.mk files to use an include guard for the
recursive include. The use of BUILDLINK_DEPTH, BUILDLINK_DEPENDS,
BUILDLINK_PACKAGES and BUILDLINK_ORDER is handled by a single new
variable BUILDLINK_TREE. Each buildlink3.mk file adds a pair of
enter/exit marker, which can be used to reconstruct the tree and
to determine first level includes. Avoiding := for large variables
(BUILDLINK_ORDER) speeds up parse time as += has linear complexity.
The include guard reduces system time by avoiding reading files over and
over again. For complex packages this reduces both %user and %sys time to
half of the former time.