e774e3e8548d4a654b80d283baa99a3d4718f2f6
[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         #define OCIO_ROLE_DEFAULT_BYTE       "default_byte"
46         #define OCIO_ROLE_DEFAULT_FLOAT      "default_float"
47         #define OCIO_ROLE_DEFAULT_SEQUENCER  "default_sequencer"
48
49         OCIO_DECLARE_HANDLE(ConstConfigRcPtr);
50         OCIO_DECLARE_HANDLE(ConstColorSpaceRcPtr);
51         OCIO_DECLARE_HANDLE(ConstProcessorRcPtr);
52         OCIO_DECLARE_HANDLE(ConstContextRcPtr);
53         OCIO_DECLARE_HANDLE(PackedImageDesc);
54         OCIO_DECLARE_HANDLE(DisplayTransformRcPtr);
55         OCIO_DECLARE_HANDLE(ConstTransformRcPtr);
56         OCIO_DECLARE_HANDLE(ExponentTransformRcPtr);
57         OCIO_DECLARE_HANDLE(MatrixTransformRcPtr);
58 #endif
59
60
61 ConstConfigRcPtr *OCIO_getCurrentConfig(void);
62 ConstConfigRcPtr *OCIO_getDefaultConfig(void);
63 void OCIO_setCurrentConfig(const ConstConfigRcPtr *config);
64
65 ConstConfigRcPtr *OCIO_configCreateFromEnv(void);
66 ConstConfigRcPtr *OCIO_configCreateFromFile(const char* filename);
67
68 void OCIO_configRelease(ConstConfigRcPtr *config);
69
70 int OCIO_configGetNumColorSpaces(ConstConfigRcPtr *config);
71 const char *OCIO_configGetColorSpaceNameByIndex(ConstConfigRcPtr *config, int index);
72 ConstColorSpaceRcPtr *OCIO_configGetColorSpace(ConstConfigRcPtr *config, const char *name);
73 int OCIO_configGetIndexForColorSpace(ConstConfigRcPtr *config, const char *name);
74
75 int OCIO_colorSpaceIsInvertible(ConstColorSpaceRcPtr *cs);
76
77 void OCIO_colorSpaceRelease(ConstColorSpaceRcPtr *cs);
78
79 const char *OCIO_configGetDefaultDisplay(ConstConfigRcPtr *config);
80 int         OCIO_configGetNumDisplays(ConstConfigRcPtr *config);
81 const char *OCIO_configGetDisplay(ConstConfigRcPtr *config, int index);
82 const char *OCIO_configGetDefaultView(ConstConfigRcPtr *config, const char *display);
83 int         OCIO_configGetNumViews(ConstConfigRcPtr *config, const char *display);
84 const char *OCIO_configGetView(ConstConfigRcPtr *config, const char *display, int index);
85 const char *OCIO_configGetDisplayColorSpaceName(ConstConfigRcPtr *config, const char *display, const char *view);
86
87 ConstProcessorRcPtr *OCIO_configGetProcessorWithNames(ConstConfigRcPtr *config, const char *srcName, const char *dstName);
88 ConstProcessorRcPtr *OCIO_configGetProcessor(ConstConfigRcPtr *config, ConstTransformRcPtr *transform);
89
90 void OCIO_processorApply(ConstProcessorRcPtr *processor, PackedImageDesc *img);
91 void OCIO_processorApply_predivide(ConstProcessorRcPtr *processor, PackedImageDesc *img);
92 void OCIO_processorApplyRGB(ConstProcessorRcPtr *processor, float *pixel);
93 void OCIO_processorApplyRGBA(ConstProcessorRcPtr *processor, float *pixel);
94 void OCIO_processorApplyRGBA_predivide(ConstProcessorRcPtr *processor, float *pixel);
95
96 void OCIO_processorRelease(ConstProcessorRcPtr *p);
97
98 const char *OCIO_colorSpaceGetName(ConstColorSpaceRcPtr *cs);
99 const char *OCIO_colorSpaceGetDescription(ConstColorSpaceRcPtr *cs);
100 const char *OCIO_colorSpaceGetFamily(ConstColorSpaceRcPtr *cs);
101
102 DisplayTransformRcPtr *OCIO_createDisplayTransform(void);
103 void OCIO_displayTransformSetInputColorSpaceName(DisplayTransformRcPtr *dt, const char *name);
104 void OCIO_displayTransformSetDisplay(DisplayTransformRcPtr *dt, const char *name);
105 void OCIO_displayTransformSetView(DisplayTransformRcPtr *dt, const char *name);
106 void OCIO_displayTransformSetDisplayCC(DisplayTransformRcPtr *dt, ConstTransformRcPtr *et);
107 void OCIO_displayTransformSetLinearCC(DisplayTransformRcPtr *dt, ConstTransformRcPtr *et);
108 void OCIO_displayTransformRelease(DisplayTransformRcPtr *dt);
109
110 PackedImageDesc *OCIO_createPackedImageDesc(float *data, long width, long height, long numChannels,
111                                             long chanStrideBytes, long xStrideBytes, long yStrideBytes);
112
113 void OCIO_packedImageDescRelease(PackedImageDesc *p);
114
115 ExponentTransformRcPtr *OCIO_createExponentTransform(void);
116 void OCIO_exponentTransformSetValue(ExponentTransformRcPtr *et, const float *exponent);
117 void OCIO_exponentTransformRelease(ExponentTransformRcPtr *et);
118
119 MatrixTransformRcPtr *OCIO_createMatrixTransform(void);
120 void OCIO_matrixTransformSetValue(MatrixTransformRcPtr *et, const float *m44, const float *offset4);
121 void OCIO_matrixTransformRelease(MatrixTransformRcPtr *mt);
122
123 void OCIO_matrixTransformScale(float * m44, float * offset4, const float * scale4);
124
125 #ifdef __cplusplus
126 }
127 #endif
128
129 #endif //OCIO_CAPI_H