author | Tero Marttila <terom@fixme.fi> |
Mon, 09 Jun 2008 03:15:34 +0300 | |
changeset 17 | 8e8b56b0e0f5 |
child 18 | 86f2e5b7191b |
permissions | -rw-r--r-- |
17
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
1 |
#include <stdlib.h> |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
2 |
#include <assert.h> |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
3 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
4 |
#include "common.h" |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
5 |
#include "render_struct.h" |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
6 |
#include "render_slices_struct.h" |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
7 |
#include "render_slices.h" |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
8 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
9 |
void render_slices_free (struct render_slices *ctx) { |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
10 |
render_slices_deinit(ctx); |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
11 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
12 |
if (ctx->owned_by_me) |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
13 |
free(ctx); |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
14 |
} |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
15 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
16 |
int render_slices_deinit (struct render_slices *ctx) { |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
17 |
// if it's not initialized, just ignore |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
18 |
if (!ctx->rowbuf) |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
19 |
return 1; |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
20 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
21 |
free(ctx->rowbuf); |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
22 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
23 |
render_png_deinit(&ctx->png_info); |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
24 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
25 |
return 0; |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
26 |
} |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
27 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
28 |
#define HALF(a, b) (( a + b) / 2) |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
29 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
30 |
int render_slices_init (struct render_slices *ctx, struct render *render) { |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
31 |
// initialize the slices |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
32 |
// for now, just split it in half into two render_ts |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
33 |
ctx->slices[0].info.index = 0; |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
34 |
ctx->slices[0].info.render_info = &ctx->slices[0].render_info; |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
35 |
ctx->slices[0].self = ctx; |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
36 |
ctx->slices[0].row_offset = 0; |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
37 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
38 |
ctx->slices[1].info.index = 1; |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
39 |
ctx->slices[1].info.render_info = &ctx->slices[1].render_info; |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
40 |
ctx->slices[1].self = ctx; |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
41 |
ctx->slices[1].row_offset = render->img_w / 2; |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
42 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
43 |
ctx->num_slices = 2; |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
44 |
ctx->render_row = 0; |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
45 |
ctx->done_row = -1; |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
46 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
47 |
assert(RENDER_SLICES_MAX >= 2); |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
48 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
49 |
if ( |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
50 |
render_init (&ctx->slices[0].render_info, RENDER_RAW) |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
51 |
|| render_init (&ctx->slices[1].render_info, RENDER_RAW) |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
52 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
53 |
|| render_set_size (&ctx->slices[0].render_info, render->img_w / 2, render->img_h) |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
54 |
|| render_set_size (&ctx->slices[1].render_info, render->img_w / 2 + render->img_w % 2, render->img_h) |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
55 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
56 |
|| render_region_raw (&ctx->slices[0].render_info, render->x1, render->y1, HALF(render->x1, render->x2), render->y2) |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
57 |
|| render_region_raw (&ctx->slices[1].render_info, HALF(render->x1, render->x2), render->y1, render->x2, render->y2) |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
58 |
) |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
59 |
ERROR("render_{init,set_size,set_region_raw}"); |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
60 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
61 |
// allocate the rowbuf |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
62 |
if (!(ctx->rowbuf = malloc(render->img_w * 2))) |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
63 |
ERROR("malloc"); |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
64 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
65 |
// update the slice_buf pointers |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
66 |
ctx->rows[0] = ctx->rowbuf; |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
67 |
ctx->rows[1] = ctx->rowbuf + render->img_w; |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
68 |
ctx->slices[0].info.render_buf = ctx->rows[ctx->render_row] + ctx->slices[0].row_offset; |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
69 |
ctx->slices[1].info.render_buf = ctx->rows[ctx->render_row] + ctx->slices[1].row_offset; |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
70 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
71 |
// png info |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
72 |
if (render_png_init(&ctx->png_info, render)) |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
73 |
ERROR("render_png_init"); |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
74 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
75 |
// great success! |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
76 |
return 0; |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
77 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
78 |
error: |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
79 |
render_slices_deinit(ctx); |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
80 |
return -1; |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
81 |
} |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
82 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
83 |
struct render_slices *render_slices_alloc (struct render *render) { |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
84 |
struct render_slices *ctx = NULL; |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
85 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
86 |
// allocate it |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
87 |
if (!(ctx = calloc(1, sizeof(*ctx)))) |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
88 |
ERROR("calloc"); |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
89 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
90 |
// mark it for free()ing |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
91 |
ctx->owned_by_me = 1; |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
92 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
93 |
// initialize it |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
94 |
if (render_slices_init(ctx, render)) |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
95 |
goto error; |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
96 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
97 |
return ctx; |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
98 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
99 |
error : |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
100 |
render_slices_free(ctx); |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
101 |
return NULL; |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
102 |
} |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
103 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
104 |
int render_slices_get_count (struct render_slices *ctx) { |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
105 |
return ctx->num_slices; |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
106 |
} |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
107 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
108 |
struct render_slice_info *render_slices_get_slice_info (struct render_slices *ctx, int index) { |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
109 |
assert(index >= 0 && index < ctx->num_slices); |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
110 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
111 |
return &ctx->slices[index].info; |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
112 |
} |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
113 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
114 |
int render_slices_segment_done (struct render_slices *ctx, int index) { |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
115 |
assert(index >= 0 && index < ctx->num_slices); |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
116 |
assert(ctx->slices_done < ctx->num_slices); |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
117 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
118 |
// keep track of the number of full slices |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
119 |
ctx->slices_done++; |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
120 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
121 |
// is the row complete? |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
122 |
if (ctx->slices_done == ctx->num_slices) { |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
123 |
// the row is complete |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
124 |
ctx->slices_done = 0; |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
125 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
126 |
// is the other row waiting for it to get processed? |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
127 |
if (ctx->done_row < 0) { |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
128 |
// no, point the done_row at this row, point the render buffers to the unused row |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
129 |
ctx->done_row = ctx->render_row; |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
130 |
ctx->render_row = (ctx->render_row == 0 ? 1 : 0); |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
131 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
132 |
int i ; |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
133 |
for (i = 0; i < ctx->num_slices; i++) { |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
134 |
ctx->slices[i].info.render_buf = ctx->rows[ctx->render_row] + ctx->slices[i].row_offset; |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
135 |
} |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
136 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
137 |
// can now continue rendering as well as call process_row |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
138 |
return SLICE_PROCESS_ROW & SLICE_CONTINUE; |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
139 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
140 |
} else { |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
141 |
// cannot continue rendering, need to have process_row complete first |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
142 |
return SLICE_PROCESS_ROW; |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
143 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
144 |
} |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
145 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
146 |
} else { |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
147 |
// the row is not complete, do not render the next segment, do not call process_row |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
148 |
return 0; |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
149 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
150 |
} |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
151 |
} |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
152 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
153 |
int render_slices_process_row (struct render_slices *ctx) { |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
154 |
assert(ctx->done_row >= 0); |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
155 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
156 |
// pass the data to render_png, this results in calls to _render_multi_png_data |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
157 |
if (render_png_row(&ctx->png_info, ctx->rows[ctx->done_row])) |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
158 |
ERROR("render_png_row"); |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
159 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
160 |
// mark the row as processed |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
161 |
ctx->done_row = -1; |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
162 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
163 |
// ok, but don't call me again until I tell you to. |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
164 |
return SLICE_CONTINUE; |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
165 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
166 |
error: |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
167 |
// user needs to deinit/free us |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
168 |
return -1; |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
169 |
} |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
170 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
171 |