From eee46769cefe47c9edcc2ac430f212c1e31e7ad5 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Wed, 17 Jul 2019 20:46:04 +0200 Subject: Fix T66515, T67112, T61607: failure to read EXR files with single, named layer Like Blender renders without a Z channel. The single layer case assume that channel names are just R/G/B/A without any layer name prefix, and would not read channels like "Image.R". Carefully tested for regressions with the openexr project tests images, so this should be safe. --- .../blender/imbuf/intern/openexr/openexr_api.cpp | 27 +++------------------- 1 file changed, 3 insertions(+), 24 deletions(-) diff --git a/source/blender/imbuf/intern/openexr/openexr_api.cpp b/source/blender/imbuf/intern/openexr/openexr_api.cpp index 69dec88e727..c9883d5df86 100644 --- a/source/blender/imbuf/intern/openexr/openexr_api.cpp +++ b/source/blender/imbuf/intern/openexr/openexr_api.cpp @@ -1762,32 +1762,11 @@ static bool imb_exr_is_multilayer_file(MultiPartInputFile &file) const ChannelList &channels = file.header(0).channels(); std::set layerNames; - /* will not include empty layer names */ + /* This will not include empty layer names, so files with just R/G/B/A + * channels without a layer name will be single layer. */ channels.layers(layerNames); - if (layerNames.size() > 1) { - return true; - } - - if (layerNames.size()) { - /* if layerNames is not empty, it means at least one layer is non-empty, - * but it also could be layers without names in the file and such case - * shall be considered a multilayer exr - * - * that's what we do here: test whether they're empty layer names together - * with non-empty ones in the file - */ - for (ChannelList::ConstIterator i = channels.begin(); i != channels.end(); i++) { - std::string layerName = i.name(); - size_t pos = layerName.rfind('.'); - - if (pos == std::string::npos) { - return true; - } - } - } - - return false; + return (layerNames.size() > 0); } static void imb_exr_type_by_channels(ChannelList &channels, -- cgit v1.2.3