Merging r50049 through r50076 from trunk into soc-2011-tomato
[blender.git] / intern / opencolorio / ocio_capi.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): Xavier Thomas
22  *                 Lukas Toene
23  *                 Sergey Sharybin
24  *
25  * ***** END GPL LICENSE BLOCK *****
26  */
27
28 #ifndef __OCIO_CAPI_H__
29 #define __OCIO_CAPI_H__
30
31
32
33 #ifdef __cplusplus
34 using namespace OCIO_NAMESPACE;
35 extern "C" {
36 #endif
37
38 #define OCIO_DECLARE_HANDLE(name) typedef struct name##__ { int unused; } *name
39
40
41 #ifndef OCIO_CAPI_IMPLEMENTATION
42         #define OCIO_ROLE_SCENE_LINEAR  "scene_linear"
43         #define OCIO_ROLE_COLOR_PICKING "color_picking"
44         #define OCIO_ROLE_TEXTURE_PAINT "texture_paint"
45
46         OCIO_DECLARE_HANDLE(ConstConfigRcPtr);
47         OCIO_DECLARE_HANDLE(ConstColorSpaceRcPtr);
48         OCIO_DECLARE_HANDLE(ConstProcessorRcPtr);
49         OCIO_DECLARE_HANDLE(ConstContextRcPtr);
50         OCIO_DECLARE_HANDLE(PackedImageDesc);
51         OCIO_DECLARE_HANDLE(DisplayTransformRcPtr);
52         OCIO_DECLARE_HANDLE(ConstTransformRcPtr);
53         OCIO_DECLARE_HANDLE(ExponentTransformRcPtr);
54         OCIO_DECLARE_HANDLE(MatrixTransformRcPtr);
55 #endif
56
57
58 ConstConfigRcPtr *OCIO_getCurrentConfig(void);
59 void OCIO_setCurrentConfig(const ConstConfigRcPtr *config);
60
61 ConstConfigRcPtr *OCIO_configCreateFromEnv(void);
62 ConstConfigRcPtr *OCIO_configCreateFromFile(const char* filename);
63
64 void OCIO_configRelease(ConstConfigRcPtr *config);
65
66 int OCIO_configGetNumColorSpaces(ConstConfigRcPtr *config);
67 const char *OCIO_configGetColorSpaceNameByIndex(ConstConfigRcPtr *config, int index);
68 ConstColorSpaceRcPtr *OCIO_configGetColorSpace(ConstConfigRcPtr *config, const char *name);
69 int OCIO_configGetIndexForColorSpace(ConstConfigRcPtr *config, const char *name);
70
71 void OCIO_colorSpaceRelease(ConstColorSpaceRcPtr *cs);
72
73 const char *OCIO_configGetDefaultDisplay(ConstConfigRcPtr *config);
74 int         OCIO_configGetNumDisplays(ConstConfigRcPtr *config);
75 const char *OCIO_configGetDisplay(ConstConfigRcPtr *config, int index);
76 const char *OCIO_configGetDefaultView(ConstConfigRcPtr *config, const char *display);
77 int         OCIO_configGetNumViews(ConstConfigRcPtr *config, const char *display);
78 const char *OCIO_configGetView(ConstConfigRcPtr *config, const char *display, int index);
79 const char *OCIO_configGetDisplayColorSpaceName(ConstConfigRcPtr *config, const char *display, const char *view);
80
81 ConstProcessorRcPtr *OCIO_configGetProcessorWithNames(ConstConfigRcPtr *config, const char *srcName, const char *dstName);
82 ConstProcessorRcPtr *OCIO_configGetProcessor(ConstConfigRcPtr *config, ConstTransformRcPtr *transform);
83
84 void OCIO_processorApply(ConstProcessorRcPtr *processor, PackedImageDesc *img);
85 void OCIO_processorApplyRGB(ConstProcessorRcPtr *processor, float *pixel);
86 void OCIO_processorApplyRGBA(ConstProcessorRcPtr *processor, float *pixel);
87
88 void OCIO_processorRelease(ConstProcessorRcPtr *p);
89
90 const char *OCIO_colorSpaceGetName(ConstColorSpaceRcPtr *cs);
91 const char *OCIO_colorSpaceGetDescription(ConstColorSpaceRcPtr *cs);
92 const char *OCIO_colorSpaceGetFamily(ConstColorSpaceRcPtr *cs);
93
94 DisplayTransformRcPtr *OCIO_createDisplayTransform(void);
95 void OCIO_displayTransformSetInputColorSpaceName(DisplayTransformRcPtr *dt, const char *name);
96 void OCIO_displayTransformSetDisplay(DisplayTransformRcPtr *dt, const char *name);
97 void OCIO_displayTransformSetView(DisplayTransformRcPtr *dt, const char *name);
98 void OCIO_displayTransformSetDisplayCC(DisplayTransformRcPtr *dt, ConstTransformRcPtr *et);
99 void OCIO_displayTransformSetLinearCC(DisplayTransformRcPtr *dt, ConstTransformRcPtr *et);
100 void OCIO_displayTransformRelease(DisplayTransformRcPtr *dt);
101
102 PackedImageDesc *OCIO_createPackedImageDesc(float *data, long width, long height, long numChannels,
103                                             long chanStrideBytes, long xStrideBytes, long yStrideBytes);
104
105 void OCIO_packedImageDescRelease(PackedImageDesc *p);
106
107 ExponentTransformRcPtr *OCIO_createExponentTransform(void);
108 void OCIO_exponentTransformSetValue(ExponentTransformRcPtr *et, const float *exponent);
109 void OCIO_exponentTransformRelease(ExponentTransformRcPtr *et);
110
111 MatrixTransformRcPtr *OCIO_createMatrixTransform(void);
112 void OCIO_matrixTransformSetValue(MatrixTransformRcPtr *et, const float *m44, const float *offset4);
113 void OCIO_matrixTransformRelease(MatrixTransformRcPtr *mt);
114
115 void OCIO_matrixTransformScale(float * m44, float * offset4, const float * scale4);
116
117 #ifdef __cplusplus
118 }
119 #endif
120
121 #endif //OCIO_CAPI_H