diff options
Diffstat (limited to 'source/blender')
-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 c6140da39a1..ecef621b510 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> @@ -428,6 +429,14 @@ static bool imb_save_openexr_half( 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)); @@ -543,6 +552,14 @@ static bool imb_save_openexr_float( 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]; |