diff --git a/intern/opencolorio/fallback_impl.cc b/intern/opencolorio/fallback_impl.cc index 82bd4d9fc36..aaab8b4e6b9 100644 --- a/intern/opencolorio/fallback_impl.cc +++ b/intern/opencolorio/fallback_impl.cc @@ -445,6 +445,16 @@ const char *FallbackImpl::colorSpaceGetFamily(OCIO_ConstColorSpaceRcPtr * /*cs*/ return ""; } +int FallbackImpl::colorSpaceGetNumAliases(OCIO_ConstColorSpaceRcPtr * /*cs*/) +{ + return 0; +} +const char *FallbackImpl::colorSpaceGetAlias(OCIO_ConstColorSpaceRcPtr * /*cs*/, + const int /*index*/) +{ + return ""; +} + OCIO_ConstProcessorRcPtr *FallbackImpl::createDisplayProcessor(OCIO_ConstConfigRcPtr * /*config*/, const char * /*input*/, const char * /*view*/, diff --git a/intern/opencolorio/ocio_capi.cc b/intern/opencolorio/ocio_capi.cc index 7e7710843e2..91784a288c8 100644 --- a/intern/opencolorio/ocio_capi.cc +++ b/intern/opencolorio/ocio_capi.cc @@ -234,6 +234,16 @@ const char *OCIO_colorSpaceGetFamily(OCIO_ConstColorSpaceRcPtr *cs) return impl->colorSpaceGetFamily(cs); } +int OCIO_colorSpaceGetNumAliases(OCIO_ConstColorSpaceRcPtr *cs) +{ + return impl->colorSpaceGetNumAliases(cs); +} + +const char *OCIO_colorSpaceGetAlias(OCIO_ConstColorSpaceRcPtr *cs, const int index) +{ + return impl->colorSpaceGetAlias(cs, index); +} + OCIO_ConstProcessorRcPtr *OCIO_createDisplayProcessor(OCIO_ConstConfigRcPtr *config, const char *input, const char *view, diff --git a/intern/opencolorio/ocio_capi.h b/intern/opencolorio/ocio_capi.h index 87a8043aec6..5c036ec263a 100644 --- a/intern/opencolorio/ocio_capi.h +++ b/intern/opencolorio/ocio_capi.h @@ -157,6 +157,8 @@ void OCIO_cpuProcessorRelease(OCIO_ConstCPUProcessorRcPtr *processor); const char *OCIO_colorSpaceGetName(OCIO_ConstColorSpaceRcPtr *cs); const char *OCIO_colorSpaceGetDescription(OCIO_ConstColorSpaceRcPtr *cs); const char *OCIO_colorSpaceGetFamily(OCIO_ConstColorSpaceRcPtr *cs); +int OCIO_colorSpaceGetNumAliases(OCIO_ConstColorSpaceRcPtr *cs); +const char *OCIO_colorSpaceGetAlias(OCIO_ConstColorSpaceRcPtr *cs, const int index); OCIO_ConstProcessorRcPtr *OCIO_createDisplayProcessor(OCIO_ConstConfigRcPtr *config, const char *input, diff --git a/intern/opencolorio/ocio_impl.cc b/intern/opencolorio/ocio_impl.cc index a02a37522b9..ca1b7cc42e1 100644 --- a/intern/opencolorio/ocio_impl.cc +++ b/intern/opencolorio/ocio_impl.cc @@ -640,6 +640,15 @@ const char *OCIOImpl::colorSpaceGetFamily(OCIO_ConstColorSpaceRcPtr *cs) return (*(ConstColorSpaceRcPtr *)cs)->getFamily(); } +int OCIOImpl::colorSpaceGetNumAliases(OCIO_ConstColorSpaceRcPtr *cs) +{ + return (*(ConstColorSpaceRcPtr *)cs)->getNumAliases(); +} +const char *OCIOImpl::colorSpaceGetAlias(OCIO_ConstColorSpaceRcPtr *cs, const int index) +{ + return (*(ConstColorSpaceRcPtr *)cs)->getAlias(index); +} + OCIO_ConstProcessorRcPtr *OCIOImpl::createDisplayProcessor(OCIO_ConstConfigRcPtr *config_, const char *input, const char *view, diff --git a/intern/opencolorio/ocio_impl.h b/intern/opencolorio/ocio_impl.h index 5be1d3aacf8..d42fa58121f 100644 --- a/intern/opencolorio/ocio_impl.h +++ b/intern/opencolorio/ocio_impl.h @@ -76,6 +76,8 @@ class IOCIOImpl { virtual const char *colorSpaceGetName(OCIO_ConstColorSpaceRcPtr *cs) = 0; virtual const char *colorSpaceGetDescription(OCIO_ConstColorSpaceRcPtr *cs) = 0; virtual const char *colorSpaceGetFamily(OCIO_ConstColorSpaceRcPtr *cs) = 0; + virtual int colorSpaceGetNumAliases(OCIO_ConstColorSpaceRcPtr *cs) = 0; + virtual const char *colorSpaceGetAlias(OCIO_ConstColorSpaceRcPtr *cs, const int index) = 0; virtual OCIO_ConstProcessorRcPtr *createDisplayProcessor(OCIO_ConstConfigRcPtr *config, const char *input, @@ -190,6 +192,8 @@ class FallbackImpl : public IOCIOImpl { const char *colorSpaceGetName(OCIO_ConstColorSpaceRcPtr *cs); const char *colorSpaceGetDescription(OCIO_ConstColorSpaceRcPtr *cs); const char *colorSpaceGetFamily(OCIO_ConstColorSpaceRcPtr *cs); + int colorSpaceGetNumAliases(OCIO_ConstColorSpaceRcPtr *cs); + const char *colorSpaceGetAlias(OCIO_ConstColorSpaceRcPtr *cs, const int index); OCIO_ConstProcessorRcPtr *createDisplayProcessor(OCIO_ConstConfigRcPtr *config, const char *input, @@ -277,6 +281,8 @@ class OCIOImpl : public IOCIOImpl { const char *colorSpaceGetName(OCIO_ConstColorSpaceRcPtr *cs); const char *colorSpaceGetDescription(OCIO_ConstColorSpaceRcPtr *cs); const char *colorSpaceGetFamily(OCIO_ConstColorSpaceRcPtr *cs); + int colorSpaceGetNumAliases(OCIO_ConstColorSpaceRcPtr *cs); + const char *colorSpaceGetAlias(OCIO_ConstColorSpaceRcPtr *cs, const int index); OCIO_ConstProcessorRcPtr *createDisplayProcessor(OCIO_ConstConfigRcPtr *config, const char *input, diff --git a/source/blender/imbuf/intern/IMB_colormanagement_intern.h b/source/blender/imbuf/intern/IMB_colormanagement_intern.h index 42941ace40b..c89b15480a2 100644 --- a/source/blender/imbuf/intern/IMB_colormanagement_intern.h +++ b/source/blender/imbuf/intern/IMB_colormanagement_intern.h @@ -33,6 +33,9 @@ typedef struct ColorSpace { struct OCIO_ConstCPUProcessorRcPtr *to_scene_linear; struct OCIO_ConstCPUProcessorRcPtr *from_scene_linear; + char (*aliases)[MAX_COLORSPACE_NAME]; + int num_aliases; + bool is_invertible; bool is_data; diff --git a/source/blender/imbuf/intern/colormanagement.c b/source/blender/imbuf/intern/colormanagement.c index 15a586ea762..3f8464d003e 100644 --- a/source/blender/imbuf/intern/colormanagement.c +++ b/source/blender/imbuf/intern/colormanagement.c @@ -504,7 +504,16 @@ static void colormanage_load_config(OCIO_ConstConfigRcPtr *config) is_invertible = OCIO_colorSpaceIsInvertible(ocio_colorspace); is_data = OCIO_colorSpaceIsData(ocio_colorspace); - colormanage_colorspace_add(name, description, is_invertible, is_data); + ColorSpace *colorspace = colormanage_colorspace_add(name, description, is_invertible, is_data); + + colorspace->num_aliases = OCIO_colorSpaceGetNumAliases(ocio_colorspace); + if (colorspace->num_aliases > 0) { + colorspace->aliases = MEM_callocN(sizeof(*colorspace->aliases) * colorspace->num_aliases, + "ColorSpace aliases"); + for (int i = 0; i < colorspace->num_aliases; i++) { + STRNCPY(colorspace->aliases[i], OCIO_colorSpaceGetAlias(ocio_colorspace, i)); + } + } OCIO_colorSpaceRelease(ocio_colorspace); } @@ -587,6 +596,7 @@ static void colormanage_free_config(void) } /* free color space itself */ + MEM_SAFE_FREE(colorspace->aliases); MEM_freeN(colorspace); colorspace = colorspace_next; @@ -3053,6 +3063,12 @@ ColorSpace *colormanage_colorspace_get_named(const char *name) if (STREQ(colorspace->name, name)) { return colorspace; } + + for (int i = 0; i < colorspace->num_aliases; i++) { + if (STREQ(colorspace->aliases[i], name)) { + return colorspace; + } + } } return NULL;