--- a/render_local.c Tue Jun 17 19:08:05 2008 +0300
+++ b/render_local.c Thu Jun 26 01:32:56 2008 +0300
@@ -15,15 +15,12 @@
unsigned char *rowbuf = NULL;
struct render_png png_ctx;
struct render_raw raw_ctx;
+ int must_deinit = 0;
clock_t t1, t2;
if (duration)
*duration = -1;
- // ugh
- memset(&png_ctx, 0, sizeof(png_ctx));
- memset(&raw_ctx, 0, sizeof(raw_ctx));
-
// alloc the memory buffer
if (!(rowbuf = malloc(render->img_w)))
ERROR("malloc");
@@ -32,9 +29,13 @@
switch (render->mode) {
case RENDER_PNG :
// the render_png stuff
+ memset(&png_ctx, 0, sizeof(png_ctx));
+
if (render_png_init(&png_ctx, render))
ERROR("render_png_init");
-
+
+ must_deinit = RENDER_PNG;
+
// set render_* to use the render_png
if (render_local_mem(render, &rowbuf, (int(*)(void *arg, unsigned char *)) &render_png_row, &png_ctx))
ERROR("render_local_mem");
@@ -43,8 +44,12 @@
case RENDER_RAW :
// the render_raw stuff
+ memset(&raw_ctx, 0, sizeof(raw_ctx));
+
if (render_raw_init(&raw_ctx, render))
ERROR("render_raw_init");
+
+ must_deinit = RENDER_RAW;
// set render_* to use the render_raw
if (render_local_mem(render, &rowbuf, (int(*)(void *arg, unsigned char *)) &render_raw_row, &raw_ctx))
@@ -73,9 +78,12 @@
error:
free(rowbuf);
+
+ if (must_deinit == RENDER_PNG)
+ render_png_deinit(&png_ctx);
- render_png_deinit(&png_ctx);
- render_raw_deinit(&raw_ctx);
+ else if (must_deinit == RENDER_RAW)
+ render_raw_deinit(&raw_ctx);
return -1;
}