1 /*
2 Copyright (c) 2003-2010 Sony Pictures Imageworks Inc., et al.
3 All Rights Reserved.
4 
5 Redistribution and use in source and binary forms, with or without
6 modification, are permitted provided that the following conditions are
7 met:
8 * Redistributions of source code must retain the above copyright
9   notice, this list of conditions and the following disclaimer.
10 * Redistributions in binary form must reproduce the above copyright
11   notice, this list of conditions and the following disclaimer in the
12   documentation and/or other materials provided with the distribution.
13 * Neither the name of Sony Pictures Imageworks nor the names of its
14   contributors may be used to endorse or promote products derived from
15   this software without specific prior written permission.
16 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28 
29 #include <string>
30 #include <sstream>
31 #include <vector>
32 
33 #include "OpenColorIO/OpenColorIO.h"
34 #include "OpenColorIOJNI.h"
35 #include "JNIUtil.h"
36 OCIO_NAMESPACE_USING
37 
38 JNIEXPORT void JNICALL
Java_org_OpenColorIO_ColorSpace_dispose(JNIEnv * env,jobject self)39 Java_org_OpenColorIO_ColorSpace_dispose(JNIEnv * env, jobject self)
40 {
41     OCIO_JNITRY_ENTER()
42     DisposeJOCIO<ColorSpaceJNI>(env, self);
43     OCIO_JNITRY_EXIT()
44 }
45 
46 JNIEXPORT jobject JNICALL
Java_org_OpenColorIO_ColorSpace_Create(JNIEnv * env,jobject self)47 Java_org_OpenColorIO_ColorSpace_Create(JNIEnv * env, jobject self)
48 {
49     OCIO_JNITRY_ENTER()
50     return BuildJObject<ColorSpaceRcPtr, ColorSpaceJNI>(env, self,
51              env->FindClass("org/OpenColorIO/ColorSpace"), ColorSpace::Create());
52     OCIO_JNITRY_EXIT(NULL)
53 }
54 
55 JNIEXPORT jobject JNICALL
Java_org_OpenColorIO_ColorSpace_createEditableCopy(JNIEnv * env,jobject self)56 Java_org_OpenColorIO_ColorSpace_createEditableCopy(JNIEnv * env, jobject self)
57 {
58     OCIO_JNITRY_ENTER()
59     ConstColorSpaceRcPtr col = GetConstJOCIO<ConstColorSpaceRcPtr, ColorSpaceJNI>(env, self);
60     return BuildJObject<ColorSpaceRcPtr, ColorSpaceJNI>(env, self,
61              env->FindClass("org/OpenColorIO/ColorSpace"), col->createEditableCopy());
62     OCIO_JNITRY_EXIT(NULL)
63 }
64 
65 JNIEXPORT jstring JNICALL
Java_org_OpenColorIO_ColorSpace_getName(JNIEnv * env,jobject self)66 Java_org_OpenColorIO_ColorSpace_getName(JNIEnv * env, jobject self)
67 {
68     OCIO_JNITRY_ENTER()
69     ConstColorSpaceRcPtr col = GetConstJOCIO<ConstColorSpaceRcPtr, ColorSpaceJNI>(env, self);
70     return env->NewStringUTF(col->getName());
71     OCIO_JNITRY_EXIT(NULL)
72 }
73 
74 JNIEXPORT void JNICALL
Java_org_OpenColorIO_ColorSpace_setName(JNIEnv * env,jobject self,jstring name)75 Java_org_OpenColorIO_ColorSpace_setName(JNIEnv * env, jobject self, jstring name)
76 {
77     OCIO_JNITRY_ENTER()
78     ColorSpaceRcPtr col = GetEditableJOCIO<ColorSpaceRcPtr, ColorSpaceJNI>(env, self);
79     col->setName(GetJStringValue(env, name)());
80     OCIO_JNITRY_EXIT()
81 }
82 
83 JNIEXPORT jstring JNICALL
Java_org_OpenColorIO_ColorSpace_getFamily(JNIEnv * env,jobject self)84 Java_org_OpenColorIO_ColorSpace_getFamily(JNIEnv * env, jobject self)
85 {
86     OCIO_JNITRY_ENTER()
87     ConstColorSpaceRcPtr col = GetConstJOCIO<ConstColorSpaceRcPtr, ColorSpaceJNI>(env, self);
88     return env->NewStringUTF(col->getFamily());
89     OCIO_JNITRY_EXIT(NULL)
90 }
91 
92 JNIEXPORT void JNICALL
Java_org_OpenColorIO_ColorSpace_setFamily(JNIEnv * env,jobject self,jstring family)93 Java_org_OpenColorIO_ColorSpace_setFamily(JNIEnv * env, jobject self, jstring family)
94 {
95     OCIO_JNITRY_ENTER()
96     ColorSpaceRcPtr col = GetEditableJOCIO<ColorSpaceRcPtr, ColorSpaceJNI>(env, self);
97     col->setFamily(GetJStringValue(env, family)());
98     OCIO_JNITRY_EXIT()
99 }
100 
101 JNIEXPORT jstring JNICALL
Java_org_OpenColorIO_ColorSpace_getEqualityGroup(JNIEnv * env,jobject self)102 Java_org_OpenColorIO_ColorSpace_getEqualityGroup(JNIEnv * env, jobject self)
103 {
104     OCIO_JNITRY_ENTER()
105     ConstColorSpaceRcPtr col = GetConstJOCIO<ConstColorSpaceRcPtr, ColorSpaceJNI>(env, self);
106     return env->NewStringUTF(col->getEqualityGroup());
107     OCIO_JNITRY_EXIT(NULL)
108 }
109 
110 JNIEXPORT void JNICALL
Java_org_OpenColorIO_ColorSpace_setEqualityGroup(JNIEnv * env,jobject self,jstring equalityGroup)111 Java_org_OpenColorIO_ColorSpace_setEqualityGroup(JNIEnv * env, jobject self, jstring equalityGroup)
112 {
113     OCIO_JNITRY_ENTER()
114     ColorSpaceRcPtr col = GetEditableJOCIO<ColorSpaceRcPtr, ColorSpaceJNI>(env, self);
115     col->setEqualityGroup(GetJStringValue(env, equalityGroup)());
116     OCIO_JNITRY_EXIT()
117 }
118 
119 JNIEXPORT jstring JNICALL
Java_org_OpenColorIO_ColorSpace_getDescription(JNIEnv * env,jobject self)120 Java_org_OpenColorIO_ColorSpace_getDescription(JNIEnv * env, jobject self)
121 {
122     OCIO_JNITRY_ENTER()
123     ConstColorSpaceRcPtr col = GetConstJOCIO<ConstColorSpaceRcPtr, ColorSpaceJNI>(env, self);
124     return env->NewStringUTF(col->getDescription());
125     OCIO_JNITRY_EXIT(NULL)
126 }
127 
128 JNIEXPORT void JNICALL
Java_org_OpenColorIO_ColorSpace_setDescription(JNIEnv * env,jobject self,jstring description)129 Java_org_OpenColorIO_ColorSpace_setDescription(JNIEnv * env, jobject self, jstring description)
130 {
131     OCIO_JNITRY_ENTER()
132     ColorSpaceRcPtr col = GetEditableJOCIO<ColorSpaceRcPtr, ColorSpaceJNI>(env, self);
133     col->setDescription(GetJStringValue(env, description)());
134     OCIO_JNITRY_EXIT()
135 }
136 
137 JNIEXPORT jobject JNICALL
Java_org_OpenColorIO_ColorSpace_getBitDepth(JNIEnv * env,jobject self)138 Java_org_OpenColorIO_ColorSpace_getBitDepth(JNIEnv * env, jobject self)
139 {
140     OCIO_JNITRY_ENTER()
141     ConstColorSpaceRcPtr col = GetConstJOCIO<ConstColorSpaceRcPtr, ColorSpaceJNI>(env, self);
142     return BuildJEnum(env, "org/OpenColorIO/BitDepth", col->getBitDepth());
143     OCIO_JNITRY_EXIT(NULL)
144 }
145 
146 JNIEXPORT void JNICALL
Java_org_OpenColorIO_ColorSpace_setBitDepth(JNIEnv * env,jobject self,jobject bitDepth)147 Java_org_OpenColorIO_ColorSpace_setBitDepth(JNIEnv * env, jobject self, jobject bitDepth)
148 {
149     OCIO_JNITRY_ENTER()
150     ColorSpaceRcPtr col = GetEditableJOCIO<ColorSpaceRcPtr, ColorSpaceJNI>(env, self);
151     col->setBitDepth(GetJEnum<BitDepth>(env, bitDepth));
152     OCIO_JNITRY_EXIT()
153 }
154 
155 JNIEXPORT jboolean JNICALL
Java_org_OpenColorIO_ColorSpace_isData(JNIEnv * env,jobject self)156 Java_org_OpenColorIO_ColorSpace_isData(JNIEnv * env, jobject self)
157 {
158     OCIO_JNITRY_ENTER()
159     ConstColorSpaceRcPtr col = GetConstJOCIO<ConstColorSpaceRcPtr, ColorSpaceJNI>(env, self);
160     return (jboolean)col->isData();
161     OCIO_JNITRY_EXIT(false)
162 }
163 
164 JNIEXPORT void JNICALL
Java_org_OpenColorIO_ColorSpace_setIsData(JNIEnv * env,jobject self,jboolean isData)165 Java_org_OpenColorIO_ColorSpace_setIsData(JNIEnv * env, jobject self, jboolean isData)
166 {
167     OCIO_JNITRY_ENTER()
168     ColorSpaceRcPtr col = GetEditableJOCIO<ColorSpaceRcPtr, ColorSpaceJNI>(env, self);
169     col->setIsData((bool)isData);
170     OCIO_JNITRY_EXIT()
171 }
172 
173 JNIEXPORT jobject JNICALL
Java_org_OpenColorIO_ColorSpace_getAllocation(JNIEnv * env,jobject self)174 Java_org_OpenColorIO_ColorSpace_getAllocation(JNIEnv * env, jobject self)
175 {
176     OCIO_JNITRY_ENTER()
177     ConstColorSpaceRcPtr col = GetConstJOCIO<ConstColorSpaceRcPtr, ColorSpaceJNI>(env, self);
178     return BuildJEnum(env, "org/OpenColorIO/Allocation", col->getAllocation());
179     OCIO_JNITRY_EXIT(NULL)
180 }
181 
182 JNIEXPORT void JNICALL
Java_org_OpenColorIO_ColorSpace_setAllocation(JNIEnv * env,jobject self,jobject allocation)183 Java_org_OpenColorIO_ColorSpace_setAllocation(JNIEnv * env, jobject self, jobject allocation)
184 {
185     OCIO_JNITRY_ENTER()
186     ColorSpaceRcPtr col = GetEditableJOCIO<ColorSpaceRcPtr, ColorSpaceJNI>(env, self);
187     col->setAllocation(GetJEnum<Allocation>(env, allocation));
188     OCIO_JNITRY_EXIT()
189 }
190 
191 JNIEXPORT jint JNICALL
Java_org_OpenColorIO_ColorSpace_getAllocationNumVars(JNIEnv * env,jobject self)192 Java_org_OpenColorIO_ColorSpace_getAllocationNumVars(JNIEnv * env, jobject self)
193 {
194     OCIO_JNITRY_ENTER()
195     ConstColorSpaceRcPtr col = GetConstJOCIO<ConstColorSpaceRcPtr, ColorSpaceJNI>(env, self);
196     return (jint)col->getAllocationNumVars();
197     OCIO_JNITRY_EXIT(0)
198 }
199 
200 JNIEXPORT void JNICALL
Java_org_OpenColorIO_ColorSpace_getAllocationVars(JNIEnv * env,jobject self,jfloatArray vars)201 Java_org_OpenColorIO_ColorSpace_getAllocationVars(JNIEnv * env, jobject self, jfloatArray vars)
202 {
203     OCIO_JNITRY_ENTER()
204     ConstColorSpaceRcPtr col = GetConstJOCIO<ConstColorSpaceRcPtr, ColorSpaceJNI>(env, self);
205     col->getAllocationVars(SetJFloatArrayValue(env, vars, "vars", col->getAllocationNumVars())());
206     OCIO_JNITRY_EXIT()
207 }
208 
209 JNIEXPORT void JNICALL
Java_org_OpenColorIO_ColorSpace_setAllocationVars(JNIEnv * env,jobject self,jint numvars,jfloatArray vars)210 Java_org_OpenColorIO_ColorSpace_setAllocationVars(JNIEnv * env, jobject self, jint numvars, jfloatArray vars)
211 {
212     OCIO_JNITRY_ENTER()
213     ColorSpaceRcPtr col = GetEditableJOCIO<ColorSpaceRcPtr, ColorSpaceJNI>(env, self);
214     col->setAllocationVars((int)numvars, GetJFloatArrayValue(env, vars, "vars", numvars)());
215     OCIO_JNITRY_EXIT()
216 }
217 
218 JNIEXPORT jobject JNICALL
Java_org_OpenColorIO_ColorSpace_getTransform(JNIEnv * env,jobject self,jobject dir)219 Java_org_OpenColorIO_ColorSpace_getTransform(JNIEnv * env, jobject self, jobject dir)
220 {
221     OCIO_JNITRY_ENTER()
222     ConstColorSpaceRcPtr col = GetConstJOCIO<ConstColorSpaceRcPtr, ColorSpaceJNI>(env, self);
223     ColorSpaceDirection cd = GetJEnum<ColorSpaceDirection>(env, dir);
224     ConstTransformRcPtr tr = col->getTransform(cd);
225     return BuildJConstObject<ConstTransformRcPtr, TransformJNI>(env, self,
226              env->FindClass(GetOCIOTClass(tr)), tr);
227     OCIO_JNITRY_EXIT(NULL)
228 }
229 
230 JNIEXPORT void JNICALL
Java_org_OpenColorIO_ColorSpace_setTransform(JNIEnv * env,jobject self,jobject transform,jobject dir)231 Java_org_OpenColorIO_ColorSpace_setTransform(JNIEnv * env, jobject self, jobject transform, jobject dir)
232 {
233     OCIO_JNITRY_ENTER()
234     ColorSpaceRcPtr col = GetEditableJOCIO<ColorSpaceRcPtr, ColorSpaceJNI>(env, self);
235     ColorSpaceDirection cd = GetJEnum<ColorSpaceDirection>(env, dir);
236     ConstTransformRcPtr tran = GetConstJOCIO<ConstTransformRcPtr, TransformJNI>(env, transform);
237     col->setTransform(tran, cd);
238     OCIO_JNITRY_EXIT()
239 }
240