1 /*
2 * This program is free software; you can redistribute it and/or
3 * modify it under the terms of the GNU General Public License
4 * as published by the Free Software Foundation; either version 2
5 * of the License, or (at your option) any later version.
6 *
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
11 *
12 * You should have received a copy of the GNU General Public License
13 * along with this program; if not, write to the Free Software Foundation,
14 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15 *
16 * The Original Code is Copyright (C) 2012 Blender Foundation.
17 * All rights reserved.
18 */
19
20 #include "MEM_guardedalloc.h"
21
22 #include "ocio_impl.h"
23
24 static IOCIOImpl *impl = NULL;
25
OCIO_init(void)26 void OCIO_init(void)
27 {
28 #ifdef WITH_OCIO
29 impl = new OCIOImpl();
30 #else
31 impl = new FallbackImpl();
32 #endif
33 }
34
OCIO_exit(void)35 void OCIO_exit(void)
36 {
37 delete impl;
38 impl = NULL;
39 }
40
OCIO_getCurrentConfig(void)41 OCIO_ConstConfigRcPtr *OCIO_getCurrentConfig(void)
42 {
43 return impl->getCurrentConfig();
44 }
45
OCIO_configCreateFallback(void)46 OCIO_ConstConfigRcPtr *OCIO_configCreateFallback(void)
47 {
48 delete impl;
49 impl = new FallbackImpl();
50
51 return impl->getCurrentConfig();
52 }
53
OCIO_setCurrentConfig(const OCIO_ConstConfigRcPtr * config)54 void OCIO_setCurrentConfig(const OCIO_ConstConfigRcPtr *config)
55 {
56 impl->setCurrentConfig(config);
57 }
58
OCIO_configCreateFromEnv(void)59 OCIO_ConstConfigRcPtr *OCIO_configCreateFromEnv(void)
60 {
61 return impl->configCreateFromEnv();
62 }
63
OCIO_configCreateFromFile(const char * filename)64 OCIO_ConstConfigRcPtr *OCIO_configCreateFromFile(const char *filename)
65 {
66 return impl->configCreateFromFile(filename);
67 }
68
OCIO_configRelease(OCIO_ConstConfigRcPtr * config)69 void OCIO_configRelease(OCIO_ConstConfigRcPtr *config)
70 {
71 impl->configRelease(config);
72 }
73
OCIO_configGetNumColorSpaces(OCIO_ConstConfigRcPtr * config)74 int OCIO_configGetNumColorSpaces(OCIO_ConstConfigRcPtr *config)
75 {
76 return impl->configGetNumColorSpaces(config);
77 }
78
OCIO_configGetColorSpaceNameByIndex(OCIO_ConstConfigRcPtr * config,int index)79 const char *OCIO_configGetColorSpaceNameByIndex(OCIO_ConstConfigRcPtr *config, int index)
80 {
81 return impl->configGetColorSpaceNameByIndex(config, index);
82 }
83
OCIO_configGetColorSpace(OCIO_ConstConfigRcPtr * config,const char * name)84 OCIO_ConstColorSpaceRcPtr *OCIO_configGetColorSpace(OCIO_ConstConfigRcPtr *config,
85 const char *name)
86 {
87 return impl->configGetColorSpace(config, name);
88 }
89
OCIO_configGetIndexForColorSpace(OCIO_ConstConfigRcPtr * config,const char * name)90 int OCIO_configGetIndexForColorSpace(OCIO_ConstConfigRcPtr *config, const char *name)
91 {
92 return impl->configGetIndexForColorSpace(config, name);
93 }
94
OCIO_configGetDefaultDisplay(OCIO_ConstConfigRcPtr * config)95 const char *OCIO_configGetDefaultDisplay(OCIO_ConstConfigRcPtr *config)
96 {
97 return impl->configGetDefaultDisplay(config);
98 }
99
OCIO_configGetNumDisplays(OCIO_ConstConfigRcPtr * config)100 int OCIO_configGetNumDisplays(OCIO_ConstConfigRcPtr *config)
101 {
102 return impl->configGetNumDisplays(config);
103 }
104
OCIO_configGetDisplay(OCIO_ConstConfigRcPtr * config,int index)105 const char *OCIO_configGetDisplay(OCIO_ConstConfigRcPtr *config, int index)
106 {
107 return impl->configGetDisplay(config, index);
108 }
109
OCIO_configGetDefaultView(OCIO_ConstConfigRcPtr * config,const char * display)110 const char *OCIO_configGetDefaultView(OCIO_ConstConfigRcPtr *config, const char *display)
111 {
112 return impl->configGetDefaultView(config, display);
113 }
114
OCIO_configGetNumViews(OCIO_ConstConfigRcPtr * config,const char * display)115 int OCIO_configGetNumViews(OCIO_ConstConfigRcPtr *config, const char *display)
116 {
117 return impl->configGetNumViews(config, display);
118 }
119
OCIO_configGetView(OCIO_ConstConfigRcPtr * config,const char * display,int index)120 const char *OCIO_configGetView(OCIO_ConstConfigRcPtr *config, const char *display, int index)
121 {
122 return impl->configGetView(config, display, index);
123 }
124
OCIO_configGetDisplayColorSpaceName(OCIO_ConstConfigRcPtr * config,const char * display,const char * view)125 const char *OCIO_configGetDisplayColorSpaceName(OCIO_ConstConfigRcPtr *config,
126 const char *display,
127 const char *view)
128 {
129 return impl->configGetDisplayColorSpaceName(config, display, view);
130 }
131
OCIO_configGetDefaultLumaCoefs(OCIO_ConstConfigRcPtr * config,float * rgb)132 void OCIO_configGetDefaultLumaCoefs(OCIO_ConstConfigRcPtr *config, float *rgb)
133 {
134 impl->configGetDefaultLumaCoefs(config, rgb);
135 }
136
OCIO_configGetXYZtoRGB(OCIO_ConstConfigRcPtr * config,float xyz_to_rgb[3][3])137 void OCIO_configGetXYZtoRGB(OCIO_ConstConfigRcPtr *config, float xyz_to_rgb[3][3])
138 {
139 impl->configGetXYZtoRGB(config, xyz_to_rgb);
140 }
141
OCIO_configGetNumLooks(OCIO_ConstConfigRcPtr * config)142 int OCIO_configGetNumLooks(OCIO_ConstConfigRcPtr *config)
143 {
144 return impl->configGetNumLooks(config);
145 }
146
OCIO_configGetLookNameByIndex(OCIO_ConstConfigRcPtr * config,int index)147 const char *OCIO_configGetLookNameByIndex(OCIO_ConstConfigRcPtr *config, int index)
148 {
149 return impl->configGetLookNameByIndex(config, index);
150 }
151
OCIO_configGetLook(OCIO_ConstConfigRcPtr * config,const char * name)152 OCIO_ConstLookRcPtr *OCIO_configGetLook(OCIO_ConstConfigRcPtr *config, const char *name)
153 {
154 return impl->configGetLook(config, name);
155 }
156
OCIO_lookGetProcessSpace(OCIO_ConstLookRcPtr * look)157 const char *OCIO_lookGetProcessSpace(OCIO_ConstLookRcPtr *look)
158 {
159 return impl->lookGetProcessSpace(look);
160 }
161
OCIO_lookRelease(OCIO_ConstLookRcPtr * look)162 void OCIO_lookRelease(OCIO_ConstLookRcPtr *look)
163 {
164 impl->lookRelease(look);
165 }
166
OCIO_colorSpaceIsInvertible(OCIO_ConstColorSpaceRcPtr * cs)167 int OCIO_colorSpaceIsInvertible(OCIO_ConstColorSpaceRcPtr *cs)
168 {
169 return impl->colorSpaceIsInvertible(cs);
170 }
171
OCIO_colorSpaceIsData(OCIO_ConstColorSpaceRcPtr * cs)172 int OCIO_colorSpaceIsData(OCIO_ConstColorSpaceRcPtr *cs)
173 {
174 return impl->colorSpaceIsData(cs);
175 }
176
OCIO_colorSpaceIsBuiltin(OCIO_ConstConfigRcPtr * config,OCIO_ConstColorSpaceRcPtr * cs,bool * is_scene_linear,bool * is_srgb)177 void OCIO_colorSpaceIsBuiltin(OCIO_ConstConfigRcPtr *config,
178 OCIO_ConstColorSpaceRcPtr *cs,
179 bool *is_scene_linear,
180 bool *is_srgb)
181 {
182 impl->colorSpaceIsBuiltin(config, cs, *is_scene_linear, *is_srgb);
183 }
184
OCIO_colorSpaceRelease(OCIO_ConstColorSpaceRcPtr * cs)185 void OCIO_colorSpaceRelease(OCIO_ConstColorSpaceRcPtr *cs)
186 {
187 impl->colorSpaceRelease(cs);
188 }
189
OCIO_configGetProcessorWithNames(OCIO_ConstConfigRcPtr * config,const char * srcName,const char * dstName)190 OCIO_ConstProcessorRcPtr *OCIO_configGetProcessorWithNames(OCIO_ConstConfigRcPtr *config,
191 const char *srcName,
192 const char *dstName)
193 {
194 return impl->configGetProcessorWithNames(config, srcName, dstName);
195 }
196
OCIO_configGetProcessor(OCIO_ConstConfigRcPtr * config,OCIO_ConstTransformRcPtr * transform)197 OCIO_ConstProcessorRcPtr *OCIO_configGetProcessor(OCIO_ConstConfigRcPtr *config,
198 OCIO_ConstTransformRcPtr *transform)
199 {
200 return impl->configGetProcessor(config, transform);
201 }
202
OCIO_processorApply(OCIO_ConstProcessorRcPtr * processor,OCIO_PackedImageDesc * img)203 void OCIO_processorApply(OCIO_ConstProcessorRcPtr *processor, OCIO_PackedImageDesc *img)
204 {
205 impl->processorApply(processor, img);
206 }
207
OCIO_processorApply_predivide(OCIO_ConstProcessorRcPtr * processor,OCIO_PackedImageDesc * img)208 void OCIO_processorApply_predivide(OCIO_ConstProcessorRcPtr *processor, OCIO_PackedImageDesc *img)
209 {
210 impl->processorApply_predivide(processor, img);
211 }
212
OCIO_processorApplyRGB(OCIO_ConstProcessorRcPtr * processor,float * pixel)213 void OCIO_processorApplyRGB(OCIO_ConstProcessorRcPtr *processor, float *pixel)
214 {
215 impl->processorApplyRGB(processor, pixel);
216 }
217
OCIO_processorApplyRGBA(OCIO_ConstProcessorRcPtr * processor,float * pixel)218 void OCIO_processorApplyRGBA(OCIO_ConstProcessorRcPtr *processor, float *pixel)
219 {
220 impl->processorApplyRGBA(processor, pixel);
221 }
222
OCIO_processorApplyRGBA_predivide(OCIO_ConstProcessorRcPtr * processor,float * pixel)223 void OCIO_processorApplyRGBA_predivide(OCIO_ConstProcessorRcPtr *processor, float *pixel)
224 {
225 impl->processorApplyRGBA_predivide(processor, pixel);
226 }
227
OCIO_processorRelease(OCIO_ConstProcessorRcPtr * p)228 void OCIO_processorRelease(OCIO_ConstProcessorRcPtr *p)
229 {
230 impl->processorRelease(p);
231 }
232
OCIO_colorSpaceGetName(OCIO_ConstColorSpaceRcPtr * cs)233 const char *OCIO_colorSpaceGetName(OCIO_ConstColorSpaceRcPtr *cs)
234 {
235 return impl->colorSpaceGetName(cs);
236 }
237
OCIO_colorSpaceGetDescription(OCIO_ConstColorSpaceRcPtr * cs)238 const char *OCIO_colorSpaceGetDescription(OCIO_ConstColorSpaceRcPtr *cs)
239 {
240 return impl->colorSpaceGetDescription(cs);
241 }
242
OCIO_colorSpaceGetFamily(OCIO_ConstColorSpaceRcPtr * cs)243 const char *OCIO_colorSpaceGetFamily(OCIO_ConstColorSpaceRcPtr *cs)
244 {
245 return impl->colorSpaceGetFamily(cs);
246 }
247
OCIO_createDisplayTransform(void)248 OCIO_DisplayTransformRcPtr *OCIO_createDisplayTransform(void)
249 {
250 return impl->createDisplayTransform();
251 }
252
OCIO_displayTransformSetInputColorSpaceName(OCIO_DisplayTransformRcPtr * dt,const char * name)253 void OCIO_displayTransformSetInputColorSpaceName(OCIO_DisplayTransformRcPtr *dt, const char *name)
254 {
255 impl->displayTransformSetInputColorSpaceName(dt, name);
256 }
257
OCIO_displayTransformSetDisplay(OCIO_DisplayTransformRcPtr * dt,const char * name)258 void OCIO_displayTransformSetDisplay(OCIO_DisplayTransformRcPtr *dt, const char *name)
259 {
260 impl->displayTransformSetDisplay(dt, name);
261 }
262
OCIO_displayTransformSetView(OCIO_DisplayTransformRcPtr * dt,const char * name)263 void OCIO_displayTransformSetView(OCIO_DisplayTransformRcPtr *dt, const char *name)
264 {
265 impl->displayTransformSetView(dt, name);
266 }
267
OCIO_displayTransformSetDisplayCC(OCIO_DisplayTransformRcPtr * dt,OCIO_ConstTransformRcPtr * t)268 void OCIO_displayTransformSetDisplayCC(OCIO_DisplayTransformRcPtr *dt, OCIO_ConstTransformRcPtr *t)
269 {
270 impl->displayTransformSetDisplayCC(dt, t);
271 }
272
OCIO_displayTransformSetLinearCC(OCIO_DisplayTransformRcPtr * dt,OCIO_ConstTransformRcPtr * t)273 void OCIO_displayTransformSetLinearCC(OCIO_DisplayTransformRcPtr *dt, OCIO_ConstTransformRcPtr *t)
274 {
275 impl->displayTransformSetLinearCC(dt, t);
276 }
277
OCIO_displayTransformSetLooksOverride(OCIO_DisplayTransformRcPtr * dt,const char * looks)278 void OCIO_displayTransformSetLooksOverride(OCIO_DisplayTransformRcPtr *dt, const char *looks)
279 {
280 impl->displayTransformSetLooksOverride(dt, looks);
281 }
282
OCIO_displayTransformSetLooksOverrideEnabled(OCIO_DisplayTransformRcPtr * dt,bool enabled)283 void OCIO_displayTransformSetLooksOverrideEnabled(OCIO_DisplayTransformRcPtr *dt, bool enabled)
284 {
285 impl->displayTransformSetLooksOverrideEnabled(dt, enabled);
286 }
287
OCIO_displayTransformRelease(OCIO_DisplayTransformRcPtr * dt)288 void OCIO_displayTransformRelease(OCIO_DisplayTransformRcPtr *dt)
289 {
290 impl->displayTransformRelease(dt);
291 }
292
OCIO_createOCIO_PackedImageDesc(float * data,long width,long height,long numChannels,long chanStrideBytes,long xStrideBytes,long yStrideBytes)293 OCIO_PackedImageDesc *OCIO_createOCIO_PackedImageDesc(float *data,
294 long width,
295 long height,
296 long numChannels,
297 long chanStrideBytes,
298 long xStrideBytes,
299 long yStrideBytes)
300 {
301 return impl->createOCIO_PackedImageDesc(
302 data, width, height, numChannels, chanStrideBytes, xStrideBytes, yStrideBytes);
303 }
304
OCIO_PackedImageDescRelease(OCIO_PackedImageDesc * id)305 void OCIO_PackedImageDescRelease(OCIO_PackedImageDesc *id)
306 {
307 impl->OCIO_PackedImageDescRelease(id);
308 }
309
OCIO_createGroupTransform(void)310 OCIO_GroupTransformRcPtr *OCIO_createGroupTransform(void)
311 {
312 return impl->createGroupTransform();
313 }
314
OCIO_groupTransformSetDirection(OCIO_GroupTransformRcPtr * gt,const bool forward)315 void OCIO_groupTransformSetDirection(OCIO_GroupTransformRcPtr *gt, const bool forward)
316 {
317 impl->groupTransformSetDirection(gt, forward);
318 }
319
OCIO_groupTransformPushBack(OCIO_GroupTransformRcPtr * gt,OCIO_ConstTransformRcPtr * tr)320 void OCIO_groupTransformPushBack(OCIO_GroupTransformRcPtr *gt, OCIO_ConstTransformRcPtr *tr)
321 {
322 impl->groupTransformPushBack(gt, tr);
323 }
324
OCIO_groupTransformRelease(OCIO_GroupTransformRcPtr * gt)325 void OCIO_groupTransformRelease(OCIO_GroupTransformRcPtr *gt)
326 {
327 impl->groupTransformRelease(gt);
328 }
329
OCIO_createColorSpaceTransform(void)330 OCIO_ColorSpaceTransformRcPtr *OCIO_createColorSpaceTransform(void)
331 {
332 return impl->createColorSpaceTransform();
333 }
334
OCIO_colorSpaceTransformSetSrc(OCIO_ColorSpaceTransformRcPtr * ct,const char * name)335 void OCIO_colorSpaceTransformSetSrc(OCIO_ColorSpaceTransformRcPtr *ct, const char *name)
336 {
337 impl->colorSpaceTransformSetSrc(ct, name);
338 }
339
OCIO_colorSpaceTransformRelease(OCIO_ColorSpaceTransformRcPtr * ct)340 void OCIO_colorSpaceTransformRelease(OCIO_ColorSpaceTransformRcPtr *ct)
341 {
342 impl->colorSpaceTransformRelease(ct);
343 }
344
OCIO_createExponentTransform(void)345 OCIO_ExponentTransformRcPtr *OCIO_createExponentTransform(void)
346 {
347 return impl->createExponentTransform();
348 }
349
OCIO_exponentTransformSetValue(OCIO_ExponentTransformRcPtr * et,const float * exponent)350 void OCIO_exponentTransformSetValue(OCIO_ExponentTransformRcPtr *et, const float *exponent)
351 {
352 impl->exponentTransformSetValue(et, exponent);
353 }
354
OCIO_exponentTransformRelease(OCIO_ExponentTransformRcPtr * et)355 void OCIO_exponentTransformRelease(OCIO_ExponentTransformRcPtr *et)
356 {
357 impl->exponentTransformRelease(et);
358 }
359
OCIO_createMatrixTransform(void)360 OCIO_MatrixTransformRcPtr *OCIO_createMatrixTransform(void)
361 {
362 return impl->createMatrixTransform();
363 }
364
OCIO_matrixTransformSetValue(OCIO_MatrixTransformRcPtr * mt,const float * m44,const float * offset4)365 void OCIO_matrixTransformSetValue(OCIO_MatrixTransformRcPtr *mt,
366 const float *m44,
367 const float *offset4)
368 {
369 impl->matrixTransformSetValue(mt, m44, offset4);
370 }
371
OCIO_matrixTransformRelease(OCIO_MatrixTransformRcPtr * mt)372 void OCIO_matrixTransformRelease(OCIO_MatrixTransformRcPtr *mt)
373 {
374 impl->matrixTransformRelease(mt);
375 }
376
OCIO_matrixTransformScale(float * m44,float * offset4,const float * scale4f)377 void OCIO_matrixTransformScale(float *m44, float *offset4, const float *scale4f)
378 {
379 impl->matrixTransformScale(m44, offset4, scale4f);
380 }
381
OCIO_supportGLSLDraw(void)382 int OCIO_supportGLSLDraw(void)
383 {
384 return (int)impl->supportGLSLDraw();
385 }
386
OCIO_setupGLSLDraw(struct OCIO_GLSLDrawState ** state_r,OCIO_ConstProcessorRcPtr * ocio_processor_scene_to_ui,OCIO_ConstProcessorRcPtr * ocio_processor_ui_to_display,OCIO_CurveMappingSettings * curve_mapping_settings,float dither,bool predivide,bool overlay)387 int OCIO_setupGLSLDraw(struct OCIO_GLSLDrawState **state_r,
388 OCIO_ConstProcessorRcPtr *ocio_processor_scene_to_ui,
389 OCIO_ConstProcessorRcPtr *ocio_processor_ui_to_display,
390 OCIO_CurveMappingSettings *curve_mapping_settings,
391 float dither,
392 bool predivide,
393 bool overlay)
394 {
395 return (int)impl->setupGLSLDraw(state_r,
396 ocio_processor_scene_to_ui,
397 ocio_processor_ui_to_display,
398 curve_mapping_settings,
399 dither,
400 predivide,
401 overlay);
402 }
403
OCIO_finishGLSLDraw(struct OCIO_GLSLDrawState * state)404 void OCIO_finishGLSLDraw(struct OCIO_GLSLDrawState *state)
405 {
406 impl->finishGLSLDraw(state);
407 }
408
OCIO_freeOGLState(struct OCIO_GLSLDrawState * state)409 void OCIO_freeOGLState(struct OCIO_GLSLDrawState *state)
410 {
411 impl->freeGLState(state);
412 }
413
OCIO_getVersionString(void)414 const char *OCIO_getVersionString(void)
415 {
416 return impl->getVersionString();
417 }
418
OCIO_getVersionHex(void)419 int OCIO_getVersionHex(void)
420 {
421 return impl->getVersionHex();
422 }
423