Skip to content

Conversation

@TodicaIonut
Copy link
Contributor

This PR adds a new compression algorithm optimized for Deep images.
During the development, deep images were shrunk by 20-30% compared to ZIPS with similar compression performance and 35-45% smaller when the compression level is turned to the max (about a 3-4x slowdown compared to ZIPS). The decompression speed slightly faster than ZIPS.

I did not spend a lot of time trying to optimize for non-Deep images, but
certain small non-deep example images with HALF pixels yielded a slightly worse compression rate compared to ZIPS.

The core algorithm is implemented in Blosc, with ZSTD codec with an appropriate data prefiltering.
The main advantage is that it offers a unified API access to multiple codecs and is under active development. Also the binary serialization stays compatible if ever we want to change the codecs/config parameters in the future, without introducing breaking changes.

Open questions:
I still have not figured out how to integrate Blosc properly into the OpenEXR build pipeline.

zstd support has not yet been merged into OpenEXR. cc @pleprince @clusty

I created the branch and called it zstd-beta.

Signed-off-by: Todica Ionut <todicaionut2000111@gmail.com>
Signed-off-by: Todica Ionut <todicaionut2000111@gmail.com>
Signed-off-by: Todica Ionut <todicaionut2000111@gmail.com>
Signed-off-by: Todica Ionut <todicaionut2000111@gmail.com>
Signed-off-by: Todica Ionut <todicaionut2000111@gmail.com>
Signed-off-by: Todica Ionut <todicaionut2000111@gmail.com>
Signed-off-by: Todica Ionut <todicaionut2000111@gmail.com>
Signed-off-by: Todica Ionut <todicaionut2000111@gmail.com>
Signed-off-by: Todica Ionut <todicaionut2000111@gmail.com>
@TodicaIonut TodicaIonut marked this pull request as draft October 14, 2025 08:33
Signed-off-by: Todica Ionut <todicaionut2000111@gmail.com>
Signed-off-by: Todica Ionut <todicaionut2000111@gmail.com>
Signed-off-by: Todica Ionut <todicaionut2000111@gmail.com>
Signed-off-by: Todica Ionut <todicaionut2000111@gmail.com>
Signed-off-by: Todica Ionut <todicaionut2000111@gmail.com>
Signed-off-by: Todica Ionut <todicaionut2000111@gmail.com>
Signed-off-by: Todica Ionut <todicaionut2000111@gmail.com>
Signed-off-by: Todica Ionut <todicaionut2000111@gmail.com>
Signed-off-by: Todica Ionut <todicaionut2000111@gmail.com>
Signed-off-by: Todica Ionut <todicaionut2000111@gmail.com>
Signed-off-by: Todica Ionut <todicaionut2000111@gmail.com>
Signed-off-by: Todica Ionut <todicaionut2000111@gmail.com>
Signed-off-by: Todica Ionut <todicaionut2000111@gmail.com>
Signed-off-by: Todica Ionut <todicaionut2000111@gmail.com>
@lgritz
Copy link
Contributor

lgritz commented Oct 15, 2025

You know, prior to submitting a PR, you can just push to your fork and have it run CI and iterate until you have everything working, and then submit the PR.

Signed-off-by: Todica Ionut <todicaionut2000111@gmail.com>
Signed-off-by: Todica Ionut <todicaionut2000111@gmail.com>
Signed-off-by: Todica Ionut <todicaionut2000111@gmail.com>
Signed-off-by: Todica Ionut <todicaionut2000111@gmail.com>
Signed-off-by: Todica Ionut <todicaionut2000111@gmail.com>
Signed-off-by: Todica Ionut <todicaionut2000111@gmail.com>
Signed-off-by: Todica Ionut <todicaionut2000111@gmail.com>
Signed-off-by: Todica Ionut <todicaionut2000111@gmail.com>
Signed-off-by: Todica Ionut <todicaionut2000111@gmail.com>
Signed-off-by: Todica Ionut <todicaionut2000111@gmail.com>
Signed-off-by: Todica Ionut <todicaionut2000111@gmail.com>
Signed-off-by: Todica Ionut <todicaionut2000111@gmail.com>
Signed-off-by: Todica Ionut <todicaionut2000111@gmail.com>
Signed-off-by: Todica Ionut <todicaionut2000111@gmail.com>
Signed-off-by: Todica Ionut <todicaionut2000111@gmail.com>
Signed-off-by: Todica Ionut <todicaionut2000111@gmail.com>
Signed-off-by: Todica Ionut <todicaionut2000111@gmail.com>
Signed-off-by: Todica Ionut <todicaionut2000111@gmail.com>
Signed-off-by: Todica Ionut <todicaionut2000111@gmail.com>
Signed-off-by: Todica Ionut <todicaionut2000111@gmail.com>
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.

2 participants