2019-05-15 at 14:10 #17453
Cheap widegamut monitors with HW calibration have become popular although they suffer from a few issues like bad color uniformity and bad vendor calibration software.
First one cannot be solved by DisplayCAL right now (lack of HW support in GPU for this task right now), but the second one could be improved since a few vendors provide free to use multiplattform (Win,macOS,Linux) SDKs to write calibration into monitor. An example of this are Dell and HP although just for some models.
Most of these widgeamuts do not use a LUT3D for emulating smaller than native gamuts like sRGB or AdobeRGB but a simpler approach based in lut-matrix-lut structures.
How are they supposed to work (from vendor software perspective, what they are doing right now)?
-input data from GPU is modified from supposed to be 2.2 gamma into linear response (gamma 1) with a Xbit x 1024 entry LUT x 3 channels
-linearized input for each 3 channels can be added so you can get emulated primaries like:
Remu = K11 * Rnative + K12 * Gnative + K13 * Bnative
Gemu = K21 * Rnative + K22 * Gnative + K23 * Bnative
Bemu = K31 * Rnative + K32 * Gnative + K33 * Bnative
which is a 3×3 matrix. If matrix is identity matrix you get native gamut since primaries are not mixed.
-emulated and gamma 1.0 encoded colorspace should be re-encoded in desired/expected gamma for display. This is done with another LUT made of Xbit x 1024 entry LUT x 3 channels.
Some vendors like Dell assume a de-gamma of 2.2 in 1st lut (PreLUT), computes matrix as desired per user + native measurement or RGB(+CMY?) and then writes mixed in 1 lut the desired target reeconding of gamma (2.2, 2.4, sRGB) and whitepoint and grey neutrality correction. This may not be the best approach, it is just an example.
The SDKs provided by these vendors are stright worward. You have a functionality to write or read this calibration in a
So it should be able even for inexperienced programmers to write a custom app on their own that read/writes that data if DisplayCAL does not want to use/integrate non GNU libs (although free to use).
The main problem for them should be how to compute data. Here DisplayCAL could be helpful.
Suggested feature (can be refined):
1- user factory resets the OSD modes which support HW cal
2-user uses DispayCAL to calibrate and profile that native gamut OSD mode to some target… like D65 white, gamma 2.2 relative. As a result of this calibration and profile user gets an ICM file with grey & white calibration in VCGT and a simple or complex gamut description in profile data
3-user selects such custom profile and another idealized one that want to emulate, like sRGB or AdobeRGB and click in a button “Create lut-matrix-lut” like in DisplayCAL’s LUT3D maker.
4-The DisplayCAL computes such vendor agnostic 16bit lut-matrix-lut in a binary or text file.
5- now depending on which level of integration with free to use vendor SDK DisplayCAL has, user can
a)upload that calibration to monitor
b)write (or let community do it) an app to upload vendor agnostic Lut-matrix-lut to monitor
6-“profile only” in DisplayCAL the OSD mode on which HW calibration was written choosing to write no-calibration to GPU VCGT.
Of course in highest level of integration with these or others vendor SDKs it could be just one button: user clicks, measurements start and in the end f this process user has an OSD mode with desired gamut emulation, white pint and gamma… and a profile instalation popup like in an usual DisplayCAL calibration&profiling.
Is this feasible?
SDKs & doc: