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:
authorDalai Felinto <dfelinto@gmail.com>2015-10-28 19:05:49 +0300
committerCampbell Barton <ideasman42@gmail.com>2015-10-29 13:10:17 +0300
commitb1eff080bdaf64b35ab9bf28c94715599f70be73 (patch)
treee7b13618bcd5c5c5a530dcdf5e8155cfe42ce2c7
parentc2337748e59d2027459513f789e9bf0b93d5d018 (diff)
Temporary "fix" for crash when saving OpenEXR Multi-View from Image Editor
-rw-r--r--source/blender/imbuf/intern/openexr/openexr_api.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/source/blender/imbuf/intern/openexr/openexr_api.cpp b/source/blender/imbuf/intern/openexr/openexr_api.cpp
index c3fb43b44af..80a4a332378 100644
--- a/source/blender/imbuf/intern/openexr/openexr_api.cpp
+++ b/source/blender/imbuf/intern/openexr/openexr_api.cpp
@@ -32,6 +32,7 @@
#include <stdlib.h>
#include <stdio.h>
#include <stddef.h>
+#include <stdexcept>
#include <fstream>
#include <string>
#include <set>
@@ -427,6 +428,14 @@ static bool imb_save_openexr_half(ImBuf *ibuf, const char *name, const int flags
const size_t offset = view_id * width * height;
RGBAZ *to = pixels + offset;
+ /* TODO (dfelinto)
+ * In some cases we get NULL ibufs, it needs investigation, meanwhile prevent crash
+ * Multiview Render + Image Editor + OpenEXR + Multi-View
+ */
+ if (view_ibuf == NULL) {
+ throw std::runtime_error(std::string("Missing data to write to ") + name);
+ }
+
/* indicate used buffers */
frameBuffer.insert(insertViewName("R", views, view_id), Slice(HALF, (char *) &pixels[offset].r, xstride, ystride));
frameBuffer.insert(insertViewName("G", views, view_id), Slice(HALF, (char *) &pixels[offset].g, xstride, ystride));
@@ -541,6 +550,14 @@ static bool imb_save_openexr_float(ImBuf *ibuf, const char *name, const int flag
float *rect[4] = {NULL, NULL, NULL, NULL};
ImBuf *view_ibuf = is_multiview ? getbuffer(ibuf->userdata, view_id) : ibuf;
+ /* TODO (dfelinto)
+ * In some cases we get NULL ibufs, it needs investigation, meanwhile prevent crash
+ * Multiview Render + Image Editor + OpenEXR + Multi-View
+ */
+ if (view_ibuf == NULL) {
+ throw std::runtime_error(std::string("Missing data to write to ") + name);
+ }
+
/* last scanline, stride negative */
rect[0] = view_ibuf->rect_float + channels * (height - 1) * width;
rect[1] = (channels >= 2) ? rect[0] + 1 : rect[0];