Skip to content

Conversation

@cary-ilm
Copy link
Member

@cary-ilm cary-ilm commented Mar 16, 2025

Review the v3.3.3 release here

Website preview: https://openexr--2004.org.readthedocs.build/en/2004/

cary-ilm and others added 17 commits March 9, 2025 16:55
…1916)

* Release notes for 3.3.2

Signed-off-by: Cary Phillips <[email protected]>

* 3.3.2 release date Nov 10

Signed-off-by: Cary Phillips <[email protected]>

* Add AcademySoftwareFoundation#1912 to release notes

Signed-off-by: Cary Phillips <[email protected]>

* release notes and website news for v3.3.2

Signed-off-by: Cary Phillips <[email protected]>

---------

Signed-off-by: Cary Phillips <[email protected]>
…reFoundation#1910)

Bumps [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish) from 1.11.0 to 1.12.2.
- [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases)
- [Commits](pypa/gh-action-pypi-publish@fb13cb3...15c56db)

---
updated-dependencies:
- dependency-name: pypa/gh-action-pypi-publish
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…n#1913)

Bumps [scikit-build-core](https://github.com/orgs/scikit-build) from 0.8.1 to 0.10.7.
- [Commits](https://github.com/orgs/scikit-build/commits)

---
updated-dependencies:
- dependency-name: scikit-build-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…ation#1914)

Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.27.0 to 3.27.1.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](github/codeql-action@6624720...4f3212b)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…ation#1918)

Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.27.1 to 3.27.4.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](github/codeql-action@4f3212b...ea9e4e3)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…ndation#1922)

When we implemented the "rule of 5" (PR AcademySoftwareFoundation#601) in 2019, I added code to
testAttributes.cpp to validate the behavior, specifically related to
the TypedAttribute class, but in retrospect, this code isn't reliable,
so I propose eliminating the test altogether.

The test counts invocations of the various constructors, destructors,
and move/assignment operators, expecting them to be consistent, but
compilers can optionally optimize some of these operations away,
producing inconsistent results.

In particular, a Debug build on Windows produces different results
from a Release build. Our CI has not historically tested a Windows
Debug build, which explains why we never caught this. The exact
behavior may have also changed with C++17. All the more reason to
avoid such picky tests.

This does not change the library code, only the tests.

Signed-off-by: Cary Phillips <[email protected]>
…on#1920)

The CI was failing to actually set OPENEXR_THREADING_ENABLED for the
macOS and Windows builds.

And the Windows build as failing with threading disabled, due to a
missing header.

Signed-off-by: Cary Phillips <[email protected]>
…ation#1923)

Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.27.4 to 3.27.5.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](github/codeql-action@ea9e4e3...f09c1c0)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
)

* Workaround CI workflow for vfx 2022/2021

Build for VFX reference platform prior to 2023, which requires a
workaround to run an old version of glibc required by the ASWF Docker
images.

This doesn't easily integrate with the existing CI workflow, and it
can be deprecated entirely once we've moved beyond support for the
old CentOS-based VFX reference platform years.

See this discussion for details:
https://academysoftwarefdn.slack.com/archives/C0169RX7MMK/p1732574400981949

Signed-off-by: Cary Phillips <[email protected]>

* remove centos7 label

Signed-off-by: Cary Phillips <[email protected]>

---------

Signed-off-by: Cary Phillips <[email protected]>
Bumps [actions/cache](https://github.com/actions/cache) from 4.1.2 to 4.2.0.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](actions/cache@6849a64...1bd1e32)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…ation#1932)

Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.27.5 to 3.27.6.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](github/codeql-action@f09c1c0...aa57810)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…on#1924)

