| line | stmt | bran | cond | sub | pod | time | code | 
| 1 |  |  |  |  |  |  | #include "imager.h" | 
| 2 |  |  |  |  |  |  | #include "regmach.h" | 
| 3 |  |  |  |  |  |  |  | 
| 4 |  |  |  |  |  |  | /* | 
| 5 |  |  |  |  |  |  | =head1 NAME | 
| 6 |  |  |  |  |  |  |  | 
| 7 |  |  |  |  |  |  | trans2.c - entry point for the general transformation engine | 
| 8 |  |  |  |  |  |  |  | 
| 9 |  |  |  |  |  |  | =head1 SYNOPSIS | 
| 10 |  |  |  |  |  |  |  | 
| 11 |  |  |  |  |  |  | int width, height, channels; | 
| 12 |  |  |  |  |  |  | struct rm_ops *ops; | 
| 13 |  |  |  |  |  |  | int op_count; | 
| 14 |  |  |  |  |  |  | double *n_regs; | 
| 15 |  |  |  |  |  |  | int n_regs_count; | 
| 16 |  |  |  |  |  |  | i_color *c_regs; | 
| 17 |  |  |  |  |  |  | int c_regs_count; | 
| 18 |  |  |  |  |  |  | i_img **in_imgs; | 
| 19 |  |  |  |  |  |  | int in_imgs_count; | 
| 20 |  |  |  |  |  |  | i_img *result = transform2(width, height, channels, ops, ops_count, | 
| 21 |  |  |  |  |  |  | n_regs, n_regs_count, c_regs, c_regs_count, | 
| 22 |  |  |  |  |  |  | in_imgs, in_imgs_count); | 
| 23 |  |  |  |  |  |  |  | 
| 24 |  |  |  |  |  |  | =head1 DESCRIPTION | 
| 25 |  |  |  |  |  |  |  | 
| 26 |  |  |  |  |  |  | This (short) file implements the transform2() function, just iterating | 
| 27 |  |  |  |  |  |  | over the image - most of the work is done in L | 
| 28 |  |  |  |  |  |  |  | 
| 29 |  |  |  |  |  |  | =cut | 
| 30 |  |  |  |  |  |  | */ | 
| 31 |  |  |  |  |  |  |  | 
| 32 | 28 |  |  |  |  |  | i_img* i_transform2(i_img_dim width, i_img_dim height, int channels, | 
| 33 |  |  |  |  |  |  | struct rm_op *ops, int ops_count, | 
| 34 |  |  |  |  |  |  | double *n_regs, int n_regs_count, | 
| 35 |  |  |  |  |  |  | i_color *c_regs, int c_regs_count, | 
| 36 |  |  |  |  |  |  | i_img **in_imgs, int in_imgs_count) | 
| 37 |  |  |  |  |  |  | { | 
| 38 |  |  |  |  |  |  | i_img *new_img; | 
| 39 |  |  |  |  |  |  | i_img_dim x, y; | 
| 40 |  |  |  |  |  |  | i_color val; | 
| 41 |  |  |  |  |  |  | int i; | 
| 42 |  |  |  |  |  |  | int need_images; | 
| 43 |  |  |  |  |  |  |  | 
| 44 | 28 |  |  |  |  |  | i_clear_error(); | 
| 45 |  |  |  |  |  |  |  | 
| 46 |  |  |  |  |  |  | /* since the number of images is variable and the image numbers | 
| 47 |  |  |  |  |  |  | for getp? are fixed, we can check them here instead of in the | 
| 48 |  |  |  |  |  |  | register machine - this will help performance */ | 
| 49 | 28 |  |  |  |  |  | need_images = 0; | 
| 50 | 207 | 100 |  |  |  |  | for (i = 0; i < ops_count; ++i) { | 
| 51 | 179 | 100 |  |  |  |  | switch (ops[i].code) { | 
| 52 |  |  |  |  |  |  | case rbc_getp1: | 
| 53 |  |  |  |  |  |  | case rbc_getp2: | 
| 54 |  |  |  |  |  |  | case rbc_getp3: | 
| 55 | 19 | 100 |  |  |  |  | if (ops[i].code - rbc_getp1 + 1 > need_images) { | 
| 56 | 18 |  |  |  |  |  | need_images = ops[i].code - rbc_getp1 + 1; | 
| 57 |  |  |  |  |  |  | } | 
| 58 |  |  |  |  |  |  | } | 
| 59 |  |  |  |  |  |  | } | 
| 60 |  |  |  |  |  |  |  | 
| 61 | 28 | 100 |  |  |  |  | if (need_images > in_imgs_count) { | 
| 62 | 1 |  |  |  |  |  | i_push_errorf(0, "not enough images, code requires %d, %d supplied", | 
| 63 |  |  |  |  |  |  | need_images, in_imgs_count); | 
| 64 | 1 |  |  |  |  |  | return NULL; | 
| 65 |  |  |  |  |  |  | } | 
| 66 |  |  |  |  |  |  |  | 
| 67 | 27 |  |  |  |  |  | new_img = i_img_empty_ch(NULL, width, height, channels); | 
| 68 | 891 | 100 |  |  |  |  | for (x = 0; x < width; ++x) { | 
| 69 | 181946 | 100 |  |  |  |  | for (y = 0; y < height; ++y) { | 
| 70 | 181082 |  |  |  |  |  | n_regs[0] = x; | 
| 71 | 181082 |  |  |  |  |  | n_regs[1] = y; | 
| 72 | 181082 |  |  |  |  |  | val = i_rm_run(ops, ops_count, n_regs, n_regs_count, c_regs, c_regs_count, | 
| 73 |  |  |  |  |  |  | in_imgs, in_imgs_count); | 
| 74 | 181082 |  |  |  |  |  | i_ppix(new_img, x, y, &val); | 
| 75 |  |  |  |  |  |  | } | 
| 76 |  |  |  |  |  |  | } | 
| 77 |  |  |  |  |  |  |  | 
| 78 | 28 |  |  |  |  |  | return new_img; | 
| 79 |  |  |  |  |  |  | } | 
| 80 |  |  |  |  |  |  |  | 
| 81 |  |  |  |  |  |  | /* | 
| 82 |  |  |  |  |  |  | =head1 AUTHOR | 
| 83 |  |  |  |  |  |  |  | 
| 84 |  |  |  |  |  |  | Tony Cook | 
| 85 |  |  |  |  |  |  |  | 
| 86 |  |  |  |  |  |  | =head1 SEE ALSO | 
| 87 |  |  |  |  |  |  |  | 
| 88 |  |  |  |  |  |  | Imager(3), regmach.c | 
| 89 |  |  |  |  |  |  |  | 
| 90 |  |  |  |  |  |  | =cut | 
| 91 |  |  |  |  |  |  | */ |