13 |
13 |
14 int render_local (struct render *render, double *duration) { |
14 int render_local (struct render *render, double *duration) { |
15 unsigned char *rowbuf = NULL; |
15 unsigned char *rowbuf = NULL; |
16 struct render_png png_ctx; |
16 struct render_png png_ctx; |
17 struct render_raw raw_ctx; |
17 struct render_raw raw_ctx; |
|
18 int must_deinit = 0; |
18 clock_t t1, t2; |
19 clock_t t1, t2; |
19 |
20 |
20 if (duration) |
21 if (duration) |
21 *duration = -1; |
22 *duration = -1; |
22 |
|
23 // ugh |
|
24 memset(&png_ctx, 0, sizeof(png_ctx)); |
|
25 memset(&raw_ctx, 0, sizeof(raw_ctx)); |
|
26 |
23 |
27 // alloc the memory buffer |
24 // alloc the memory buffer |
28 if (!(rowbuf = malloc(render->img_w))) |
25 if (!(rowbuf = malloc(render->img_w))) |
29 ERROR("malloc"); |
26 ERROR("malloc"); |
30 |
27 |
31 // what mode? |
28 // what mode? |
32 switch (render->mode) { |
29 switch (render->mode) { |
33 case RENDER_PNG : |
30 case RENDER_PNG : |
34 // the render_png stuff |
31 // the render_png stuff |
|
32 memset(&png_ctx, 0, sizeof(png_ctx)); |
|
33 |
35 if (render_png_init(&png_ctx, render)) |
34 if (render_png_init(&png_ctx, render)) |
36 ERROR("render_png_init"); |
35 ERROR("render_png_init"); |
37 |
36 |
|
37 must_deinit = RENDER_PNG; |
|
38 |
38 // set render_* to use the render_png |
39 // set render_* to use the render_png |
39 if (render_local_mem(render, &rowbuf, (int(*)(void *arg, unsigned char *)) &render_png_row, &png_ctx)) |
40 if (render_local_mem(render, &rowbuf, (int(*)(void *arg, unsigned char *)) &render_png_row, &png_ctx)) |
40 ERROR("render_local_mem"); |
41 ERROR("render_local_mem"); |
41 |
42 |
42 break; |
43 break; |
43 |
44 |
44 case RENDER_RAW : |
45 case RENDER_RAW : |
45 // the render_raw stuff |
46 // the render_raw stuff |
|
47 memset(&raw_ctx, 0, sizeof(raw_ctx)); |
|
48 |
46 if (render_raw_init(&raw_ctx, render)) |
49 if (render_raw_init(&raw_ctx, render)) |
47 ERROR("render_raw_init"); |
50 ERROR("render_raw_init"); |
|
51 |
|
52 must_deinit = RENDER_RAW; |
48 |
53 |
49 // set render_* to use the render_raw |
54 // set render_* to use the render_raw |
50 if (render_local_mem(render, &rowbuf, (int(*)(void *arg, unsigned char *)) &render_raw_row, &raw_ctx)) |
55 if (render_local_mem(render, &rowbuf, (int(*)(void *arg, unsigned char *)) &render_raw_row, &raw_ctx)) |
51 ERROR("render_local_mem"); |
56 ERROR("render_local_mem"); |
52 |
57 |