Color management in JPEG XL is a complicated story. Ideally it's the best possible design: every JPEG XL codestream has a defined color profile (either ICC profile or abbreviated color space parameters) and it should be converted to the display color space. Unfortunately the status quo is not that ideal.
ICCv2 and v4 are yet another 100-plus-page standards.
The full conversion process is a many-to-many relation; not only the display color space is defined, but the image color space can vary.
There is no public domain color management system (CMS) to my knowledge.
There is no single-file CMS to my knowledge either. The closest is probably skcms, a part of Skia, which consists of two source files and two header files, and it is already ~4000 lines of C++.
As such, I don't think J40 will ever implement the full ICC profile by itself (at least in C). This is also the case in libjxl, where either skcms or Little CMS 2 can be used, but it is a bit baffling to require an external library to implement the full format. Any other ideas are welcomed.
Anyway, this decision leads to the following subtasks:
[ ] Fully implement the ICC codec
[ ] Handle abbreviated color space parameters
[ ] Implement and expose API functions for external CMSes (e.g. J40_USE_LCMS2)
Color management in JPEG XL is a complicated story. Ideally it's the best possible design: every JPEG XL codestream has a defined color profile (either ICC profile or abbreviated color space parameters) and it should be converted to the display color space. Unfortunately the status quo is not that ideal.
As such, I don't think J40 will ever implement the full ICC profile by itself (at least in C). This is also the case in libjxl, where either skcms or Little CMS 2 can be used, but it is a bit baffling to require an external library to implement the full format. Any other ideas are welcomed.
Anyway, this decision leads to the following subtasks:
J40_USE_LCMS2
)