diff options
author | Dalai Felinto <dfelinto@gmail.com> | 2015-10-28 19:05:49 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2015-10-29 13:10:17 +0300 |
commit | b1eff080bdaf64b35ab9bf28c94715599f70be73 (patch) | |
tree | e7b13618bcd5c5c5a530dcdf5e8155cfe42ce2c7 | |
parent | c2337748e59d2027459513f789e9bf0b93d5d018 (diff) |
Temporary "fix" for crash when saving OpenEXR Multi-View from Image Editor
-rw-r--r-- | source/blender/imbuf/intern/openexr/openexr_api.cpp | 17 |
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]; |