[Bf-blender-cvs] [138decb] master: Temporary "fix" for crash when saving OpenEXR Multi-View from Image Editor

Dalai Felinto noreply at git.blender.org
Wed Oct 28 17:07:16 CET 2015


Commit: 138decb7dc6e4c067c8c290b8a034808893bba1f
Author: Dalai Felinto
Date:   Wed Oct 28 14:05:49 2015 -0200
Branches: master
https://developer.blender.org/rB138decb7dc6e4c067c8c290b8a034808893bba1f

Temporary "fix" for crash when saving OpenEXR Multi-View from Image Editor

===================================================================

M	source/blender/imbuf/intern/openexr/openexr_api.cpp

===================================================================

diff --git a/source/blender/imbuf/intern/openexr/openexr_api.cpp b/source/blender/imbuf/intern/openexr/openexr_api.cpp
index c6140da..ecef621 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];




More information about the Bf-blender-cvs mailing list