I am looking at the following innocent looking command line:
% cjxl flower.png flower.jxl
[...]
Encoding [Container | VarDCT, d1.000, effort: 7 | 3332-byte XMP],
Using the exact same source code but compiled on different architectures, here is what I am observing:
Debian arch | JPEG XL encoder v0.7.0 | Compressed byte |
---|---|---|
amd64 | [AVX2,SSE4,SSSE3,Unknown] | Compressed to 450659 bytes including container (1.051 bpp). |
arm64 | [NEON] | Compressed to 450660 bytes including container (1.051 bpp). |
armel | [Unknown] | Compressed to 450828 bytes including container (1.052 bpp). |
armhf | [NEON,Unknown] | Compressed to 450664 bytes including container (1.051 bpp). |
i386 | [SSE4,SSSE3,Unknown] | Compressed to 450678 bytes including container (1.051 bpp). |
ppc64el | [Unknown] | Compressed to 450858 bytes including container (1.052 bpp). |
I understand that for lossy compression conformance thresholds are defined in terms of RMSE and peak absolute error per sample. These thresholds are nonzero to allow implementations to use SIMD in the best possible way, which can lead to very slightly different results (obviously without any visible difference).
However in this case there seems to be at least another factor: armel
and ppc64el
seems to default to the non-SIMD codepath, yet they produce a different output.
Hence my question: how many VarDCT implementations are there ?
For reference:
% file flower.png
flower.png: PNG image data, 2268 x 1512, 8-bit/color RGB, non-interlaced