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:
-rw-r--r--intern/opencolorio/CMakeLists.txt31
-rw-r--r--intern/opencolorio/SConscript10
-rw-r--r--intern/opencolorio/fallback_impl.cc (renamed from intern/opencolorio/ocio_capi_stub.cpp)120
-rw-r--r--intern/opencolorio/ocio_capi.cc286
-rw-r--r--intern/opencolorio/ocio_capi.h9
-rw-r--r--intern/opencolorio/ocio_impl.cc (renamed from intern/opencolorio/ocio_capi.cpp)103
-rw-r--r--intern/opencolorio/ocio_impl.h240
-rw-r--r--source/blender/imbuf/intern/colormanagement.c56
8 files changed, 673 insertions, 182 deletions
diff --git a/intern/opencolorio/CMakeLists.txt b/intern/opencolorio/CMakeLists.txt
index 9f5d4cd332c..fb74d5e3f4e 100644
--- a/intern/opencolorio/CMakeLists.txt
+++ b/intern/opencolorio/CMakeLists.txt
@@ -26,41 +26,40 @@
set(INC
.
../guardedalloc
+ ../../source/blender/blenlib
)
set(INC_SYS
)
+set(SRC
+ ocio_capi.cc
+ fallback_impl.cc
+
+ ocio_capi.h
+ ocio_impl.h
+)
if(WITH_OPENCOLORIO)
+ add_definitions(
+ -DWITH_OCIO
+ )
list(APPEND INC_SYS
${OPENCOLORIO_INCLUDE_DIRS}
)
+ list(APPEND SRC
+ ocio_impl.cc
+ )
+
if(WIN32 AND NOT MINGW)
list(APPEND INC_SYS
${BOOST_INCLUDE_DIR}
)
endif()
-
- set(SRC
- ocio_capi.cpp
- ocio_capi.h
- )
-else()
- list(APPEND INC
- ../../source/blender/blenlib
- )
-
- set(SRC
- ocio_capi_stub.cpp
- ocio_capi.h
- )
endif()
-add_definitions(
-)
blender_add_lib(bf_intern_opencolorio "${SRC}" "${INC}" "${INC_SYS}")
diff --git a/intern/opencolorio/SConscript b/intern/opencolorio/SConscript
index fec07662735..229087a568d 100644
--- a/intern/opencolorio/SConscript
+++ b/intern/opencolorio/SConscript
@@ -2,18 +2,18 @@
Import('env')
-sources = env.Glob('*.cpp')
+sources = env.Glob('*.cc')
incs = '. ../guardedalloc ../../source/blender/blenlib'
+defs = []
if env['WITH_BF_OCIO']:
- sources.remove('ocio_capi_stub.cpp')
-
incs += ' ' + env['BF_OCIO_INC']
+ defs.append('WITH_OCIO')
if env['OURPLATFORM'] in ('win32-vc', 'win64-vc'):
incs += ' ' + env['BF_BOOST_INC']
else:
- sources.remove('ocio_capi.cpp')
+ sources.remove('ocio_capi.cc')
-env.BlenderLib( 'bf_intern_opencolorio', sources, Split(incs), [], libtype=['extern','player'], priority=[10, 185])
+env.BlenderLib( 'bf_intern_opencolorio', sources, Split(incs), defs, libtype=['extern','player'], priority=[10, 185])
diff --git a/intern/opencolorio/ocio_capi_stub.cpp b/intern/opencolorio/fallback_impl.cc
index 2112b88ad72..4badcc54ebd 100644
--- a/intern/opencolorio/ocio_capi_stub.cpp
+++ b/intern/opencolorio/fallback_impl.cc
@@ -30,7 +30,7 @@
namespace OCIO_NAMESPACE {};
-#include "ocio_capi.h"
+#include "ocio_impl.h"
#define CONFIG_DEFAULT ((ConstConfigRcPtr*)1)
@@ -51,40 +51,35 @@ typedef struct PackedImageDescription {
long yStrideBytes;
} PackedImageDescription;
-ConstConfigRcPtr *OCIO_getCurrentConfig(void)
+ConstConfigRcPtr *FallbackImpl::getCurrentConfig(void)
{
return CONFIG_DEFAULT;
}
-ConstConfigRcPtr *OCIO_getDefaultConfig(void)
+void FallbackImpl::setCurrentConfig(const ConstConfigRcPtr *)
{
- return CONFIG_DEFAULT;
}
-void OCIO_setCurrentConfig(const ConstConfigRcPtr *)
-{
-}
-
-ConstConfigRcPtr *OCIO_configCreateFromEnv(void)
+ConstConfigRcPtr *FallbackImpl::configCreateFromEnv(void)
{
return CONFIG_DEFAULT;
}
-ConstConfigRcPtr *OCIO_configCreateFromFile(const char *)
+ConstConfigRcPtr *FallbackImpl::configCreateFromFile(const char *)
{
return CONFIG_DEFAULT;
}
-void OCIO_configRelease(ConstConfigRcPtr *)
+void FallbackImpl::configRelease(ConstConfigRcPtr *)
{
}
-int OCIO_configGetNumColorSpaces(ConstConfigRcPtr *)
+int FallbackImpl::configGetNumColorSpaces(ConstConfigRcPtr *)
{
return 2;
}
-const char *OCIO_configGetColorSpaceNameByIndex(ConstConfigRcPtr *, int index)
+const char *FallbackImpl::configGetColorSpaceNameByIndex(ConstConfigRcPtr *, int index)
{
if (index == 0)
return "Linear";
@@ -94,7 +89,7 @@ const char *OCIO_configGetColorSpaceNameByIndex(ConstConfigRcPtr *, int index)
return NULL;
}
-ConstColorSpaceRcPtr *OCIO_configGetColorSpace(ConstConfigRcPtr *, const char *name)
+ConstColorSpaceRcPtr *FallbackImpl::configGetColorSpace(ConstConfigRcPtr *, const char *name)
{
if (strcmp(name, "scene_linear") == 0)
return COLORSPACE_LINEAR;
@@ -116,9 +111,9 @@ ConstColorSpaceRcPtr *OCIO_configGetColorSpace(ConstConfigRcPtr *, const char *n
return NULL;
}
-int OCIO_configGetIndexForColorSpace(ConstConfigRcPtr *config, const char *name)
+int FallbackImpl::configGetIndexForColorSpace(ConstConfigRcPtr *config, const char *name)
{
- ConstColorSpaceRcPtr *cs = OCIO_configGetColorSpace(config, name);
+ ConstColorSpaceRcPtr *cs = configGetColorSpace(config, name);
if (cs == COLORSPACE_LINEAR)
return 0;
@@ -128,17 +123,17 @@ int OCIO_configGetIndexForColorSpace(ConstConfigRcPtr *config, const char *name)
return -1;
}
-const char *OCIO_configGetDefaultDisplay(ConstConfigRcPtr *)
+const char *FallbackImpl::configGetDefaultDisplay(ConstConfigRcPtr *)
{
return "sRGB";
}
-int OCIO_configGetNumDisplays(ConstConfigRcPtr* config)
+int FallbackImpl::configGetNumDisplays(ConstConfigRcPtr* config)
{
return 1;
}
-const char *OCIO_configGetDisplay(ConstConfigRcPtr *, int index)
+const char *FallbackImpl::configGetDisplay(ConstConfigRcPtr *, int index)
{
if (index == 0)
return "sRGB";
@@ -146,17 +141,17 @@ const char *OCIO_configGetDisplay(ConstConfigRcPtr *, int index)
return NULL;
}
-const char *OCIO_configGetDefaultView(ConstConfigRcPtr *, const char *)
+const char *FallbackImpl::configGetDefaultView(ConstConfigRcPtr *, const char *)
{
return "Default";
}
-int OCIO_configGetNumViews(ConstConfigRcPtr *, const char *)
+int FallbackImpl::configGetNumViews(ConstConfigRcPtr *, const char *)
{
return 1;
}
-const char *OCIO_configGetView(ConstConfigRcPtr *, const char *, int index)
+const char *FallbackImpl::configGetView(ConstConfigRcPtr *, const char *, int index)
{
if (index == 0)
return "Default";
@@ -164,29 +159,29 @@ const char *OCIO_configGetView(ConstConfigRcPtr *, const char *, int index)
return NULL;
}
-const char *OCIO_configGetDisplayColorSpaceName(ConstConfigRcPtr *, const char *, const char *)
+const char *FallbackImpl::configGetDisplayColorSpaceName(ConstConfigRcPtr *, const char *, const char *)
{
return "sRGB";
}
-int OCIO_colorSpaceIsInvertible(ConstColorSpaceRcPtr *cs)
+int FallbackImpl::colorSpaceIsInvertible(ConstColorSpaceRcPtr *cs)
{
return 1;
}
-int OCIO_colorSpaceIsData(ConstColorSpaceRcPtr *cs)
+int FallbackImpl::colorSpaceIsData(ConstColorSpaceRcPtr *cs)
{
return 0;
}
-void OCIO_colorSpaceRelease(ConstColorSpaceRcPtr *cs)
+void FallbackImpl::colorSpaceRelease(ConstColorSpaceRcPtr *cs)
{
}
-ConstProcessorRcPtr *OCIO_configGetProcessorWithNames(ConstConfigRcPtr *config, const char *srcName, const char *dstName)
+ConstProcessorRcPtr *FallbackImpl::configGetProcessorWithNames(ConstConfigRcPtr *config, const char *srcName, const char *dstName)
{
- ConstColorSpaceRcPtr *cs_src = OCIO_configGetColorSpace(config, srcName);
- ConstColorSpaceRcPtr *cs_dst = OCIO_configGetColorSpace(config, dstName);
+ ConstColorSpaceRcPtr *cs_src = configGetColorSpace(config, srcName);
+ ConstColorSpaceRcPtr *cs_dst = configGetColorSpace(config, dstName);
if (cs_src == COLORSPACE_LINEAR && cs_dst == COLORSPACE_SRGB)
return PROCESSOR_LINEAR_TO_SRGB;
@@ -196,12 +191,12 @@ ConstProcessorRcPtr *OCIO_configGetProcessorWithNames(ConstConfigRcPtr *config,
return 0;
}
-ConstProcessorRcPtr *OCIO_configGetProcessor(ConstConfigRcPtr *, ConstTransformRcPtr *tfm)
+ConstProcessorRcPtr *FallbackImpl::configGetProcessor(ConstConfigRcPtr *, ConstTransformRcPtr *tfm)
{
return (ConstProcessorRcPtr*)tfm;
}
-void OCIO_processorApply(ConstProcessorRcPtr *processor, PackedImageDesc *img)
+void FallbackImpl::processorApply(ConstProcessorRcPtr *processor, PackedImageDesc *img)
{
/* OCIO_TODO stride not respected, channels must be 3 or 4 */
PackedImageDescription *desc = (PackedImageDescription*)img;
@@ -216,14 +211,14 @@ void OCIO_processorApply(ConstProcessorRcPtr *processor, PackedImageDesc *img)
float *pixel = pixels + channels * (y * width + x);
if (channels == 4)
- OCIO_processorApplyRGBA(processor, pixel);
+ processorApplyRGBA(processor, pixel);
else if (channels == 3)
- OCIO_processorApplyRGB(processor, pixel);
+ processorApplyRGB(processor, pixel);
}
}
}
-void OCIO_processorApply_predivide(ConstProcessorRcPtr *processor, PackedImageDesc *img)
+void FallbackImpl::processorApply_predivide(ConstProcessorRcPtr *processor, PackedImageDesc *img)
{
/* OCIO_TODO stride not respected, channels must be 3 or 4 */
PackedImageDescription *desc = (PackedImageDescription*)img;
@@ -238,14 +233,14 @@ void OCIO_processorApply_predivide(ConstProcessorRcPtr *processor, PackedImageDe
float *pixel = pixels + channels * (y * width + x);
if (channels == 4)
- OCIO_processorApplyRGBA_predivide(processor, pixel);
+ processorApplyRGBA_predivide(processor, pixel);
else if (channels == 3)
- OCIO_processorApplyRGB(processor, pixel);
+ processorApplyRGB(processor, pixel);
}
}
}
-void OCIO_processorApplyRGB(ConstProcessorRcPtr *processor, float *pixel)
+void FallbackImpl::processorApplyRGB(ConstProcessorRcPtr *processor, float *pixel)
{
if (processor == PROCESSOR_LINEAR_TO_SRGB)
linearrgb_to_srgb_v3_v3(pixel, pixel);
@@ -253,7 +248,7 @@ void OCIO_processorApplyRGB(ConstProcessorRcPtr *processor, float *pixel)
srgb_to_linearrgb_v3_v3(pixel, pixel);
}
-void OCIO_processorApplyRGBA(ConstProcessorRcPtr *processor, float *pixel)
+void FallbackImpl::processorApplyRGBA(ConstProcessorRcPtr *processor, float *pixel)
{
if (processor == PROCESSOR_LINEAR_TO_SRGB)
linearrgb_to_srgb_v4(pixel, pixel);
@@ -261,10 +256,10 @@ void OCIO_processorApplyRGBA(ConstProcessorRcPtr *processor, float *pixel)
srgb_to_linearrgb_v4(pixel, pixel);
}
-void OCIO_processorApplyRGBA_predivide(ConstProcessorRcPtr *processor, float *pixel)
+void FallbackImpl::processorApplyRGBA_predivide(ConstProcessorRcPtr *processor, float *pixel)
{
if (pixel[3] == 1.0f || pixel[3] == 0.0f) {
- OCIO_processorApplyRGBA(processor, pixel);
+ processorApplyRGBA(processor, pixel);
}
else {
float alpha, inv_alpha;
@@ -276,7 +271,7 @@ void OCIO_processorApplyRGBA_predivide(ConstProcessorRcPtr *processor, float *pi
pixel[1] *= inv_alpha;
pixel[2] *= inv_alpha;
- OCIO_processorApplyRGBA(processor, pixel);
+ processorApplyRGBA(processor, pixel);
pixel[0] *= alpha;
pixel[1] *= alpha;
@@ -284,11 +279,11 @@ void OCIO_processorApplyRGBA_predivide(ConstProcessorRcPtr *processor, float *pi
}
}
-void OCIO_processorRelease(ConstProcessorRcPtr *)
+void FallbackImpl::processorRelease(ConstProcessorRcPtr *)
{
}
-const char *OCIO_colorSpaceGetName(ConstColorSpaceRcPtr *cs)
+const char *FallbackImpl::colorSpaceGetName(ConstColorSpaceRcPtr *cs)
{
if (cs == COLORSPACE_LINEAR)
return "Linear";
@@ -298,47 +293,47 @@ const char *OCIO_colorSpaceGetName(ConstColorSpaceRcPtr *cs)
return NULL;
}
-const char *OCIO_colorSpaceGetDescription(ConstColorSpaceRcPtr *)
+const char *FallbackImpl::colorSpaceGetDescription(ConstColorSpaceRcPtr *)
{
return "";
}
-const char *OCIO_colorSpaceGetFamily(ConstColorSpaceRcPtr *)
+const char *FallbackImpl::colorSpaceGetFamily(ConstColorSpaceRcPtr *)
{
return "";
}
-DisplayTransformRcPtr *OCIO_createDisplayTransform(void)
+DisplayTransformRcPtr *FallbackImpl::createDisplayTransform(void)
{
return (DisplayTransformRcPtr*)PROCESSOR_LINEAR_TO_SRGB;
}
-void OCIO_displayTransformSetInputColorSpaceName(DisplayTransformRcPtr *, const char *)
+void FallbackImpl::displayTransformSetInputColorSpaceName(DisplayTransformRcPtr *, const char *)
{
}
-void OCIO_displayTransformSetDisplay(DisplayTransformRcPtr *, const char *)
+void FallbackImpl::displayTransformSetDisplay(DisplayTransformRcPtr *, const char *)
{
}
-void OCIO_displayTransformSetView(DisplayTransformRcPtr *, const char *)
+void FallbackImpl::displayTransformSetView(DisplayTransformRcPtr *, const char *)
{
}
-void OCIO_displayTransformSetDisplayCC(DisplayTransformRcPtr *, ConstTransformRcPtr *)
+void FallbackImpl::displayTransformSetDisplayCC(DisplayTransformRcPtr *, ConstTransformRcPtr *)
{
}
-void OCIO_displayTransformSetLinearCC(DisplayTransformRcPtr *, ConstTransformRcPtr *)
+void FallbackImpl::displayTransformSetLinearCC(DisplayTransformRcPtr *, ConstTransformRcPtr *)
{
}
-void OCIO_displayTransformRelease(DisplayTransformRcPtr *)
+void FallbackImpl::displayTransformRelease(DisplayTransformRcPtr *)
{
}
-PackedImageDesc *OCIO_createPackedImageDesc(float *data, long width, long height, long numChannels,
- long chanStrideBytes, long xStrideBytes, long yStrideBytes)
+PackedImageDesc *FallbackImpl::createPackedImageDesc(float *data, long width, long height, long numChannels,
+ long chanStrideBytes, long xStrideBytes, long yStrideBytes)
{
PackedImageDescription *desc = (PackedImageDescription*)MEM_callocN(sizeof(PackedImageDescription), "PackedImageDescription");
@@ -353,38 +348,37 @@ PackedImageDesc *OCIO_createPackedImageDesc(float *data, long width, long height
return (PackedImageDesc*)desc;
}
-void OCIO_packedImageDescRelease(PackedImageDesc* id)
+void FallbackImpl::packedImageDescRelease(PackedImageDesc* id)
{
MEM_freeN(id);
}
-ExponentTransformRcPtr *OCIO_createExponentTransform(void)
+ExponentTransformRcPtr *FallbackImpl::createExponentTransform(void)
{
return (ExponentTransformRcPtr*)PROCESSOR_UNKNOWN;
}
-void OCIO_exponentTransformSetValue(ExponentTransformRcPtr *, const float *)
+void FallbackImpl::exponentTransformSetValue(ExponentTransformRcPtr *, const float *)
{
}
-void OCIO_exponentTransformRelease(ExponentTransformRcPtr *)
+void FallbackImpl::exponentTransformRelease(ExponentTransformRcPtr *)
{
}
-MatrixTransformRcPtr *OCIO_createMatrixTransform(void)
+MatrixTransformRcPtr *FallbackImpl::createMatrixTransform(void)
{
return (MatrixTransformRcPtr*)PROCESSOR_UNKNOWN;
}
-void OCIO_matrixTransformSetValue(MatrixTransformRcPtr *, const float *, const float *)
+void FallbackImpl::matrixTransformSetValue(MatrixTransformRcPtr *, const float *, const float *)
{
}
-void OCIO_matrixTransformRelease(MatrixTransformRcPtr *)
+void FallbackImpl::matrixTransformRelease(MatrixTransformRcPtr *)
{
}
-void OCIO_matrixTransformScale(float * , float * , const float *)
+void FallbackImpl::matrixTransformScale(float * , float * , const float *)
{
}
-
diff --git a/intern/opencolorio/ocio_capi.cc b/intern/opencolorio/ocio_capi.cc
new file mode 100644
index 00000000000..20e7cc23daa
--- /dev/null
+++ b/intern/opencolorio/ocio_capi.cc
@@ -0,0 +1,286 @@
+/*
+ * ***** 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 *****
+ */
+
+#include "MEM_guardedalloc.h"
+
+namespace OCIO_NAMESPACE {};
+
+#include "ocio_impl.h"
+
+static IOCIOImpl *impl = NULL;
+
+void OCIO_init(void)
+{
+#ifdef WITH_OCIO
+ impl = new OCIOImpl();
+#else
+ impl = new FallbackImpl();
+#endif
+}
+
+void OCIO_exit(void)
+{
+ delete impl;
+ impl = NULL;
+}
+
+ConstConfigRcPtr *OCIO_getCurrentConfig(void)
+{
+ return impl->getCurrentConfig();
+}
+
+ConstConfigRcPtr *OCIO_configCreateFallback(void)
+{
+ delete impl;
+ impl = new FallbackImpl();
+
+ return impl->getCurrentConfig();
+}
+
+void OCIO_setCurrentConfig(const ConstConfigRcPtr *config)
+{
+ impl->setCurrentConfig(config);
+}
+
+ConstConfigRcPtr *OCIO_configCreateFromEnv(void)
+{
+ return impl->configCreateFromEnv();
+}
+
+ConstConfigRcPtr *OCIO_configCreateFromFile(const char *filename)
+{
+ return impl->configCreateFromFile(filename);
+}
+
+void OCIO_configRelease(ConstConfigRcPtr *config)
+{
+ impl->configRelease(config);
+}
+
+int OCIO_configGetNumColorSpaces(ConstConfigRcPtr *config)
+{
+ return impl->configGetNumColorSpaces(config);
+}
+
+const char *OCIO_configGetColorSpaceNameByIndex(ConstConfigRcPtr *config, int index)
+{
+ return impl->configGetColorSpaceNameByIndex(config, index);
+}
+
+ConstColorSpaceRcPtr *OCIO_configGetColorSpace(ConstConfigRcPtr *config, const char *name)
+{
+ return impl->configGetColorSpace(config, name);
+}
+
+int OCIO_configGetIndexForColorSpace(ConstConfigRcPtr *config, const char *name)
+{
+ return impl->configGetIndexForColorSpace(config, name);
+}
+
+const char *OCIO_configGetDefaultDisplay(ConstConfigRcPtr *config)
+{
+ return impl->configGetDefaultDisplay(config);
+}
+
+int OCIO_configGetNumDisplays(ConstConfigRcPtr* config)
+{
+ return impl->configGetNumDisplays(config);
+}
+
+const char *OCIO_configGetDisplay(ConstConfigRcPtr *config, int index)
+{
+ return impl->configGetDisplay(config, index);
+}
+
+const char *OCIO_configGetDefaultView(ConstConfigRcPtr *config, const char *display)
+{
+ return impl->configGetDefaultView(config, display);
+}
+
+int OCIO_configGetNumViews(ConstConfigRcPtr *config, const char *display)
+{
+ return impl->configGetNumViews(config, display);
+}
+
+const char *OCIO_configGetView(ConstConfigRcPtr *config, const char *display, int index)
+{
+ return impl->configGetView(config, display, index);
+}
+
+const char *OCIO_configGetDisplayColorSpaceName(ConstConfigRcPtr *config, const char *display, const char *view)
+{
+ return impl->configGetDisplayColorSpaceName(config, display, view);
+}
+
+int OCIO_colorSpaceIsInvertible(ConstColorSpaceRcPtr *cs)
+{
+ return impl->colorSpaceIsInvertible(cs);
+}
+
+int OCIO_colorSpaceIsData(ConstColorSpaceRcPtr *cs)
+{
+ return impl->colorSpaceIsData(cs);
+}
+
+void OCIO_colorSpaceRelease(ConstColorSpaceRcPtr *cs)
+{
+ impl->colorSpaceRelease(cs);
+}
+
+ConstProcessorRcPtr *OCIO_configGetProcessorWithNames(ConstConfigRcPtr *config, const char *srcName, const char *dstName)
+{
+ return impl->configGetProcessorWithNames(config, srcName, dstName);
+}
+
+ConstProcessorRcPtr *OCIO_configGetProcessor(ConstConfigRcPtr *config, ConstTransformRcPtr *transform)
+{
+ return impl->configGetProcessor(config, transform);
+}
+
+void OCIO_processorApply(ConstProcessorRcPtr *processor, PackedImageDesc *img)
+{
+ impl->processorApply(processor, img);
+}
+
+void OCIO_processorApply_predivide(ConstProcessorRcPtr *processor, PackedImageDesc *img)
+{
+ impl->processorApply_predivide(processor, img);
+}
+
+void OCIO_processorApplyRGB(ConstProcessorRcPtr *processor, float *pixel)
+{
+ impl->processorApplyRGB(processor, pixel);
+}
+
+void OCIO_processorApplyRGBA(ConstProcessorRcPtr *processor, float *pixel)
+{
+ impl->processorApplyRGBA(processor, pixel);
+}
+
+void OCIO_processorApplyRGBA_predivide(ConstProcessorRcPtr *processor, float *pixel)
+{
+ impl->processorApplyRGBA_predivide(processor, pixel);
+}
+
+void OCIO_processorRelease(ConstProcessorRcPtr *p)
+{
+ impl->processorRelease(p);
+}
+
+const char *OCIO_colorSpaceGetName(ConstColorSpaceRcPtr *cs)
+{
+ return impl->colorSpaceGetName(cs);
+}
+
+const char *OCIO_colorSpaceGetDescription(ConstColorSpaceRcPtr *cs)
+{
+ return impl->colorSpaceGetDescription(cs);
+}
+
+const char *OCIO_colorSpaceGetFamily(ConstColorSpaceRcPtr *cs)
+{
+ return impl->colorSpaceGetFamily(cs);
+}
+
+DisplayTransformRcPtr *OCIO_createDisplayTransform(void)
+{
+ return impl->createDisplayTransform();
+}
+
+void OCIO_displayTransformSetInputColorSpaceName(DisplayTransformRcPtr *dt, const char *name)
+{
+ impl->displayTransformSetInputColorSpaceName(dt, name);
+}
+
+void OCIO_displayTransformSetDisplay(DisplayTransformRcPtr *dt, const char *name)
+{
+ impl->displayTransformSetDisplay(dt, name);
+}
+
+void OCIO_displayTransformSetView(DisplayTransformRcPtr *dt, const char *name)
+{
+ impl->displayTransformSetView(dt, name);
+}
+
+void OCIO_displayTransformSetDisplayCC(DisplayTransformRcPtr *dt, ConstTransformRcPtr *t)
+{
+ impl->displayTransformSetDisplayCC(dt, t);
+}
+
+void OCIO_displayTransformSetLinearCC(DisplayTransformRcPtr *dt, ConstTransformRcPtr *t)
+{
+ impl->displayTransformSetLinearCC(dt, t);
+}
+
+void OCIO_displayTransformRelease(DisplayTransformRcPtr *dt)
+{
+ impl->displayTransformRelease(dt);
+}
+
+PackedImageDesc *OCIO_createPackedImageDesc(float *data, long width, long height, long numChannels,
+ long chanStrideBytes, long xStrideBytes, long yStrideBytes)
+{
+ return impl->createPackedImageDesc(data, width, height, numChannels, chanStrideBytes, xStrideBytes, yStrideBytes);
+}
+
+void OCIO_packedImageDescRelease(PackedImageDesc* id)
+{
+ impl->packedImageDescRelease(id);
+}
+
+ExponentTransformRcPtr *OCIO_createExponentTransform(void)
+{
+ return impl->createExponentTransform();
+}
+
+void OCIO_exponentTransformSetValue(ExponentTransformRcPtr *et, const float *exponent)
+{
+ impl->exponentTransformSetValue(et, exponent);
+}
+
+void OCIO_exponentTransformRelease(ExponentTransformRcPtr *et)
+{
+ impl->exponentTransformRelease(et);
+}
+
+MatrixTransformRcPtr *OCIO_createMatrixTransform(void)
+{
+ return impl->createMatrixTransform();
+}
+
+void OCIO_matrixTransformSetValue(MatrixTransformRcPtr *mt, const float *m44, const float *offset4)
+{
+ impl->matrixTransformSetValue(mt, m44, offset4);
+}
+
+void OCIO_matrixTransformRelease(MatrixTransformRcPtr *mt)
+{
+ impl->matrixTransformRelease(mt);
+}
+
+void OCIO_matrixTransformScale(float * m44, float * offset4, const float *scale4f)
+{
+ impl->matrixTransformScale(m44, offset4, scale4f);
+}
diff --git a/intern/opencolorio/ocio_capi.h b/intern/opencolorio/ocio_capi.h
index 0218ccfafcd..f924bffb8e0 100644
--- a/intern/opencolorio/ocio_capi.h
+++ b/intern/opencolorio/ocio_capi.h
@@ -28,8 +28,6 @@
#ifndef __OCIO_CAPI_H__
#define __OCIO_CAPI_H__
-
-
#ifdef __cplusplus
using namespace OCIO_NAMESPACE;
extern "C" {
@@ -37,7 +35,6 @@ extern "C" {
#define OCIO_DECLARE_HANDLE(name) typedef struct name##__ { int unused; } *name
-
#ifndef OCIO_CAPI_IMPLEMENTATION
#define OCIO_ROLE_SCENE_LINEAR "scene_linear"
#define OCIO_ROLE_COLOR_PICKING "color_picking"
@@ -57,13 +54,15 @@ extern "C" {
OCIO_DECLARE_HANDLE(MatrixTransformRcPtr);
#endif
+void OCIO_init(void);
+void OCIO_exit(void);
ConstConfigRcPtr *OCIO_getCurrentConfig(void);
-ConstConfigRcPtr *OCIO_getDefaultConfig(void);
void OCIO_setCurrentConfig(const ConstConfigRcPtr *config);
ConstConfigRcPtr *OCIO_configCreateFromEnv(void);
ConstConfigRcPtr *OCIO_configCreateFromFile(const char* filename);
+ConstConfigRcPtr *OCIO_configCreateFallback(void);
void OCIO_configRelease(ConstConfigRcPtr *config);
@@ -127,4 +126,4 @@ void OCIO_matrixTransformScale(float * m44, float * offset4, const float * scale
}
#endif
-#endif //OCIO_CAPI_H
+#endif /* OCIO_CAPI_H */
diff --git a/intern/opencolorio/ocio_capi.cpp b/intern/opencolorio/ocio_impl.cc
index 152b537ab9b..5d5c66cd356 100644
--- a/intern/opencolorio/ocio_capi.cpp
+++ b/intern/opencolorio/ocio_impl.cc
@@ -33,7 +33,7 @@
#include "MEM_guardedalloc.h"
#define OCIO_CAPI_IMPLEMENTATION
-#include "ocio_capi.h"
+#include "ocio_impl.h"
#if !defined(WITH_ASSERT_ABORT)
# define OCIO_abort()
@@ -61,7 +61,7 @@ static void OCIO_reportException(Exception &exception)
OCIO_reportError(exception.what());
}
-ConstConfigRcPtr *OCIO_getCurrentConfig(void)
+ConstConfigRcPtr *OCIOImpl::getCurrentConfig(void)
{
ConstConfigRcPtr *config = MEM_NEW(ConstConfigRcPtr);
@@ -80,12 +80,7 @@ ConstConfigRcPtr *OCIO_getCurrentConfig(void)
return NULL;
}
-ConstConfigRcPtr *OCIO_getDefaultConfig(void)
-{
- return NULL;
-}
-
-void OCIO_setCurrentConfig(const ConstConfigRcPtr *config)
+void OCIOImpl::setCurrentConfig(const ConstConfigRcPtr *config)
{
try {
SetCurrentConfig(*config);
@@ -95,7 +90,7 @@ void OCIO_setCurrentConfig(const ConstConfigRcPtr *config)
}
}
-ConstConfigRcPtr *OCIO_configCreateFromEnv(void)
+ConstConfigRcPtr *OCIOImpl::configCreateFromEnv(void)
{
ConstConfigRcPtr *config = MEM_NEW(ConstConfigRcPtr);
@@ -115,7 +110,7 @@ ConstConfigRcPtr *OCIO_configCreateFromEnv(void)
}
-ConstConfigRcPtr *OCIO_configCreateFromFile(const char *filename)
+ConstConfigRcPtr *OCIOImpl::configCreateFromFile(const char *filename)
{
ConstConfigRcPtr *config = MEM_NEW(ConstConfigRcPtr);
@@ -134,12 +129,12 @@ ConstConfigRcPtr *OCIO_configCreateFromFile(const char *filename)
return NULL;
}
-void OCIO_configRelease(ConstConfigRcPtr *config)
+void OCIOImpl::configRelease(ConstConfigRcPtr *config)
{
MEM_DELETE(config, ConstConfigRcPtr);
}
-int OCIO_configGetNumColorSpaces(ConstConfigRcPtr *config)
+int OCIOImpl::configGetNumColorSpaces(ConstConfigRcPtr *config)
{
try {
return (*config)->getNumColorSpaces();
@@ -151,7 +146,7 @@ int OCIO_configGetNumColorSpaces(ConstConfigRcPtr *config)
return 0;
}
-const char *OCIO_configGetColorSpaceNameByIndex(ConstConfigRcPtr *config, int index)
+const char *OCIOImpl::configGetColorSpaceNameByIndex(ConstConfigRcPtr *config, int index)
{
try {
return (*config)->getColorSpaceNameByIndex(index);
@@ -163,7 +158,7 @@ const char *OCIO_configGetColorSpaceNameByIndex(ConstConfigRcPtr *config, int in
return NULL;
}
-ConstColorSpaceRcPtr *OCIO_configGetColorSpace(ConstConfigRcPtr *config, const char *name)
+ConstColorSpaceRcPtr *OCIOImpl::configGetColorSpace(ConstConfigRcPtr *config, const char *name)
{
ConstColorSpaceRcPtr *cs = MEM_NEW(ConstColorSpaceRcPtr);
@@ -182,7 +177,7 @@ ConstColorSpaceRcPtr *OCIO_configGetColorSpace(ConstConfigRcPtr *config, const c
return NULL;
}
-int OCIO_configGetIndexForColorSpace(ConstConfigRcPtr *config, const char *name)
+int OCIOImpl::configGetIndexForColorSpace(ConstConfigRcPtr *config, const char *name)
{
try {
return (*config)->getIndexForColorSpace(name);
@@ -194,7 +189,7 @@ int OCIO_configGetIndexForColorSpace(ConstConfigRcPtr *config, const char *name)
return -1;
}
-const char *OCIO_configGetDefaultDisplay(ConstConfigRcPtr *config)
+const char *OCIOImpl::configGetDefaultDisplay(ConstConfigRcPtr *config)
{
try {
return (*config)->getDefaultDisplay();
@@ -206,7 +201,7 @@ const char *OCIO_configGetDefaultDisplay(ConstConfigRcPtr *config)
return NULL;
}
-int OCIO_configGetNumDisplays(ConstConfigRcPtr* config)
+int OCIOImpl::configGetNumDisplays(ConstConfigRcPtr* config)
{
try {
return (*config)->getNumDisplays();
@@ -218,7 +213,7 @@ int OCIO_configGetNumDisplays(ConstConfigRcPtr* config)
return 0;
}
-const char *OCIO_configGetDisplay(ConstConfigRcPtr *config, int index)
+const char *OCIOImpl::configGetDisplay(ConstConfigRcPtr *config, int index)
{
try {
return (*config)->getDisplay(index);
@@ -230,7 +225,7 @@ const char *OCIO_configGetDisplay(ConstConfigRcPtr *config, int index)
return NULL;
}
-const char *OCIO_configGetDefaultView(ConstConfigRcPtr *config, const char *display)
+const char *OCIOImpl::configGetDefaultView(ConstConfigRcPtr *config, const char *display)
{
try {
return (*config)->getDefaultView(display);
@@ -242,7 +237,7 @@ const char *OCIO_configGetDefaultView(ConstConfigRcPtr *config, const char *disp
return NULL;
}
-int OCIO_configGetNumViews(ConstConfigRcPtr *config, const char *display)
+int OCIOImpl::configGetNumViews(ConstConfigRcPtr *config, const char *display)
{
try {
return (*config)->getNumViews(display);
@@ -254,7 +249,7 @@ int OCIO_configGetNumViews(ConstConfigRcPtr *config, const char *display)
return 0;
}
-const char *OCIO_configGetView(ConstConfigRcPtr *config, const char *display, int index)
+const char *OCIOImpl::configGetView(ConstConfigRcPtr *config, const char *display, int index)
{
try {
return (*config)->getView(display, index);
@@ -266,7 +261,7 @@ const char *OCIO_configGetView(ConstConfigRcPtr *config, const char *display, in
return NULL;
}
-const char *OCIO_configGetDisplayColorSpaceName(ConstConfigRcPtr *config, const char *display, const char *view)
+const char *OCIOImpl::configGetDisplayColorSpaceName(ConstConfigRcPtr *config, const char *display, const char *view)
{
try {
return (*config)->getDisplayColorSpaceName(display, view);
@@ -278,7 +273,7 @@ const char *OCIO_configGetDisplayColorSpaceName(ConstConfigRcPtr *config, const
return NULL;
}
-int OCIO_colorSpaceIsInvertible(ConstColorSpaceRcPtr *cs)
+int OCIOImpl::colorSpaceIsInvertible(ConstColorSpaceRcPtr *cs)
{
const char *family = (*cs)->getFamily();
@@ -302,17 +297,17 @@ int OCIO_colorSpaceIsInvertible(ConstColorSpaceRcPtr *cs)
return true;
}
-int OCIO_colorSpaceIsData(ConstColorSpaceRcPtr *cs)
+int OCIOImpl::colorSpaceIsData(ConstColorSpaceRcPtr *cs)
{
return ((*cs)->isData());
}
-void OCIO_colorSpaceRelease(ConstColorSpaceRcPtr *cs)
+void OCIOImpl::colorSpaceRelease(ConstColorSpaceRcPtr *cs)
{
MEM_DELETE(cs, ConstColorSpaceRcPtr);
}
-ConstProcessorRcPtr *OCIO_configGetProcessorWithNames(ConstConfigRcPtr *config, const char *srcName, const char *dstName)
+ConstProcessorRcPtr *OCIOImpl::configGetProcessorWithNames(ConstConfigRcPtr *config, const char *srcName, const char *dstName)
{
ConstProcessorRcPtr *p = MEM_NEW(ConstProcessorRcPtr);
@@ -331,7 +326,7 @@ ConstProcessorRcPtr *OCIO_configGetProcessorWithNames(ConstConfigRcPtr *config,
return 0;
}
-ConstProcessorRcPtr *OCIO_configGetProcessor(ConstConfigRcPtr *config, ConstTransformRcPtr *transform)
+ConstProcessorRcPtr *OCIOImpl::configGetProcessor(ConstConfigRcPtr *config, ConstTransformRcPtr *transform)
{
ConstProcessorRcPtr *p = MEM_NEW(ConstProcessorRcPtr);
@@ -350,7 +345,7 @@ ConstProcessorRcPtr *OCIO_configGetProcessor(ConstConfigRcPtr *config, ConstTran
return NULL;
}
-void OCIO_processorApply(ConstProcessorRcPtr *processor, PackedImageDesc *img)
+void OCIOImpl::processorApply(ConstProcessorRcPtr *processor, PackedImageDesc *img)
{
try {
(*processor)->apply(*img);
@@ -360,7 +355,7 @@ void OCIO_processorApply(ConstProcessorRcPtr *processor, PackedImageDesc *img)
}
}
-void OCIO_processorApply_predivide(ConstProcessorRcPtr *processor, PackedImageDesc *img)
+void OCIOImpl::processorApply_predivide(ConstProcessorRcPtr *processor, PackedImageDesc *img)
{
try {
int channels = img->getNumChannels();
@@ -375,7 +370,7 @@ void OCIO_processorApply_predivide(ConstProcessorRcPtr *processor, PackedImageDe
for (int x = 0; x < width; x++) {
float *pixel = pixels + 4 * (y * width + x);
- OCIO_processorApplyRGBA_predivide(processor, pixel);
+ processorApplyRGBA_predivide(processor, pixel);
}
}
}
@@ -388,17 +383,17 @@ void OCIO_processorApply_predivide(ConstProcessorRcPtr *processor, PackedImageDe
}
}
-void OCIO_processorApplyRGB(ConstProcessorRcPtr *processor, float *pixel)
+void OCIOImpl::processorApplyRGB(ConstProcessorRcPtr *processor, float *pixel)
{
(*processor)->applyRGB(pixel);
}
-void OCIO_processorApplyRGBA(ConstProcessorRcPtr *processor, float *pixel)
+void OCIOImpl::processorApplyRGBA(ConstProcessorRcPtr *processor, float *pixel)
{
(*processor)->applyRGBA(pixel);
}
-void OCIO_processorApplyRGBA_predivide(ConstProcessorRcPtr *processor, float *pixel)
+void OCIOImpl::processorApplyRGBA_predivide(ConstProcessorRcPtr *processor, float *pixel)
{
if (pixel[3] == 1.0f || pixel[3] == 0.0f) {
(*processor)->applyRGBA(pixel);
@@ -421,28 +416,28 @@ void OCIO_processorApplyRGBA_predivide(ConstProcessorRcPtr *processor, float *pi
}
}
-void OCIO_processorRelease(ConstProcessorRcPtr *p)
+void OCIOImpl::processorRelease(ConstProcessorRcPtr *p)
{
p->~ConstProcessorRcPtr();
MEM_freeN(p);
}
-const char *OCIO_colorSpaceGetName(ConstColorSpaceRcPtr *cs)
+const char *OCIOImpl::colorSpaceGetName(ConstColorSpaceRcPtr *cs)
{
return (*cs)->getName();
}
-const char *OCIO_colorSpaceGetDescription(ConstColorSpaceRcPtr *cs)
+const char *OCIOImpl::colorSpaceGetDescription(ConstColorSpaceRcPtr *cs)
{
return (*cs)->getDescription();
}
-const char *OCIO_colorSpaceGetFamily(ConstColorSpaceRcPtr *cs)
+const char *OCIOImpl::colorSpaceGetFamily(ConstColorSpaceRcPtr *cs)
{
return (*cs)->getFamily();
}
-DisplayTransformRcPtr *OCIO_createDisplayTransform(void)
+DisplayTransformRcPtr *OCIOImpl::createDisplayTransform(void)
{
DisplayTransformRcPtr *dt = MEM_NEW(DisplayTransformRcPtr);
@@ -451,38 +446,38 @@ DisplayTransformRcPtr *OCIO_createDisplayTransform(void)
return dt;
}
-void OCIO_displayTransformSetInputColorSpaceName(DisplayTransformRcPtr *dt, const char *name)
+void OCIOImpl::displayTransformSetInputColorSpaceName(DisplayTransformRcPtr *dt, const char *name)
{
(*dt)->setInputColorSpaceName(name);
}
-void OCIO_displayTransformSetDisplay(DisplayTransformRcPtr *dt, const char *name)
+void OCIOImpl::displayTransformSetDisplay(DisplayTransformRcPtr *dt, const char *name)
{
(*dt)->setDisplay(name);
}
-void OCIO_displayTransformSetView(DisplayTransformRcPtr *dt, const char *name)
+void OCIOImpl::displayTransformSetView(DisplayTransformRcPtr *dt, const char *name)
{
(*dt)->setView(name);
}
-void OCIO_displayTransformSetDisplayCC(DisplayTransformRcPtr *dt, ConstTransformRcPtr *t)
+void OCIOImpl::displayTransformSetDisplayCC(DisplayTransformRcPtr *dt, ConstTransformRcPtr *t)
{
(*dt)->setDisplayCC(*t);
}
-void OCIO_displayTransformSetLinearCC(DisplayTransformRcPtr *dt, ConstTransformRcPtr *t)
+void OCIOImpl::displayTransformSetLinearCC(DisplayTransformRcPtr *dt, ConstTransformRcPtr *t)
{
(*dt)->setLinearCC(*t);
}
-void OCIO_displayTransformRelease(DisplayTransformRcPtr *dt)
+void OCIOImpl::displayTransformRelease(DisplayTransformRcPtr *dt)
{
MEM_DELETE(dt, DisplayTransformRcPtr);
}
-PackedImageDesc *OCIO_createPackedImageDesc(float *data, long width, long height, long numChannels,
- long chanStrideBytes, long xStrideBytes, long yStrideBytes)
+PackedImageDesc *OCIOImpl::createPackedImageDesc(float *data, long width, long height, long numChannels,
+ long chanStrideBytes, long xStrideBytes, long yStrideBytes)
{
try {
void *mem = MEM_mallocN(sizeof(PackedImageDesc), __func__);
@@ -497,12 +492,12 @@ PackedImageDesc *OCIO_createPackedImageDesc(float *data, long width, long height
return NULL;
}
-void OCIO_packedImageDescRelease(PackedImageDesc* id)
+void OCIOImpl::packedImageDescRelease(PackedImageDesc* id)
{
MEM_DELETE(id, PackedImageDesc);
}
-ExponentTransformRcPtr *OCIO_createExponentTransform(void)
+ExponentTransformRcPtr *OCIOImpl::createExponentTransform(void)
{
ExponentTransformRcPtr *et = MEM_NEW(ExponentTransformRcPtr);
@@ -511,17 +506,17 @@ ExponentTransformRcPtr *OCIO_createExponentTransform(void)
return et;
}
-void OCIO_exponentTransformSetValue(ExponentTransformRcPtr *et, const float *exponent)
+void OCIOImpl::exponentTransformSetValue(ExponentTransformRcPtr *et, const float *exponent)
{
(*et)->setValue(exponent);
}
-void OCIO_exponentTransformRelease(ExponentTransformRcPtr *et)
+void OCIOImpl::exponentTransformRelease(ExponentTransformRcPtr *et)
{
MEM_DELETE(et, ExponentTransformRcPtr);
}
-MatrixTransformRcPtr *OCIO_createMatrixTransform(void)
+MatrixTransformRcPtr *OCIOImpl::createMatrixTransform(void)
{
MatrixTransformRcPtr *mt = MEM_NEW(MatrixTransformRcPtr);
@@ -530,17 +525,17 @@ MatrixTransformRcPtr *OCIO_createMatrixTransform(void)
return mt;
}
-void OCIO_matrixTransformSetValue(MatrixTransformRcPtr *mt, const float *m44, const float *offset4)
+void OCIOImpl::matrixTransformSetValue(MatrixTransformRcPtr *mt, const float *m44, const float *offset4)
{
(*mt)->setValue(m44, offset4);
}
-void OCIO_matrixTransformRelease(MatrixTransformRcPtr *mt)
+void OCIOImpl::matrixTransformRelease(MatrixTransformRcPtr *mt)
{
MEM_DELETE(mt, MatrixTransformRcPtr);
}
-void OCIO_matrixTransformScale(float * m44, float * offset4, const float *scale4f)
+void OCIOImpl::matrixTransformScale(float * m44, float * offset4, const float *scale4f)
{
MatrixTransform::Scale(m44, offset4, scale4f);
}
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 */
diff --git a/source/blender/imbuf/intern/colormanagement.c b/source/blender/imbuf/intern/colormanagement.c
index 1a86932b0a9..bb1449060dd 100644
--- a/source/blender/imbuf/intern/colormanagement.c
+++ b/source/blender/imbuf/intern/colormanagement.c
@@ -546,6 +546,8 @@ static void colormanage_free_config(void)
/* free views */
BLI_freelistN(&global_views);
+
+ OCIO_exit();
}
void colormanagement_init(void)
@@ -555,6 +557,8 @@ void colormanagement_init(void)
char configfile[FILE_MAX];
ConstConfigRcPtr *config = NULL;
+ OCIO_init();
+
ocio_env = getenv("OCIO");
if (ocio_env && ocio_env[0] != '\0')
@@ -571,7 +575,9 @@ void colormanagement_init(void)
}
if (config == NULL) {
- config = OCIO_getDefaultConfig();
+ printf("Color management: using fallback mode for management\n");
+
+ config = OCIO_configCreateFallback();
}
if (config) {
@@ -638,19 +644,15 @@ static const char *display_transform_get_colorspace_name(const ColorManagedViewS
{
ConstConfigRcPtr *config = OCIO_getCurrentConfig();
- if (config) {
- const char *display = display_settings->display_device;
- const char *view = view_settings->view_transform;
- const char *colorspace_name;
+ const char *display = display_settings->display_device;
+ const char *view = view_settings->view_transform;
+ const char *colorspace_name;
- colorspace_name = OCIO_configGetDisplayColorSpaceName(config, display, view);
+ colorspace_name = OCIO_configGetDisplayColorSpaceName(config, display, view);
- OCIO_configRelease(config);
-
- return colorspace_name;
- }
+ OCIO_configRelease(config);
- return NULL;
+ return colorspace_name;
}
static ColorSpace *display_transform_get_colorspace(const ColorManagedViewSettings *view_settings,
@@ -671,12 +673,6 @@ static ConstProcessorRcPtr *create_display_buffer_processor(const char *view_tra
DisplayTransformRcPtr *dt;
ConstProcessorRcPtr *processor;
- if (!config) {
- /* there's no valid OCIO configuration, can't create processor */
-
- return NULL;
- }
-
dt = OCIO_createDisplayTransform();
/* assuming handling buffer was already converted to scene linear space */
@@ -726,12 +722,6 @@ static ConstProcessorRcPtr *create_colorspace_transform_processor(const char *fr
ConstConfigRcPtr *config = OCIO_getCurrentConfig();
ConstProcessorRcPtr *processor;
- if (!config) {
- /* there's no valid OCIO configuration, can't create processor */
-
- return NULL;
- }
-
processor = OCIO_configGetProcessorWithNames(config, from_colorspace, to_colorspace);
OCIO_configRelease(config);
@@ -881,7 +871,7 @@ void colormanage_imbuf_make_linear(ImBuf *ibuf, const char *from_colorspace)
{
ColorSpace *colorspace = colormanage_colorspace_get_named(from_colorspace);
- if (colorspace && colorspace->is_data) {
+ if (colorspace->is_data) {
ibuf->colormanage_flag |= IMB_COLORMANAGE_IS_DATA;
return;
}
@@ -1074,7 +1064,7 @@ void IMB_colormanagement_check_is_data(ImBuf *ibuf, const char *name)
{
ColorSpace *colorspace = colormanage_colorspace_get_named(name);
- if (colorspace && colorspace->is_data)
+ if (colorspace->is_data)
ibuf->colormanage_flag |= IMB_COLORMANAGE_IS_DATA;
else
ibuf->colormanage_flag &= ~IMB_COLORMANAGE_IS_DATA;
@@ -1086,7 +1076,7 @@ void IMB_colormanagement_assign_float_colorspace(ImBuf *ibuf, const char *name)
ibuf->float_colorspace = colorspace;
- if (colorspace && colorspace->is_data)
+ if (colorspace->is_data)
ibuf->colormanage_flag |= IMB_COLORMANAGE_IS_DATA;
else
ibuf->colormanage_flag &= ~IMB_COLORMANAGE_IS_DATA;
@@ -1098,7 +1088,7 @@ void IMB_colormanagement_assign_rect_colorspace(ImBuf *ibuf, const char *name)
ibuf->rect_colorspace = colorspace;
- if (colorspace && colorspace->is_data)
+ if (colorspace->is_data)
ibuf->colormanage_flag |= IMB_COLORMANAGE_IS_DATA;
else
ibuf->colormanage_flag &= ~IMB_COLORMANAGE_IS_DATA;
@@ -1898,12 +1888,6 @@ const char *colormanage_display_get_default_name(void)
ConstConfigRcPtr *config = OCIO_getCurrentConfig();
const char *display_name;
- if (!config) {
- /* no valid OCIO configuration, can't get default display */
-
- return NULL;
- }
-
display_name = OCIO_configGetDefaultDisplay(config);
OCIO_configRelease(config);
@@ -2015,12 +1999,6 @@ const char *colormanage_view_get_default_name(const ColorManagedDisplay *display
ConstConfigRcPtr *config = OCIO_getCurrentConfig();
const char *name;
- if (!config) {
- /* no valid OCIO configuration, can't get default view */
-
- return NULL;
- }
-
name = OCIO_configGetDefaultView(config, display->name);
OCIO_configRelease(config);