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