diff --git a/src/aliceVision/image/io.cpp b/src/aliceVision/image/io.cpp index d16f0e4bbb..8ebaa09330 100644 --- a/src/aliceVision/image/io.cpp +++ b/src/aliceVision/image/io.cpp @@ -182,7 +182,7 @@ bool isValidColorSpace(std::string colorSpace) { const std::string CSlc = boost::to_lower_copy(colorSpace); - return (CSlc == "auto") || (CSlc == "linear") || (CSlc == "srgb") || (CSlc == "aces") || (CSlc == "acescg") || (CSlc == "no_conversion"); + return (CSlc == "auto") || (CSlc == "linear") || (CSlc == "srgb") || (CSlc == "aces2065-1") || (CSlc == "acescg") || (CSlc == "no_conversion"); } std::ostream& operator<<(std::ostream& os, EImageColorSpace dataType) @@ -508,13 +508,17 @@ void readImage(const std::string& path, if (imageReadOptions.workingColorSpace != EImageColorSpace::NO_CONVERSION) { - std::string inputColorSpace = inBuf.spec().get_string_attribute("oiio:ColorSpace", ""); - if (inputColorSpace.empty()) + std::string inputColorSpace = inBuf.spec().get_string_attribute("AliceVision:ColorSpace", ""); + if ((inputColorSpace.empty()) || !isValidColorSpace(inputColorSpace)) { - // Try to get color space using filename - inputColorSpace = EImageColorSpace_enumToString(getImageColorSpace(path)); + inputColorSpace = inBuf.spec().get_string_attribute("oiio:ColorSpace", ""); + if ((inputColorSpace.empty()) || !isValidColorSpace(inputColorSpace)) + { + // Try to get color space using filename + inputColorSpace = EImageColorSpace_enumToString(getImageColorSpace(path)); + } } - if (EImageColorSpace_stringToEnum(boost::to_lower_copy(inputColorSpace)) != imageReadOptions.workingColorSpace) + if ((EImageColorSpace_stringToEnum(inputColorSpace) != imageReadOptions.workingColorSpace) && isValidColorSpace(inputColorSpace)) { std::string outputColorSpace = (imageReadOptions.workingColorSpace == EImageColorSpace::LINEAR) ? "linear" : EImageColorSpace_enumToString(imageReadOptions.workingColorSpace); oiio::ImageBufAlgo::colorconvert(inBuf, inBuf, inputColorSpace, outputColorSpace, true, "", "", &colorConfigOCIO);