catch exception and report an error when failing to write exr files - was crashing with debug builds.
This commit is contained in:
@@ -487,7 +487,7 @@ void IMB_exr_add_channel(void *handle, const char *layname, const char *passname
|
||||
}
|
||||
|
||||
/* only used for writing temp. render results (not image files) */
|
||||
void IMB_exr_begin_write(void *handle, const char *filename, int width, int height, int compress)
|
||||
int IMB_exr_begin_write(void *handle, const char *filename, int width, int height, int compress)
|
||||
{
|
||||
ExrHandle *data= (ExrHandle *)handle;
|
||||
Header header (width, height);
|
||||
@@ -504,8 +504,17 @@ void IMB_exr_begin_write(void *handle, const char *filename, int width, int heig
|
||||
/* header.lineOrder() = DECREASING_Y; this crashes in windows for file read! */
|
||||
|
||||
header.insert ("BlenderMultiChannel", StringAttribute ("Blender V2.55.1 and newer"));
|
||||
|
||||
data->ofile = new OutputFile(filename, header);
|
||||
|
||||
/* avoid crash/abort when we dont have permission to write here */
|
||||
try {
|
||||
data->ofile = new OutputFile(filename, header);
|
||||
}
|
||||
catch (const std::exception &exc) {
|
||||
std::cerr << "IMB_exr_begin_write: ERROR: " << exc.what() << std::endl;
|
||||
data->ofile = NULL;
|
||||
}
|
||||
|
||||
return (data->ofile != NULL);
|
||||
}
|
||||
|
||||
void IMB_exrtile_begin_write(void *handle, const char *filename, int mipmap, int width, int height, int tilex, int tiley)
|
||||
|
@@ -50,7 +50,7 @@ void * IMB_exr_get_handle (void);
|
||||
void IMB_exr_add_channel (void *handle, const char *layname, const char *passname, int xstride, int ystride, float *rect);
|
||||
|
||||
int IMB_exr_begin_read (void *handle, const char *filename, int *width, int *height);
|
||||
void IMB_exr_begin_write (void *handle, const char *filename, int width, int height, int compress);
|
||||
int IMB_exr_begin_write (void *handle, const char *filename, int width, int height, int compress);
|
||||
void IMB_exrtile_begin_write (void *handle, const char *filename, int mipmap, int width, int height, int tilex, int tiley);
|
||||
|
||||
void IMB_exr_set_channel (void *handle, const char *layname, const char *passname, int xstride, int ystride, float *rect);
|
||||
@@ -75,7 +75,7 @@ void * IMB_exr_get_handle (void) {return NULL;}
|
||||
void IMB_exr_add_channel (void *handle, const char *layname, const char *channame, int xstride, int ystride, float *rect) { (void)handle; (void)layname; (void)channame; (void)xstride; (void)ystride; (void)rect; }
|
||||
|
||||
int IMB_exr_begin_read (void *handle, const char *filename, int *width, int *height) { (void)handle; (void)filename; (void)width; (void)height; return 0;}
|
||||
void IMB_exr_begin_write (void *handle, const char *filename, int width, int height, int compress) { (void)handle; (void)filename; (void)width; (void)height; (void)compress; }
|
||||
int IMB_exr_begin_write (void *handle, const char *filename, int width, int height, int compress) { (void)handle; (void)filename; (void)width; (void)height; (void)compress; return 0;}
|
||||
void IMB_exrtile_begin_write (void *handle, const char *filename, int mipmap, int width, int height, int tilex, int tiley) { (void)handle; (void)filename; (void)mipmap; (void)width; (void)height; (void)tilex; (void)tiley; }
|
||||
|
||||
void IMB_exr_set_channel (void *handle, char *layname, const char *channame, int xstride, int ystride, float *rect) { (void)handle; (void)layname; (void)channame; (void)xstride; (void)ystride; (void)rect; }
|
||||
|
@@ -55,7 +55,6 @@ short IMB_saveiff(struct ImBuf *ibuf, const char *name, int flags)
|
||||
if(ibuf->rect==NULL && ibuf->rect_float)
|
||||
IMB_rect_from_float(ibuf);
|
||||
}
|
||||
/* TODO. have const char for image write funcs */
|
||||
return type->save(ibuf, name, flags);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user