On Wed, 28 Sep 2022 03:12:55 GMT, Sergey Bylokhov <s...@openjdk.org> wrote:
> This is a request to cleanup the shared code for the colors conversions. That > code still uses some wrappers which can be simplified and/or deleted after > KCMS removal. For example, each conversion from one color space to another > creates 3 wrappers - for the first color profile, the second color profile, > and one to combine the first two. But for the lcms library we only need the > list of color profiles and rendering intent -> only one transform object can > be used. > > The new constructor for the LCMSTransform is > [added](https://github.com/openjdk/jdk/pull/10459/files#diff-7448ea8346eb08c6ec1a518e3c3399d7d078a514c07956ee7e8e2b5be3d082e1R77) > and now used everywhere: > `LCMSTransform(int renderingIntent, ICC_Profile... profiles)` > It will wrap the `cmsCreateMultiprofileTransform` [function > ](https://github.com/openjdk/jdk/pull/10459/files#diff-eed6ddb15e9c5bdab9fc3b3930d5d959966165d9622ddd293e8572489adea98bR202) > in LCMS library: > > I tried to preserve the current behavior, and as a result, two "workarounds" > are used for the next bugs. > * [JDK-8216369](https://bugs.openjdk.org/browse/JDK-8216369): after the > cleanup it became obvious that we use a hardcoded value for the first > rendering > [intent](https://github.com/openjdk/jdk/pull/10459/files#diff-e3d6eea060882cab00827c00e1a83b0e0a5b2a31fa9a9aa2122841bbd57c4a6dR473). > There is a code to fetch the intent from the color profile but I postponed > use it for now because some of our built-in profiles use different default > intents. > * [JDK-8272860](https://bugs.openjdk.org/browse/JDK-8272860): the old code > always fetched some information from the color profile header as result we > cache the headers for any profiles we used. This cache workaround the > JDK-8272860 while the direct access to the profile via LCMS library could > fail. The new code intentionally caches the > [header](https://github.com/openjdk/jdk/pull/10459/files#diff-7448ea8346eb08c6ec1a518e3c3399d7d078a514c07956ee7e8e2b5be3d082e1R91). > > Notes: > * The old wrappers used a rendering intent for each intermediate transform, > the LCMS use only one intent > * The old wrappers could throw the cmm exception if the rendering intent was > not supported. The LCMS ignores unsupported intents and uses some > [default](https://github.com/LuaDist/lcms/blob/master/doc/TUTORIAL.TXT#L1094) > * The old wrappers had a way to specify the input and output profiles, the > LCMS library uses the first profile as input and the last profile as output. > Those parameters are > [removed](https://github.com/openjdk/jdk/pull/10459/files#diff-81b49f067b32296497e9e727bda25efe0b7f84fb2c05645eb6b272bfc32469f1L38) > * If at some point the new CMS library will be added it will be easy to > integrate it using XXCMS plugin, instead of using some specific library logic > in the shared code Thank you! I'll do a `/integrate defer` to make a [trick](https://github.com/openjdk/jdk/pull/10757#issuecomment-1290762995). ------------- PR: https://git.openjdk.org/jdk/pull/10459