Bumps [pypa/cibuildwheel](https://github.com/pypa/cibuildwheel) from 2.21.3 to 2.22.0.
- [Release notes](https://github.com/pypa/cibuildwheel/releases)
- [Changelog](https://github.com/pypa/cibuildwheel/blob/main/docs/changelog.md)
- [Commits](pypa/cibuildwheel@7940a4c...ee63bf1)

---
updated-dependencies:
- dependency-name: pypa/cibuildwheel
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…wareFoundation#1921)

* Restructure CI to use reusable steps, and add new checks

The goal of this change is to add tests to catch some recent
regressions that the existing CI missed:

* Validate that the proper files get installed. A recent
  innocuous-seeming change to the cmake config caused libdeflate files
  to make it into the installation and we didn't catch it.

  This change introduces a validation step that compares the
  install_mantifest.txt file from each job to a reference maintained
  in share/ci/install_manifest. Each job has a "build" number that
  identifies the reference manifest.

  NOTE: This means that all future changes to installed headers and
  libraries must be reflected in these manifests.

* Validate building against prebuilt/external Imath and libdeflate
  libraries, and also test the "force internal" option.

* Validate building with custom namespaces

To make the workflow files easier to maintain, this splits two parts:

* The ci_steps.yml file declares a common set of steps for Linux,
  macOS, and Windows, and a set of variables named to match the
  various CMake configuration options.

* The ci_workflow.yml invokes these steps with a succession of builds
  that provide collections of CMake settings, which is passes to the
  reusable workflow via the "with:" statement. The "with:" statements
  provide default variable settings, which means each build specifies
  only non-default settings, for a compact summary of what's unique
  about that job.

Some notes:

* By default, the builds now pre-install Imath and libdeflate, so that
  the main OpenEXR build picks them up. A special build now validates
  the behavior of OPENEXR_FORCE_INTERNAL_IMATH and
  OPENEXR_FORCE_INTERNAL_DEFLATE, which were previously untested.

* For each OS, we now build and test these configurations:
  1. Release
  2. Debug
  3. Static
  4. Threading disabled
  5. pkgconfig, docs, examples, tools disabled. This was also previously not
     tested.
  6. Legacy VFX reference platform compiler(s) and/or os(s)

* The "label:" setting forms the description of the job on the GitHub
  Acions page, prepended with the OS and "build" number, which makes
  it easier to cross reference between the entries on the Actions page
  and the workflow file.

* We no longer build with clang on Linux, since we do a clang build on
  macOS.

Signed-off-by: Cary Phillips <[email protected]>

* Add Linux clang build

Signed-off-by: Cary Phillips <[email protected]>

---------

Signed-off-by: Cary Phillips <[email protected]>
…ation#1939)

Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.27.6 to 3.27.9.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](github/codeql-action@aa57810...df409f7)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…reFoundation#1937)

Bumps [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish) from 1.12.2 to 1.12.3.
- [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases)
- [Commits](pypa/gh-action-pypi-publish@15c56db...67339c7)

---
updated-dependencies:
- dependency-name: pypa/gh-action-pypi-publish
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* update pyproject.toml and python workflows: Add numpy dependency

- Additional dependencies required for the build environment
Numpy must be installed in the python environment where the build is being performed in order to build.

- Automatic installation of dependencies like a normal python package
When installing this package, if numpy does not exist in the python environment, it will be installed automatically.

Signed-off-by: HyeongSeok Kim <[email protected]>

* update python-wheels-*yml, pyproject.toml: remove BEFORE_BUILD, remove numpy in build requires

- python-wheels-*yml: When testing on other PRs, I found that dependencies were not properly installed for each build case, so I added this code. However, this PR is for adding numpy dependencies, so it is not needed as @JeanChristopheMorinPerso suggested.

- pyproject.toml: If you are going to do any additional work with the build artifacts, like generating stubs, you will need numpy in your build environment, but it is not needed at the moment. I agree with the review by @JeanChristopheMorinPerso.

Signed-off-by: HyeongSeok Kim <[email protected]>

---------

Signed-off-by: HyeongSeok Kim <[email protected]>
darbyjohnston and others added 12 commits March 19, 2025 15:43
objectToBox2f was failing to store the value in the proper argument.

Also, the test was never actually creating a box out of floats, it was
only testing integers.

This also fixes an as-yet-undetected error with the use of Imf
namespace in PyOpenEXR_old.cpp, where there's already a `using`
statement.

Signed-off-by: Cary Phillips <[email protected]>
Copy/paste error in objectToV3, should be looking for a.size()==3, not 2.

Signed-off-by: Cary Phillips <[email protected]>
Signed-off-by: Cary Phillips <[email protected]>
Convert the quantization from a massive table to a bit-fiddling
algorithm which is more code but significantly faster (in some cases,
almost 2x). This also eliminates the giant lookup tables from the
binary, which reduces the compiled size of the core library. Beside
the identity table (value in, same value out), those quantization
tables are preserved in the unit tests to ensure correct behavior.

The tests are defaulted to a light-er weight test, which should test
the variety of error tolerance ranges, but there is a deeper test
that can be enabled by switching an ifdef in the compression tables
test.

As a motivation for improvement, with this change, the size for the
core library is reduced by more than half (2.2MB to 0.99MB) while
performance is improved from 0.23s for an encode to 0.155s on
x86_64 with avx2 / f16c enabled anyway. Other platforms will
hopefully experience similar improvements.

Signed-off-by: Kimball Thurston <[email protected]>
uses likely / unlikely macros to better guide branch predictor,
convert some static / local functions from functions to macros to avoid
having to take the address of a local variable, preventing register
optimizations, and finally guide pointer aliasing to get some
speed improvements in the huf encoder / decoder.

Signed-off-by: Kimball Thurston <[email protected]>
The fast unpack routines for 3 and 4 channels were not designed to
handle sub-sampled images, but need to appear before other fallback
disablement in the choice logic. Until that choice logic can be
simplified, add additional checks to avoid heading to that branch

Signed-off-by: Kimball Thurston <[email protected]>
…Foundation#1961)

* Update security policy regarding backporting patches

This wording captures our policy: we commit to fixes for main and the
most recent minor release, but prior to that, discussed on a
case-by-case basis. Better to leave it at than than attempt to be more
specific, since those specifics can be determined based on the situation.

Signed-off-by: Cary Phillips <[email protected]>

* Support policy for 2.0-2.4:

2.4 was the first release by the ASWF, recent enough to negotiate
patches. Prior to that our knowledge is so limited, and CMake support
was so fragile, that we should not even entertain the possibility.

Signed-off-by: Cary Phillips <[email protected]>

---------

Signed-off-by: Cary Phillips <[email protected]>
…reFoundation#1966)

The libdeflate and Imath installation steps require bash, not
PowerShell, otherwise they fail silently and fall back to the auto
fetch/build. And the install manifests for the validation were
correspondingly incorrect.

Signed-off-by: Cary Phillips <[email protected]>
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 3 to 4.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](actions/upload-artifact@v3...v4)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>
This requires all artifacts to have unique names, so the
install_manifest.txt files need to uploaded with the name that
includes the os and build number.

Signed-off-by: Cary Phillips <[email protected]>
peterhillman and others added 26 commits March 19, 2025 15:44
* update all upload-artifact usage to v4

Signed-off-by: Kimball Thurston <[email protected]>

* replicate unique name change

Signed-off-by: Kimball Thurston <[email protected]>

* Update .github/workflows/python-wheels-publish-test.yml

-${{ env.INSTALL_MANIFEST }} should definitely not get appended to the name, that was appropriate only for the install manifests in ci_steps.yml.

Signed-off-by: Cary Phillips <[email protected]>

* Update .github/workflows/python-wheels-publish.yml

-${{ env.INSTALL_MANIFEST }} should definitely not get appended to the name, that was appropriate only for the install manifests in ci_steps.yml.

Signed-off-by: Cary Phillips <[email protected]>

* Update .github/workflows/ossfuzz_workflow.yml

Signed-off-by: Cary Phillips <[email protected]>

* Update .github/workflows/python-wheels.yml

Signed-off-by: Cary Phillips <[email protected]>

* Update .github/workflows/scorecard.yml

Signed-off-by: Cary Phillips <[email protected]>

* Update .github/workflows/scorecard.yml

Signed-off-by: Cary Phillips <[email protected]>

---------

Signed-off-by: Kimball Thurston <[email protected]>
Signed-off-by: Cary Phillips <[email protected]>
Co-authored-by: Cary Phillips <[email protected]>
…tion#1973)

* clean up exrmetrics help, simplify JSON output

Signed-off-by: Peter Hillman <[email protected]>

* revert exrmetrics to returncode 0 with --help

Signed-off-by: Peter Hillman <[email protected]>

---------

Signed-off-by: Peter Hillman <[email protected]>
* Add website page for exrmetrics

Signed-off-by: Cary Phillips <[email protected]>

* add missing backticks

Signed-off-by: Cary Phillips <[email protected]>

* usage examples

Signed-off-by: Cary Phillips <[email protected]>

* run description

Signed-off-by: Cary Phillips <[email protected]>

* Use a pool...

Signed-off-by: Cary Phillips <[email protected]>

---------

Signed-off-by: Cary Phillips <[email protected]>
the std::filesystem::path mechanism is reasonable, but needs to be told
it to look for a utf-8 string, and is not automatically that, and the
standards committee must have realized there were issues and change the
api in c++20

Signed-off-by: Kimball Thurston <[email protected]>
…on#1974)

If the zipped data unpacks to a buffer which is too large, but still
within the scratch buffer size, could potentially write past the end of
the buffer

Signed-off-by: Kimball Thurston <[email protected]>
…reFoundation#1980)

for deep frame buffers, when filling, if the caller does not provide
output memory for a particular sample set, do not crash.

Signed-off-by: Kimball Thurston <[email protected]>
If the chunk table is unable to provide the specified data window, do
not allocate the frame buffer (or cache framebuffer) to that size

Signed-off-by: Kimball Thurston <[email protected]>
In SSE, we were incrementing a pointer as if it were a uint16_t, not an
si128, causing out of bounds accesses on non-block aligned chunks.

Similarly, simplify the alignment logic and check return values and
pointers in related accesses (non-block aligned linear lut lookup).

Signed-off-by: Kimball Thurston <[email protected]>
If we know the file size, we should truncate the header parse to only
read the file at most. Otherwise, if the file size is unknown (stream)
then be conservative (and slower) and read 1 byte at a time for the
header parse. Once we know the file, that should be free to read chunks

Signed-off-by: Kimball Thurston <[email protected]>
…#1986)

* Adjust the clamping on the dwa compression

The dwa compression is not truly a quality level like other things, so a
maximal value is controlling quantization, not quality. A value of 0 is
allowed, but negative is not.

Signed-off-by: Kimball Thurston <[email protected]>

* improve tests for dwa compression level set

Signed-off-by: Kimball Thurston <[email protected]>

---------

Signed-off-by: Kimball Thurston <[email protected]>
…oundation#1983)

* add an OPENEXR_INSTALL_DEVELOPER_TOOLS option

This new option will control whether or not the tools
considered to be "developer" tools should be installed.
These are tools useful for developing and debugging OpenEXR
itself that might not be suitable for distribution to end
users. exrcheck is currently the only tool considered to be
a developer tool.

Signed-off-by: Matt Johnson <[email protected]>

* exrcheck: update CMakeLists.txt to enable developer tool installation

This makes the CMakeLists.txt for exrcheck look like other
tools like exrinfo and uncomments the CMake call to install
the tool. One difference though is that exrcheck is considered
a developer tool, and as such is only installed when the
OPENEXR_INSTALL_DEVELOPER_TOOLS option is enabled.

Signed-off-by: Matt Johnson <[email protected]>

---------

Signed-off-by: Matt Johnson <[email protected]>
* Update python-wheels.yml

Signed-off-by: Johnny <[email protected]>

* Update python-wheels-publish.yml

Signed-off-by: Johnny <[email protected]>

* Update python-wheels.yml

Signed-off-by: Johnny <[email protected]>

* Update python-wheels-publish.yml

Signed-off-by: Johnny <[email protected]>

* Update python-wheels-publish.yml

Signed-off-by: Johnny <[email protected]>

* Update python-wheels.yml

Signed-off-by: Johnny <[email protected]>

* Update python-wheels-publish-test.yml

Signed-off-by: Johnny <[email protected]>

---------

Signed-off-by: Johnny <[email protected]>
Co-authored-by: Cary Phillips <[email protected]>
… it will set this variable if OpenEXR is a subproject (AcademySoftwareFoundation#1987)

fix_1981: Don't rewrite the header file of libdeflate if not necessary. Avoid useless rebuilds after cmake reconfigure

fix_1981: Remove whitespace

Signed-off-by: Rasmus Debitsch <[email protected]>
Co-authored-by: Cary Phillips <[email protected]>
* docs: clarify exr2aces output format

Inspired by discussion in AcademySoftwareFoundation#1962.

Adds additional background to the ACES Image Container format produced by exr2aces.

Signed-off-by: Patrick Hulce <[email protected]>

* docs: update exr2aces.rst with recommended edits

Signed-off-by: Patrick Hulce <[email protected]>

* docs: add justified indentation

Signed-off-by: Patrick Hulce <[email protected]>

* Use inline link instead.

Co-authored-by: Cary Phillips <[email protected]>
Signed-off-by: Patrick Hulce <[email protected]>

* Remove link reference

Signed-off-by: Patrick Hulce <[email protected]>

---------

Signed-off-by: Patrick Hulce <[email protected]>
Co-authored-by: Cary Phillips <[email protected]>
* check string size when looking at the type

If corrupt files put nul or other non-printing characters in the string
data it can be difficult to debug when the type name is printed but does
not compare equal.

Signed-off-by: Kimball Thurston <[email protected]>

* remove duplicate max sizes

use the size defaults in the core library

Signed-off-by: Kimball Thurston <[email protected]>

* add check when in reduceMemory ahead of sample count alloc

when there are large tiles, need to check the memory prior to allocating
the sample count array. Additionally set a max tile size even when not
in reduce memory, although set larger than any known use for a tile size

Signed-off-by: Kimball Thurston <[email protected]>

---------

Signed-off-by: Kimball Thurston <[email protected]>
Co-authored-by: Cary Phillips <[email protected]>
…wareFoundation#1952)

* Fix issue with atomic_compare_exchange_strong due to inappropriate type on 32 bit platforms

Signed-off-by: Christopher Schwartz <[email protected]>

* Change casted type to match the type of the assigned to variable on both, 32 and 64 bit platforms

Signed-off-by: Christopher Schwartz <[email protected]>

---------

Signed-off-by: Christopher Schwartz <[email protected]>
Co-authored-by: Cary Phillips <[email protected]>
…#1999)

These apparently got overlooked when originally committing these
install manifests, and the test didn't fail because the numbers happen
to match as is, but that won't be the case going forward.

Signed-off-by: Cary Phillips <[email protected]>
Signed-off-by: Cary Phillips <[email protected]>
Note that libImath.so is missing from the install manifest because
OpenEXR v3.3 links against Imath 3.1, which has a bug where the
libImath.so symlink fails to get added to the install manifest, fixed
in PR AcademySoftwareFoundation#366.

Signed-off-by: Cary Phillips <[email protected]>
Signed-off-by: Cary Phillips <[email protected]>
@cary-ilm cary-ilm merged commit f8fc023 into AcademySoftwareFoundation:RB-3.3 Mar 20, 2025
33 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.