2 * ***** BEGIN GPL LICENSE BLOCK *****
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version 2
7 * of the License, or (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software Foundation,
16 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18 * The Original Code is Copyright (C) 2012 Blender Foundation.
19 * All rights reserved.
21 * Contributor(s): Sergey Sharybin
23 * ***** END GPL LICENSE BLOCK *****
26 #ifndef __OCIO_IMPL_H__
27 #define __OCIO_IMPL_H__
29 #include "ocio_capi.h"
33 virtual ~IOCIOImpl() {};
35 virtual OCIO_ConstConfigRcPtr *getCurrentConfig(void) = 0;
36 virtual void setCurrentConfig(const OCIO_ConstConfigRcPtr *config) = 0;
38 virtual OCIO_ConstConfigRcPtr *configCreateFromEnv(void) = 0;
39 virtual OCIO_ConstConfigRcPtr *configCreateFromFile(const char* filename) = 0;
41 virtual void configRelease(OCIO_ConstConfigRcPtr *config) = 0;
43 virtual int configGetNumColorSpaces(OCIO_ConstConfigRcPtr *config) = 0;
44 virtual const char *configGetColorSpaceNameByIndex(OCIO_ConstConfigRcPtr *config, int index) = 0;
45 virtual OCIO_ConstColorSpaceRcPtr *configGetColorSpace(OCIO_ConstConfigRcPtr *config, const char *name) = 0;
46 virtual int configGetIndexForColorSpace(OCIO_ConstConfigRcPtr *config, const char *name) = 0;
48 virtual int colorSpaceIsInvertible(OCIO_ConstColorSpaceRcPtr *cs) = 0;
49 virtual int colorSpaceIsData(OCIO_ConstColorSpaceRcPtr *cs) = 0;
51 virtual void colorSpaceRelease(OCIO_ConstColorSpaceRcPtr *cs) = 0;
53 virtual const char *configGetDefaultDisplay(OCIO_ConstConfigRcPtr *config) = 0;
54 virtual int configGetNumDisplays(OCIO_ConstConfigRcPtr *config) = 0;
55 virtual const char *configGetDisplay(OCIO_ConstConfigRcPtr *config, int index) = 0;
56 virtual const char *configGetDefaultView(OCIO_ConstConfigRcPtr *config, const char *display) = 0;
57 virtual int configGetNumViews(OCIO_ConstConfigRcPtr *config, const char *display) = 0;
58 virtual const char *configGetView(OCIO_ConstConfigRcPtr *config, const char *display, int index) = 0;
59 virtual const char *configGetDisplayColorSpaceName(OCIO_ConstConfigRcPtr *config, const char *display, const char *view) = 0;
61 virtual OCIO_ConstProcessorRcPtr *configGetProcessorWithNames(OCIO_ConstConfigRcPtr *config, const char *srcName, const char *dstName) = 0;
62 virtual OCIO_ConstProcessorRcPtr *configGetProcessor(OCIO_ConstConfigRcPtr *config, OCIO_ConstTransformRcPtr *transform) = 0;
64 virtual void processorApply(OCIO_ConstProcessorRcPtr *processor, OCIO_PackedImageDesc *img) = 0;
65 virtual void processorApply_predivide(OCIO_ConstProcessorRcPtr *processor, OCIO_PackedImageDesc *img) = 0;
66 virtual void processorApplyRGB(OCIO_ConstProcessorRcPtr *processor, float *pixel) = 0;
67 virtual void processorApplyRGBA(OCIO_ConstProcessorRcPtr *processor, float *pixel) = 0;
68 virtual void processorApplyRGBA_predivide(OCIO_ConstProcessorRcPtr *processor, float *pixel) = 0;
70 virtual void processorRelease(OCIO_ConstProcessorRcPtr *p) = 0;
72 virtual const char *colorSpaceGetName(OCIO_ConstColorSpaceRcPtr *cs) = 0;
73 virtual const char *colorSpaceGetDescription(OCIO_ConstColorSpaceRcPtr *cs) = 0;
74 virtual const char *colorSpaceGetFamily(OCIO_ConstColorSpaceRcPtr *cs) = 0;
76 virtual OCIO_DisplayTransformRcPtr *createDisplayTransform(void) = 0;
77 virtual void displayTransformSetInputColorSpaceName(OCIO_DisplayTransformRcPtr *dt, const char *name) = 0;
78 virtual void displayTransformSetDisplay(OCIO_DisplayTransformRcPtr *dt, const char *name) = 0;
79 virtual void displayTransformSetView(OCIO_DisplayTransformRcPtr *dt, const char *name) = 0;
80 virtual void displayTransformSetDisplayCC(OCIO_DisplayTransformRcPtr *dt, OCIO_ConstTransformRcPtr *et) = 0;
81 virtual void displayTransformSetLinearCC(OCIO_DisplayTransformRcPtr *dt, OCIO_ConstTransformRcPtr *et) = 0;
82 virtual void displayTransformRelease(OCIO_DisplayTransformRcPtr *dt) = 0;
84 virtual OCIO_PackedImageDesc *createOCIO_PackedImageDesc(float *data, long width, long height, long numChannels,
85 long chanStrideBytes, long xStrideBytes, long yStrideBytes) = 0;
87 virtual void OCIO_PackedImageDescRelease(OCIO_PackedImageDesc *p) = 0;
89 virtual OCIO_ExponentTransformRcPtr *createExponentTransform(void) = 0;
90 virtual void exponentTransformSetValue(OCIO_ExponentTransformRcPtr *et, const float *exponent) = 0;
91 virtual void exponentTransformRelease(OCIO_ExponentTransformRcPtr *et) = 0;
93 virtual OCIO_MatrixTransformRcPtr *createMatrixTransform(void) = 0;
94 virtual void matrixTransformSetValue(OCIO_MatrixTransformRcPtr *et, const float *m44, const float *offset4) = 0;
95 virtual void matrixTransformRelease(OCIO_MatrixTransformRcPtr *mt) = 0;
97 virtual void matrixTransformScale(float * m44, float * offset4, const float * scale4) = 0;
100 class FallbackImpl : public IOCIOImpl {
104 OCIO_ConstConfigRcPtr *getCurrentConfig(void);
105 void setCurrentConfig(const OCIO_ConstConfigRcPtr *config);
107 OCIO_ConstConfigRcPtr *configCreateFromEnv(void);
108 OCIO_ConstConfigRcPtr *configCreateFromFile(const char* filename);
110 void configRelease(OCIO_ConstConfigRcPtr *config);
112 int configGetNumColorSpaces(OCIO_ConstConfigRcPtr *config);
113 const char *configGetColorSpaceNameByIndex(OCIO_ConstConfigRcPtr *config, int index);
114 OCIO_ConstColorSpaceRcPtr *configGetColorSpace(OCIO_ConstConfigRcPtr *config, const char *name);
115 int configGetIndexForColorSpace(OCIO_ConstConfigRcPtr *config, const char *name);
117 int colorSpaceIsInvertible(OCIO_ConstColorSpaceRcPtr *cs);
118 int colorSpaceIsData(OCIO_ConstColorSpaceRcPtr *cs);
120 void colorSpaceRelease(OCIO_ConstColorSpaceRcPtr *cs);
122 const char *configGetDefaultDisplay(OCIO_ConstConfigRcPtr *config);
123 int configGetNumDisplays(OCIO_ConstConfigRcPtr *config);
124 const char *configGetDisplay(OCIO_ConstConfigRcPtr *config, int index);
125 const char *configGetDefaultView(OCIO_ConstConfigRcPtr *config, const char *display);
126 int configGetNumViews(OCIO_ConstConfigRcPtr *config, const char *display);
127 const char *configGetView(OCIO_ConstConfigRcPtr *config, const char *display, int index);
128 const char *configGetDisplayColorSpaceName(OCIO_ConstConfigRcPtr *config, const char *display, const char *view);
130 OCIO_ConstProcessorRcPtr *configGetProcessorWithNames(OCIO_ConstConfigRcPtr *config, const char *srcName, const char *dstName);
131 OCIO_ConstProcessorRcPtr *configGetProcessor(OCIO_ConstConfigRcPtr *config, OCIO_ConstTransformRcPtr *transform);
133 void processorApply(OCIO_ConstProcessorRcPtr *processor, OCIO_PackedImageDesc *img);
134 void processorApply_predivide(OCIO_ConstProcessorRcPtr *processor, OCIO_PackedImageDesc *img);
135 void processorApplyRGB(OCIO_ConstProcessorRcPtr *processor, float *pixel);
136 void processorApplyRGBA(OCIO_ConstProcessorRcPtr *processor, float *pixel);
137 void processorApplyRGBA_predivide(OCIO_ConstProcessorRcPtr *processor, float *pixel);
139 void processorRelease(OCIO_ConstProcessorRcPtr *p);
141 const char *colorSpaceGetName(OCIO_ConstColorSpaceRcPtr *cs);
142 const char *colorSpaceGetDescription(OCIO_ConstColorSpaceRcPtr *cs);
143 const char *colorSpaceGetFamily(OCIO_ConstColorSpaceRcPtr *cs);
145 OCIO_DisplayTransformRcPtr *createDisplayTransform(void);
146 void displayTransformSetInputColorSpaceName(OCIO_DisplayTransformRcPtr *dt, const char *name);
147 void displayTransformSetDisplay(OCIO_DisplayTransformRcPtr *dt, const char *name);
148 void displayTransformSetView(OCIO_DisplayTransformRcPtr *dt, const char *name);
149 void displayTransformSetDisplayCC(OCIO_DisplayTransformRcPtr *dt, OCIO_ConstTransformRcPtr *et);
150 void displayTransformSetLinearCC(OCIO_DisplayTransformRcPtr *dt, OCIO_ConstTransformRcPtr *et);
151 void displayTransformRelease(OCIO_DisplayTransformRcPtr *dt);
153 OCIO_PackedImageDesc *createOCIO_PackedImageDesc(float *data, long width, long height, long numChannels,
154 long chanStrideBytes, long xStrideBytes, long yStrideBytes);
156 void OCIO_PackedImageDescRelease(OCIO_PackedImageDesc *p);
158 OCIO_ExponentTransformRcPtr *createExponentTransform(void);
159 void exponentTransformSetValue(OCIO_ExponentTransformRcPtr *et, const float *exponent);
160 void exponentTransformRelease(OCIO_ExponentTransformRcPtr *et);
162 OCIO_MatrixTransformRcPtr *createMatrixTransform(void);
163 void matrixTransformSetValue(OCIO_MatrixTransformRcPtr *et, const float *m44, const float *offset4);
164 void matrixTransformRelease(OCIO_MatrixTransformRcPtr *mt);
166 void matrixTransformScale(float * m44, float * offset4, const float * scale4);
170 class OCIOImpl : public IOCIOImpl {
174 OCIO_ConstConfigRcPtr *getCurrentConfig(void);
175 void setCurrentConfig(const OCIO_ConstConfigRcPtr *config);
177 OCIO_ConstConfigRcPtr *configCreateFromEnv(void);
178 OCIO_ConstConfigRcPtr *configCreateFromFile(const char* filename);
180 void configRelease(OCIO_ConstConfigRcPtr *config);
182 int configGetNumColorSpaces(OCIO_ConstConfigRcPtr *config);
183 const char *configGetColorSpaceNameByIndex(OCIO_ConstConfigRcPtr *config, int index);
184 OCIO_ConstColorSpaceRcPtr *configGetColorSpace(OCIO_ConstConfigRcPtr *config, const char *name);
185 int configGetIndexForColorSpace(OCIO_ConstConfigRcPtr *config, const char *name);
187 int colorSpaceIsInvertible(OCIO_ConstColorSpaceRcPtr *cs);
188 int colorSpaceIsData(OCIO_ConstColorSpaceRcPtr *cs);
190 void colorSpaceRelease(OCIO_ConstColorSpaceRcPtr *cs);
192 const char *configGetDefaultDisplay(OCIO_ConstConfigRcPtr *config);
193 int configGetNumDisplays(OCIO_ConstConfigRcPtr *config);
194 const char *configGetDisplay(OCIO_ConstConfigRcPtr *config, int index);
195 const char *configGetDefaultView(OCIO_ConstConfigRcPtr *config, const char *display);
196 int configGetNumViews(OCIO_ConstConfigRcPtr *config, const char *display);
197 const char *configGetView(OCIO_ConstConfigRcPtr *config, const char *display, int index);
198 const char *configGetDisplayColorSpaceName(OCIO_ConstConfigRcPtr *config, const char *display, const char *view);
200 OCIO_ConstProcessorRcPtr *configGetProcessorWithNames(OCIO_ConstConfigRcPtr *config, const char *srcName, const char *dstName);
201 OCIO_ConstProcessorRcPtr *configGetProcessor(OCIO_ConstConfigRcPtr *config, OCIO_ConstTransformRcPtr *transform);
203 void processorApply(OCIO_ConstProcessorRcPtr *processor, OCIO_PackedImageDesc *img);
204 void processorApply_predivide(OCIO_ConstProcessorRcPtr *processor, OCIO_PackedImageDesc *img);
205 void processorApplyRGB(OCIO_ConstProcessorRcPtr *processor, float *pixel);
206 void processorApplyRGBA(OCIO_ConstProcessorRcPtr *processor, float *pixel);
207 void processorApplyRGBA_predivide(OCIO_ConstProcessorRcPtr *processor, float *pixel);
209 void processorRelease(OCIO_ConstProcessorRcPtr *p);
211 const char *colorSpaceGetName(OCIO_ConstColorSpaceRcPtr *cs);
212 const char *colorSpaceGetDescription(OCIO_ConstColorSpaceRcPtr *cs);
213 const char *colorSpaceGetFamily(OCIO_ConstColorSpaceRcPtr *cs);
215 OCIO_DisplayTransformRcPtr *createDisplayTransform(void);
216 void displayTransformSetInputColorSpaceName(OCIO_DisplayTransformRcPtr *dt, const char *name);
217 void displayTransformSetDisplay(OCIO_DisplayTransformRcPtr *dt, const char *name);
218 void displayTransformSetView(OCIO_DisplayTransformRcPtr *dt, const char *name);
219 void displayTransformSetDisplayCC(OCIO_DisplayTransformRcPtr *dt, OCIO_ConstTransformRcPtr *et);
220 void displayTransformSetLinearCC(OCIO_DisplayTransformRcPtr *dt, OCIO_ConstTransformRcPtr *et);
221 void displayTransformRelease(OCIO_DisplayTransformRcPtr *dt);
223 OCIO_PackedImageDesc *createOCIO_PackedImageDesc(float *data, long width, long height, long numChannels,
224 long chanStrideBytes, long xStrideBytes, long yStrideBytes);
226 void OCIO_PackedImageDescRelease(OCIO_PackedImageDesc *p);
228 OCIO_ExponentTransformRcPtr *createExponentTransform(void);
229 void exponentTransformSetValue(OCIO_ExponentTransformRcPtr *et, const float *exponent);
230 void exponentTransformRelease(OCIO_ExponentTransformRcPtr *et);
232 OCIO_MatrixTransformRcPtr *createMatrixTransform(void);
233 void matrixTransformSetValue(OCIO_MatrixTransformRcPtr *et, const float *m44, const float *offset4);
234 void matrixTransformRelease(OCIO_MatrixTransformRcPtr *mt);
236 void matrixTransformScale(float * m44, float * offset4, const float * scale4);
240 #endif /* OCIO_IMPL_H */