tweaks to clang so blender can build with -Werror
[blender.git] / intern / opencolorio / ocio_impl.h
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
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.
8  *
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.
13  *
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.
17  *
18  * The Original Code is Copyright (C) 2012 Blender Foundation.
19  * All rights reserved.
20  *
21  * Contributor(s): Sergey Sharybin
22  *
23  * ***** END GPL LICENSE BLOCK *****
24  */
25
26 #ifndef __OCIO_IMPL_H__
27 #define __OCIO_IMPL_H__
28
29 #include "ocio_capi.h"
30
31 class IOCIOImpl {
32 public:
33         virtual ~IOCIOImpl() {}
34
35         virtual OCIO_ConstConfigRcPtr *getCurrentConfig(void) = 0;
36         virtual void setCurrentConfig(const OCIO_ConstConfigRcPtr *config) = 0;
37
38         virtual OCIO_ConstConfigRcPtr *configCreateFromEnv(void) = 0;
39         virtual OCIO_ConstConfigRcPtr *configCreateFromFile(const char* filename) = 0;
40
41         virtual void configRelease(OCIO_ConstConfigRcPtr *config) = 0;
42
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;
47
48         virtual int colorSpaceIsInvertible(OCIO_ConstColorSpaceRcPtr *cs) = 0;
49         virtual int colorSpaceIsData(OCIO_ConstColorSpaceRcPtr *cs) = 0;
50
51         virtual void colorSpaceRelease(OCIO_ConstColorSpaceRcPtr *cs) = 0;
52
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;
60
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;
63
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;
69
70         virtual void processorRelease(OCIO_ConstProcessorRcPtr *p) = 0;
71
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;
75
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;
83
84         virtual OCIO_PackedImageDesc *createOCIO_PackedImageDesc(float *data, long width, long height, long numChannels,
85                                                        long chanStrideBytes, long xStrideBytes, long yStrideBytes) = 0;
86
87         virtual void OCIO_PackedImageDescRelease(OCIO_PackedImageDesc *p) = 0;
88
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;
92
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;
96
97         virtual void matrixTransformScale(float * m44, float * offset4, const float * scale4) = 0;
98 };
99
100 class FallbackImpl : public IOCIOImpl {
101 public:
102         FallbackImpl() {}
103
104         OCIO_ConstConfigRcPtr *getCurrentConfig(void);
105         void setCurrentConfig(const OCIO_ConstConfigRcPtr *config);
106
107         OCIO_ConstConfigRcPtr *configCreateFromEnv(void);
108         OCIO_ConstConfigRcPtr *configCreateFromFile(const char* filename);
109
110         void configRelease(OCIO_ConstConfigRcPtr *config);
111
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);
116
117         int colorSpaceIsInvertible(OCIO_ConstColorSpaceRcPtr *cs);
118         int colorSpaceIsData(OCIO_ConstColorSpaceRcPtr *cs);
119
120         void colorSpaceRelease(OCIO_ConstColorSpaceRcPtr *cs);
121
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);
129
130         OCIO_ConstProcessorRcPtr *configGetProcessorWithNames(OCIO_ConstConfigRcPtr *config, const char *srcName, const char *dstName);
131         OCIO_ConstProcessorRcPtr *configGetProcessor(OCIO_ConstConfigRcPtr *config, OCIO_ConstTransformRcPtr *transform);
132
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);
138
139         void processorRelease(OCIO_ConstProcessorRcPtr *p);
140
141         const char *colorSpaceGetName(OCIO_ConstColorSpaceRcPtr *cs);
142         const char *colorSpaceGetDescription(OCIO_ConstColorSpaceRcPtr *cs);
143         const char *colorSpaceGetFamily(OCIO_ConstColorSpaceRcPtr *cs);
144
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);
152
153         OCIO_PackedImageDesc *createOCIO_PackedImageDesc(float *data, long width, long height, long numChannels,
154                                                long chanStrideBytes, long xStrideBytes, long yStrideBytes);
155
156         void OCIO_PackedImageDescRelease(OCIO_PackedImageDesc *p);
157
158         OCIO_ExponentTransformRcPtr *createExponentTransform(void);
159         void exponentTransformSetValue(OCIO_ExponentTransformRcPtr *et, const float *exponent);
160         void exponentTransformRelease(OCIO_ExponentTransformRcPtr *et);
161
162         OCIO_MatrixTransformRcPtr *createMatrixTransform(void);
163         void matrixTransformSetValue(OCIO_MatrixTransformRcPtr *et, const float *m44, const float *offset4);
164         void matrixTransformRelease(OCIO_MatrixTransformRcPtr *mt);
165
166         void matrixTransformScale(float * m44, float * offset4, const float * scale4);
167 };
168
169 #ifdef WITH_OCIO
170 class OCIOImpl : public IOCIOImpl {
171 public:
172         OCIOImpl() {};
173
174         OCIO_ConstConfigRcPtr *getCurrentConfig(void);
175         void setCurrentConfig(const OCIO_ConstConfigRcPtr *config);
176
177         OCIO_ConstConfigRcPtr *configCreateFromEnv(void);
178         OCIO_ConstConfigRcPtr *configCreateFromFile(const char* filename);
179
180         void configRelease(OCIO_ConstConfigRcPtr *config);
181
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);
186
187         int colorSpaceIsInvertible(OCIO_ConstColorSpaceRcPtr *cs);
188         int colorSpaceIsData(OCIO_ConstColorSpaceRcPtr *cs);
189
190         void colorSpaceRelease(OCIO_ConstColorSpaceRcPtr *cs);
191
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);
199
200         OCIO_ConstProcessorRcPtr *configGetProcessorWithNames(OCIO_ConstConfigRcPtr *config, const char *srcName, const char *dstName);
201         OCIO_ConstProcessorRcPtr *configGetProcessor(OCIO_ConstConfigRcPtr *config, OCIO_ConstTransformRcPtr *transform);
202
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);
208
209         void processorRelease(OCIO_ConstProcessorRcPtr *p);
210
211         const char *colorSpaceGetName(OCIO_ConstColorSpaceRcPtr *cs);
212         const char *colorSpaceGetDescription(OCIO_ConstColorSpaceRcPtr *cs);
213         const char *colorSpaceGetFamily(OCIO_ConstColorSpaceRcPtr *cs);
214
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);
222
223         OCIO_PackedImageDesc *createOCIO_PackedImageDesc(float *data, long width, long height, long numChannels,
224                                                long chanStrideBytes, long xStrideBytes, long yStrideBytes);
225
226         void OCIO_PackedImageDescRelease(OCIO_PackedImageDesc *p);
227
228         OCIO_ExponentTransformRcPtr *createExponentTransform(void);
229         void exponentTransformSetValue(OCIO_ExponentTransformRcPtr *et, const float *exponent);
230         void exponentTransformRelease(OCIO_ExponentTransformRcPtr *et);
231
232         OCIO_MatrixTransformRcPtr *createMatrixTransform(void);
233         void matrixTransformSetValue(OCIO_MatrixTransformRcPtr *et, const float *m44, const float *offset4);
234         void matrixTransformRelease(OCIO_MatrixTransformRcPtr *mt);
235
236         void matrixTransformScale(float * m44, float * offset4, const float * scale4);
237 };
238 #endif
239
240 #endif /* OCIO_IMPL_H */