1 /*
2 * lcmsjnilib.c.c
3 *
4 *
5 * Created by Fabio Riccardi on 7/21/06.
6 * Copyright 2006 Light Crafts, Inc.. All rights reserved.
7 *
8 */
9 #include <ctype.h>
10 #include <stdint.h>
11
12 #ifndef AUTO_DEP
13 #include "javah/com_lightcrafts_utils_LCMSNative.h"
14 #endif
15
16 #include "LC_JNIUtils.h"
17 #include "lcms2.h"
18
19 #define DCRaw_METHOD(method) \
20 name4(Java_,com_lightcrafts_utils_LCMSNative,_,method)
21
Java_com_lightcrafts_utils_LCMSNative_cmsOpenProfileFromMem(JNIEnv * env,jclass clazz,jbyteArray jdata,jint size)22 JNIEXPORT jlong JNICALL Java_com_lightcrafts_utils_LCMSNative_cmsOpenProfileFromMem
23 (JNIEnv *env, jclass clazz, jbyteArray jdata, jint size)
24 {
25 char *data = (char *) (*env)->GetPrimitiveArrayCritical(env, jdata, 0);
26
27 cmsHPROFILE result = cmsOpenProfileFromMem(data, size);
28
29 (*env)->ReleasePrimitiveArrayCritical(env, jdata, data, 0);
30
31 return (jlong)(intptr_t) result;
32 }
33
Java_com_lightcrafts_utils_LCMSNative_cmsCreateRGBProfile(JNIEnv * env,jclass clazz,jdoubleArray jWhitePoint,jdoubleArray jPrimaries,jdouble gamma)34 JNIEXPORT jlong JNICALL Java_com_lightcrafts_utils_LCMSNative_cmsCreateRGBProfile
35 (JNIEnv *env, jclass clazz, jdoubleArray jWhitePoint, jdoubleArray jPrimaries, jdouble gamma)
36 {
37 double *WhitePoint = (double *) (*env)->GetPrimitiveArrayCritical(env, jWhitePoint, 0);
38 double *Primaries = (double *) (*env)->GetPrimitiveArrayCritical(env, jPrimaries, 0);
39 int i;
40 cmsHPROFILE result;
41
42 cmsCIExyY w = { WhitePoint[0], WhitePoint[1], WhitePoint[2] };
43
44 cmsCIExyYTRIPLE p = {
45 {Primaries[0], Primaries[1], Primaries[2]},
46 {Primaries[3], Primaries[4], Primaries[5]},
47 {Primaries[6], Primaries[7], Primaries[8]}
48 };
49
50 cmsToneCurve* gammaTable[3];
51 const int context = 1337;
52
53 gammaTable[0] = gammaTable[1] = gammaTable[2] = cmsBuildGamma(gamma == 1 ? (cmsContext) &context : 0, gamma);
54
55 result = cmsCreateRGBProfile(&w, &p, gammaTable);
56
57 // _cmsSaveProfile( result, "/Stuff/matrixRGB.icc" );
58
59 // cmsFreeToneCurve(gammaTable[0]);
60
61 (*env)->ReleasePrimitiveArrayCritical(env, jWhitePoint, WhitePoint, 0);
62 (*env)->ReleasePrimitiveArrayCritical(env, jPrimaries, Primaries, 0);
63
64 return (jlong)(intptr_t) result;
65 }
66
Java_com_lightcrafts_utils_LCMSNative_cmsCreateLab2Profile(JNIEnv * env,jclass clazz)67 JNIEXPORT jlong JNICALL Java_com_lightcrafts_utils_LCMSNative_cmsCreateLab2Profile
68 (JNIEnv *env, jclass clazz)
69 {
70 return (jlong)(intptr_t) cmsCreateLab2Profile(NULL);
71 }
72
Java_com_lightcrafts_utils_LCMSNative_cmsCloseProfile(JNIEnv * env,jclass clazz,jlong jhProfile)73 JNIEXPORT jboolean JNICALL Java_com_lightcrafts_utils_LCMSNative_cmsCloseProfile
74 (JNIEnv *env, jclass clazz, jlong jhProfile)
75 {
76 cmsHPROFILE hProfile = (cmsHPROFILE)(intptr_t) jhProfile;
77 return cmsCloseProfile(hProfile);
78 }
79
Java_com_lightcrafts_utils_LCMSNative_cmsCreateTransform(JNIEnv * env,jclass clazz,jlong inputProfile,jint inputFormat,jlong outputProfile,jint outputFormat,jint intent,jint flags)80 JNIEXPORT jlong JNICALL Java_com_lightcrafts_utils_LCMSNative_cmsCreateTransform
81 (JNIEnv *env, jclass clazz, jlong inputProfile, jint inputFormat,
82 jlong outputProfile, jint outputFormat, jint intent, jint flags)
83 {
84 return (jlong)(intptr_t) cmsCreateTransform((cmsHPROFILE)(intptr_t) inputProfile, inputFormat,
85 (cmsHPROFILE)(intptr_t) outputProfile, outputFormat,
86 intent, flags);
87 }
88
Java_com_lightcrafts_utils_LCMSNative_cmsCreateProofingTransform(JNIEnv * env,jclass clazz,jlong inputProfile,jint inputFormat,jlong outputProfile,jint outputFormat,jlong proofingProfile,jint intent,jint proofingIntent,jint flags)89 JNIEXPORT jlong JNICALL Java_com_lightcrafts_utils_LCMSNative_cmsCreateProofingTransform
90 (JNIEnv *env, jclass clazz, jlong inputProfile, jint inputFormat,
91 jlong outputProfile, jint outputFormat, jlong proofingProfile,
92 jint intent, jint proofingIntent, jint flags)
93 {
94 return (jlong)(intptr_t) cmsCreateProofingTransform((cmsHPROFILE)(intptr_t) inputProfile, inputFormat,
95 (cmsHPROFILE)(intptr_t) outputProfile, outputFormat,
96 (cmsHPROFILE)(intptr_t) proofingProfile,
97 intent, proofingIntent, flags);
98 }
99
100
Java_com_lightcrafts_utils_LCMSNative_cmsDeleteTransform(JNIEnv * env,jclass clazz,jlong hTransform)101 JNIEXPORT void JNICALL Java_com_lightcrafts_utils_LCMSNative_cmsDeleteTransform
102 (JNIEnv *env, jclass clazz, jlong hTransform)
103 {
104 cmsDeleteTransform((cmsHTRANSFORM)(intptr_t) hTransform);
105 }
106
cmsDoTransformGeneric(JNIEnv * env,jclass clazz,jlong hTransform,jbyteArray jinputBuffer,jbyteArray joutputBuffer,jint size)107 void cmsDoTransformGeneric
108 (JNIEnv *env, jclass clazz, jlong hTransform, jbyteArray jinputBuffer, jbyteArray joutputBuffer, jint size)
109 {
110 char *inputBuffer = (char *) (*env)->GetPrimitiveArrayCritical(env, jinputBuffer, 0);
111 char *outputBuffer = (char *) (*env)->GetPrimitiveArrayCritical(env, joutputBuffer, 0);
112
113 if (hTransform)
114 cmsDoTransform((cmsHTRANSFORM)(intptr_t) hTransform, inputBuffer, outputBuffer, size);
115
116 (*env)->ReleasePrimitiveArrayCritical(env, jinputBuffer, inputBuffer, 0);
117 (*env)->ReleasePrimitiveArrayCritical(env, joutputBuffer, outputBuffer, 0);
118 }
119
Java_com_lightcrafts_utils_LCMSNative_cmsDoTransform__J_3B_3BI(JNIEnv * env,jclass clazz,jlong hTransform,jbyteArray jinputBuffer,jbyteArray joutputBuffer,jint size)120 JNIEXPORT void JNICALL Java_com_lightcrafts_utils_LCMSNative_cmsDoTransform__J_3B_3BI
121 (JNIEnv *env, jclass clazz, jlong hTransform, jbyteArray jinputBuffer, jbyteArray joutputBuffer, jint size)
122 {
123 cmsDoTransformGeneric(env, clazz, hTransform, jinputBuffer, joutputBuffer, size);
124 }
125
Java_com_lightcrafts_utils_LCMSNative_cmsDoTransform__J_3S_3SI(JNIEnv * env,jclass clazz,jlong hTransform,jbyteArray jinputBuffer,jbyteArray joutputBuffer,jint size)126 JNIEXPORT void JNICALL Java_com_lightcrafts_utils_LCMSNative_cmsDoTransform__J_3S_3SI
127 (JNIEnv *env, jclass clazz, jlong hTransform, jbyteArray jinputBuffer, jbyteArray joutputBuffer, jint size)
128 {
129 cmsDoTransformGeneric(env, clazz, hTransform, jinputBuffer, joutputBuffer, size);
130 }
131
Java_com_lightcrafts_utils_LCMSNative_cmsDoTransform__J_3D_3DI(JNIEnv * env,jclass clazz,jlong hTransform,jbyteArray jinputBuffer,jbyteArray joutputBuffer,jint size)132 JNIEXPORT void JNICALL Java_com_lightcrafts_utils_LCMSNative_cmsDoTransform__J_3D_3DI
133 (JNIEnv *env, jclass clazz, jlong hTransform, jbyteArray jinputBuffer, jbyteArray joutputBuffer, jint size)
134 {
135 cmsDoTransformGeneric(env, clazz, hTransform, jinputBuffer, joutputBuffer, size);
136 }
137
138