diff options
Diffstat (limited to 'intern/opencolorio/ocio_impl.h')
-rw-r--r-- | intern/opencolorio/ocio_impl.h | 240 |
1 files changed, 240 insertions, 0 deletions
diff --git a/intern/opencolorio/ocio_impl.h b/intern/opencolorio/ocio_impl.h new file mode 100644 index 00000000000..e05b35648b9 --- /dev/null +++ b/intern/opencolorio/ocio_impl.h @@ -0,0 +1,240 @@ +/* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * The Original Code is Copyright (C) 2012 Blender Foundation. + * All rights reserved. + * + * Contributor(s): Sergey Sharybin + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#ifndef __OCIO_IMPL_H__ +#define __OCIO_IMPL_H__ + +#include "ocio_capi.h" + +class IOCIOImpl { +public: + virtual ~IOCIOImpl() {}; + + virtual ConstConfigRcPtr *getCurrentConfig(void) = 0; + virtual void setCurrentConfig(const ConstConfigRcPtr *config) = 0; + + virtual ConstConfigRcPtr *configCreateFromEnv(void) = 0; + virtual ConstConfigRcPtr *configCreateFromFile(const char* filename) = 0; + + virtual void configRelease(ConstConfigRcPtr *config) = 0; + + virtual int configGetNumColorSpaces(ConstConfigRcPtr *config) = 0; + virtual const char *configGetColorSpaceNameByIndex(ConstConfigRcPtr *config, int index) = 0; + virtual ConstColorSpaceRcPtr *configGetColorSpace(ConstConfigRcPtr *config, const char *name) = 0; + virtual int configGetIndexForColorSpace(ConstConfigRcPtr *config, const char *name) = 0; + + virtual int colorSpaceIsInvertible(ConstColorSpaceRcPtr *cs) = 0; + virtual int colorSpaceIsData(ConstColorSpaceRcPtr *cs) = 0; + + virtual void colorSpaceRelease(ConstColorSpaceRcPtr *cs) = 0; + + virtual const char *configGetDefaultDisplay(ConstConfigRcPtr *config) = 0; + virtual int configGetNumDisplays(ConstConfigRcPtr *config) = 0; + virtual const char *configGetDisplay(ConstConfigRcPtr *config, int index) = 0; + virtual const char *configGetDefaultView(ConstConfigRcPtr *config, const char *display) = 0; + virtual int configGetNumViews(ConstConfigRcPtr *config, const char *display) = 0; + virtual const char *configGetView(ConstConfigRcPtr *config, const char *display, int index) = 0; + virtual const char *configGetDisplayColorSpaceName(ConstConfigRcPtr *config, const char *display, const char *view) = 0; + + virtual ConstProcessorRcPtr *configGetProcessorWithNames(ConstConfigRcPtr *config, const char *srcName, const char *dstName) = 0; + virtual ConstProcessorRcPtr *configGetProcessor(ConstConfigRcPtr *config, ConstTransformRcPtr *transform) = 0; + + virtual void processorApply(ConstProcessorRcPtr *processor, PackedImageDesc *img) = 0; + virtual void processorApply_predivide(ConstProcessorRcPtr *processor, PackedImageDesc *img) = 0; + virtual void processorApplyRGB(ConstProcessorRcPtr *processor, float *pixel) = 0; + virtual void processorApplyRGBA(ConstProcessorRcPtr *processor, float *pixel) = 0; + virtual void processorApplyRGBA_predivide(ConstProcessorRcPtr *processor, float *pixel) = 0; + + virtual void processorRelease(ConstProcessorRcPtr *p) = 0; + + virtual const char *colorSpaceGetName(ConstColorSpaceRcPtr *cs) = 0; + virtual const char *colorSpaceGetDescription(ConstColorSpaceRcPtr *cs) = 0; + virtual const char *colorSpaceGetFamily(ConstColorSpaceRcPtr *cs) = 0; + + virtual DisplayTransformRcPtr *createDisplayTransform(void) = 0; + virtual void displayTransformSetInputColorSpaceName(DisplayTransformRcPtr *dt, const char *name) = 0; + virtual void displayTransformSetDisplay(DisplayTransformRcPtr *dt, const char *name) = 0; + virtual void displayTransformSetView(DisplayTransformRcPtr *dt, const char *name) = 0; + virtual void displayTransformSetDisplayCC(DisplayTransformRcPtr *dt, ConstTransformRcPtr *et) = 0; + virtual void displayTransformSetLinearCC(DisplayTransformRcPtr *dt, ConstTransformRcPtr *et) = 0; + virtual void displayTransformRelease(DisplayTransformRcPtr *dt) = 0; + + virtual PackedImageDesc *createPackedImageDesc(float *data, long width, long height, long numChannels, + long chanStrideBytes, long xStrideBytes, long yStrideBytes) = 0; + + virtual void packedImageDescRelease(PackedImageDesc *p) = 0; + + virtual ExponentTransformRcPtr *createExponentTransform(void) = 0; + virtual void exponentTransformSetValue(ExponentTransformRcPtr *et, const float *exponent) = 0; + virtual void exponentTransformRelease(ExponentTransformRcPtr *et) = 0; + + virtual MatrixTransformRcPtr *createMatrixTransform(void) = 0; + virtual void matrixTransformSetValue(MatrixTransformRcPtr *et, const float *m44, const float *offset4) = 0; + virtual void matrixTransformRelease(MatrixTransformRcPtr *mt) = 0; + + virtual void matrixTransformScale(float * m44, float * offset4, const float * scale4) = 0; +}; + +class FallbackImpl : public IOCIOImpl { +public: + FallbackImpl() {}; + + ConstConfigRcPtr *getCurrentConfig(void); + void setCurrentConfig(const ConstConfigRcPtr *config); + + ConstConfigRcPtr *configCreateFromEnv(void); + ConstConfigRcPtr *configCreateFromFile(const char* filename); + + void configRelease(ConstConfigRcPtr *config); + + int configGetNumColorSpaces(ConstConfigRcPtr *config); + const char *configGetColorSpaceNameByIndex(ConstConfigRcPtr *config, int index); + ConstColorSpaceRcPtr *configGetColorSpace(ConstConfigRcPtr *config, const char *name); + int configGetIndexForColorSpace(ConstConfigRcPtr *config, const char *name); + + int colorSpaceIsInvertible(ConstColorSpaceRcPtr *cs); + int colorSpaceIsData(ConstColorSpaceRcPtr *cs); + + void colorSpaceRelease(ConstColorSpaceRcPtr *cs); + + const char *configGetDefaultDisplay(ConstConfigRcPtr *config); + int configGetNumDisplays(ConstConfigRcPtr *config); + const char *configGetDisplay(ConstConfigRcPtr *config, int index); + const char *configGetDefaultView(ConstConfigRcPtr *config, const char *display); + int configGetNumViews(ConstConfigRcPtr *config, const char *display); + const char *configGetView(ConstConfigRcPtr *config, const char *display, int index); + const char *configGetDisplayColorSpaceName(ConstConfigRcPtr *config, const char *display, const char *view); + + ConstProcessorRcPtr *configGetProcessorWithNames(ConstConfigRcPtr *config, const char *srcName, const char *dstName); + ConstProcessorRcPtr *configGetProcessor(ConstConfigRcPtr *config, ConstTransformRcPtr *transform); + + void processorApply(ConstProcessorRcPtr *processor, PackedImageDesc *img); + void processorApply_predivide(ConstProcessorRcPtr *processor, PackedImageDesc *img); + void processorApplyRGB(ConstProcessorRcPtr *processor, float *pixel); + void processorApplyRGBA(ConstProcessorRcPtr *processor, float *pixel); + void processorApplyRGBA_predivide(ConstProcessorRcPtr *processor, float *pixel); + + void processorRelease(ConstProcessorRcPtr *p); + + const char *colorSpaceGetName(ConstColorSpaceRcPtr *cs); + const char *colorSpaceGetDescription(ConstColorSpaceRcPtr *cs); + const char *colorSpaceGetFamily(ConstColorSpaceRcPtr *cs); + + DisplayTransformRcPtr *createDisplayTransform(void); + void displayTransformSetInputColorSpaceName(DisplayTransformRcPtr *dt, const char *name); + void displayTransformSetDisplay(DisplayTransformRcPtr *dt, const char *name); + void displayTransformSetView(DisplayTransformRcPtr *dt, const char *name); + void displayTransformSetDisplayCC(DisplayTransformRcPtr *dt, ConstTransformRcPtr *et); + void displayTransformSetLinearCC(DisplayTransformRcPtr *dt, ConstTransformRcPtr *et); + void displayTransformRelease(DisplayTransformRcPtr *dt); + + PackedImageDesc *createPackedImageDesc(float *data, long width, long height, long numChannels, + long chanStrideBytes, long xStrideBytes, long yStrideBytes); + + void packedImageDescRelease(PackedImageDesc *p); + + ExponentTransformRcPtr *createExponentTransform(void); + void exponentTransformSetValue(ExponentTransformRcPtr *et, const float *exponent); + void exponentTransformRelease(ExponentTransformRcPtr *et); + + MatrixTransformRcPtr *createMatrixTransform(void); + void matrixTransformSetValue(MatrixTransformRcPtr *et, const float *m44, const float *offset4); + void matrixTransformRelease(MatrixTransformRcPtr *mt); + + void matrixTransformScale(float * m44, float * offset4, const float * scale4); +}; + +#ifdef WITH_OCIO +class OCIOImpl : public IOCIOImpl { +public: + OCIOImpl() {}; + + ConstConfigRcPtr *getCurrentConfig(void); + void setCurrentConfig(const ConstConfigRcPtr *config); + + ConstConfigRcPtr *configCreateFromEnv(void); + ConstConfigRcPtr *configCreateFromFile(const char* filename); + + void configRelease(ConstConfigRcPtr *config); + + int configGetNumColorSpaces(ConstConfigRcPtr *config); + const char *configGetColorSpaceNameByIndex(ConstConfigRcPtr *config, int index); + ConstColorSpaceRcPtr *configGetColorSpace(ConstConfigRcPtr *config, const char *name); + int configGetIndexForColorSpace(ConstConfigRcPtr *config, const char *name); + + int colorSpaceIsInvertible(ConstColorSpaceRcPtr *cs); + int colorSpaceIsData(ConstColorSpaceRcPtr *cs); + + void colorSpaceRelease(ConstColorSpaceRcPtr *cs); + + const char *configGetDefaultDisplay(ConstConfigRcPtr *config); + int configGetNumDisplays(ConstConfigRcPtr *config); + const char *configGetDisplay(ConstConfigRcPtr *config, int index); + const char *configGetDefaultView(ConstConfigRcPtr *config, const char *display); + int configGetNumViews(ConstConfigRcPtr *config, const char *display); + const char *configGetView(ConstConfigRcPtr *config, const char *display, int index); + const char *configGetDisplayColorSpaceName(ConstConfigRcPtr *config, const char *display, const char *view); + + ConstProcessorRcPtr *configGetProcessorWithNames(ConstConfigRcPtr *config, const char *srcName, const char *dstName); + ConstProcessorRcPtr *configGetProcessor(ConstConfigRcPtr *config, ConstTransformRcPtr *transform); + + void processorApply(ConstProcessorRcPtr *processor, PackedImageDesc *img); + void processorApply_predivide(ConstProcessorRcPtr *processor, PackedImageDesc *img); + void processorApplyRGB(ConstProcessorRcPtr *processor, float *pixel); + void processorApplyRGBA(ConstProcessorRcPtr *processor, float *pixel); + void processorApplyRGBA_predivide(ConstProcessorRcPtr *processor, float *pixel); + + void processorRelease(ConstProcessorRcPtr *p); + + const char *colorSpaceGetName(ConstColorSpaceRcPtr *cs); + const char *colorSpaceGetDescription(ConstColorSpaceRcPtr *cs); + const char *colorSpaceGetFamily(ConstColorSpaceRcPtr *cs); + + DisplayTransformRcPtr *createDisplayTransform(void); + void displayTransformSetInputColorSpaceName(DisplayTransformRcPtr *dt, const char *name); + void displayTransformSetDisplay(DisplayTransformRcPtr *dt, const char *name); + void displayTransformSetView(DisplayTransformRcPtr *dt, const char *name); + void displayTransformSetDisplayCC(DisplayTransformRcPtr *dt, ConstTransformRcPtr *et); + void displayTransformSetLinearCC(DisplayTransformRcPtr *dt, ConstTransformRcPtr *et); + void displayTransformRelease(DisplayTransformRcPtr *dt); + + PackedImageDesc *createPackedImageDesc(float *data, long width, long height, long numChannels, + long chanStrideBytes, long xStrideBytes, long yStrideBytes); + + void packedImageDescRelease(PackedImageDesc *p); + + ExponentTransformRcPtr *createExponentTransform(void); + void exponentTransformSetValue(ExponentTransformRcPtr *et, const float *exponent); + void exponentTransformRelease(ExponentTransformRcPtr *et); + + MatrixTransformRcPtr *createMatrixTransform(void); + void matrixTransformSetValue(MatrixTransformRcPtr *et, const float *m44, const float *offset4); + void matrixTransformRelease(MatrixTransformRcPtr *mt); + + void matrixTransformScale(float * m44, float * offset4, const float * scale4); +}; +#endif + +#endif /* OCIO_IMPL_H */ |