lut_inverse_interp16: interpolate degenerate zeros in TRC curves
commit9c5cf06617232b00842383ff001c49fe058fc6b4
authornoel <noel@chromium.org>
Thu, 18 Jun 2015 05:34:51 +0000 (17 22:34 -0700)
committerCommit bot <commit-bot@chromium.org>
Thu, 18 Jun 2015 05:35:19 +0000 (18 05:35 +0000)
treeccbc8e97cbed56411d56370ffdc1d468f5c0ee9f
parent2490eae99cb38140e27dcb3e89fb21385a84f676
lut_inverse_interp16: interpolate degenerate zeros in TRC curves

Degenerate TRC have runs of 0's / 1's from the left / right edge of
the TRC curve (a curve we want to invert, to be able to use a color
profile as a monitor profile). The inverse TRC of degenerate curves
is not well-defined in the run of 0's area (infinite slope).

Some monitor calibration software in the field produce 0 runs, thus
degenerate TRC, and QCMS setting the inverse of the run to 0's area
to 0 causes a color cast (burn) effect on web images corrected with
the associated color profile: issue 492379.

Fix that by interpolating the (imaginary) inverse in the 0 run area
instead of clamping the inverse to 0. Add more assert conditions to
the curve inversion algorithm and also check for an inverted binary
search range (these two changes from the related Mozilla bug).

CQ_INCLUDE_TRYBOTS=tryserver.blink:linux_blink_rel,mac_blink_rel,win_blink_rel
BUG=458024

Review URL: https://codereview.chromium.org/1185163003

Cr-Commit-Position: refs/heads/master@{#334996}
third_party/qcms/README.chromium
third_party/qcms/src/transform_util.c