Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2012-10-04 17:39:08 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2012-10-04 17:39:08 +0400
commitef107d1a4d75ffc5645505867efec6b39b114d50 (patch)
tree618615b28006e4c8a6898d9f140ce37fc90bbb09 /intern/opencolorio/ocio_impl.h
parentd8144ef0f57bfba6973b7de34fe8238ab88707cc (diff)
Color Management: fallback to stub ocio implementation in cases when
ocio configuration file failed to load This solves issues with infinite NULL-checks to prevent crashes in such situations. Currently only happens if there's no configuration file at all, but could be tweaked further to fallback if this file isn't usable by blender.
Diffstat (limited to 'intern/opencolorio/ocio_impl.h')
-rw-r--r--intern/opencolorio/ocio_impl.h240
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 */