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:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2019-07-17 21:46:04 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2019-07-17 21:55:53 +0300
commiteee46769cefe47c9edcc2ac430f212c1e31e7ad5 (patch)
tree58637e3f5a5ae1d7b2765e7cc0a6c654d8001b7f /source/blender/imbuf
parent709f126e8143da4fa28a08a94e13581c68ab6b29 (diff)
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.
Diffstat (limited to 'source/blender/imbuf')
-rw-r--r--source/blender/imbuf/intern/openexr/openexr_api.cpp27
1 files 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<std::string> 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,