From 4551fbc7856f87bd24405ef09497251e31c483b7 Mon Sep 17 00:00:00 2001 From: Sergey Bylokhov Date: Thu, 27 Jul 2023 19:11:34 -0700 Subject: [PATCH] Update LCMSTransform.java --- .../sun/java2d/cmm/lcms/LCMSTransform.java | 68 ++++++++++--------- 1 file changed, 37 insertions(+), 31 deletions(-) diff --git a/src/java.desktop/share/classes/sun/java2d/cmm/lcms/LCMSTransform.java b/src/java.desktop/share/classes/sun/java2d/cmm/lcms/LCMSTransform.java index fd7907eacfdfd..30fb55076a772 100644 --- a/src/java.desktop/share/classes/sun/java2d/cmm/lcms/LCMSTransform.java +++ b/src/java.desktop/share/classes/sun/java2d/cmm/lcms/LCMSTransform.java @@ -163,38 +163,9 @@ private void doTransform(LCMSImageLayout in, LCMSImageLayout out) { } } if (panama) { - try (Arena arena = Arena.ofConfined()) { - MemorySegment srcNative; - if (in.dataType == DT_INT) { - srcNative = arena.allocateArray(JAVA_INT, - (int[]) in.dataArray); - } else if (in.dataType == DT_SHORT) { - srcNative = arena.allocateArray(JAVA_SHORT, - (short[]) in.dataArray); - } else { - srcNative = arena.allocateArray(JAVA_BYTE, - (byte[]) in.dataArray); - } - MemorySegment dstNative = arena.allocate(out.dataArrayLength); - cmsDoTransformLineStride.invoke(MemorySegment.ofAddress(tfm.ID), - srcNative.asSlice(in.offset), - dstNative.asSlice(out.offset), - in.width, in.height, - in.nextRowOffset, - out.nextRowOffset, 0, 0); - MemorySegment dst; - if (out.dataType == DT_INT) { - dst = MemorySegment.ofArray((int[]) out.dataArray); - } else if (out.dataType == DT_SHORT) { - dst = MemorySegment.ofArray((short[]) out.dataArray); - } else { - dst = MemorySegment.ofArray((byte[]) out.dataArray); - } - dst.copyFrom(dstNative); - } catch (Throwable e) { - throw new CMMException(e.getMessage()); - } + panama(in, out, tfm); } else { + // via jni LCMS.colorConvert(tfm.ID, in.width, in.height, in.offset, in.nextRowOffset, out.offset, out.nextRowOffset, in.dataArray, out.dataArray, @@ -203,6 +174,41 @@ private void doTransform(LCMSImageLayout in, LCMSImageLayout out) { Reference.reachabilityFence(tfm); // prevent deallocation of "tfm.ID" } + private static void panama(LCMSImageLayout in, LCMSImageLayout out, + NativeTransform tfm) { + try (Arena arena = Arena.ofConfined()) { + MemorySegment srcNative; + if (in.dataType == DT_INT) { + srcNative = arena.allocateArray(JAVA_INT, + (int[]) in.dataArray); + } else if (in.dataType == DT_SHORT) { + srcNative = arena.allocateArray(JAVA_SHORT, + (short[]) in.dataArray); + } else { + srcNative = arena.allocateArray(JAVA_BYTE, + (byte[]) in.dataArray); + } + MemorySegment dstNative = arena.allocate(out.dataArrayLength); + cmsDoTransformLineStride.invoke(MemorySegment.ofAddress(tfm.ID), + srcNative.asSlice(in.offset), + dstNative.asSlice(out.offset), + in.width, in.height, + in.nextRowOffset, + out.nextRowOffset, 0, 0); + MemorySegment dst; + if (out.dataType == DT_INT) { + dst = MemorySegment.ofArray((int[]) out.dataArray); + } else if (out.dataType == DT_SHORT) { + dst = MemorySegment.ofArray((short[]) out.dataArray); + } else { + dst = MemorySegment.ofArray((byte[]) out.dataArray); + } + dst.copyFrom(dstNative); + } catch (Throwable e) { + throw new CMMException(e.getMessage()); + } + } + /** * Returns {@code true} if lcms may support this format directly. */