mirror of
https://github.com/xdsopl/robot36.git
synced 2026-04-07 15:23:41 +00:00
WIP: replaced linear with much more flexible circular buffer
This commit is contained in:
parent
3743d023f9
commit
a69b4089f5
8 changed files with 630 additions and 652 deletions
15
utils/blur.c
15
utils/blur.c
|
|
@ -24,20 +24,20 @@ double gauss(double x, double radius)
|
|||
}
|
||||
void emit(int radius)
|
||||
{
|
||||
printf("\t\tif ((i-%d) < begin || end <= (i+%d)) {\n", radius, radius);
|
||||
printf("\t\tif ((p-%d) < begin || end <= (p+%d) || (i-%d) < 0 || buffer_length <= (i+%d)) {\n", radius, radius, radius, radius);
|
||||
for (int i = -radius; i < 0; ++i) {
|
||||
printf("\t\t\tif (begin <= (i%d)) {\n", i);
|
||||
printf("\t\t\tif (begin <= (p%d)) {\n", i);
|
||||
printf("\t\t\t\tweight_sum += %d;\n",
|
||||
(int)(16384 * gauss(i, radius)));
|
||||
printf("\t\t\t\tvalue_sum += %d * value_buffer[i%d];\n",
|
||||
printf("\t\t\t\tvalue_sum += %d * value_buffer[(i%d)&buffer_mask];\n",
|
||||
(int)(16384 * gauss(i, radius)), i);
|
||||
printf("\t\t\t}\n");
|
||||
}
|
||||
for (int i = 0; i <= radius; ++i) {
|
||||
printf("\t\t\tif ((i+%d) < end) {\n", i);
|
||||
printf("\t\t\tif ((p+%d) < end) {\n", i);
|
||||
printf("\t\t\t\tweight_sum += %d;\n",
|
||||
(int)(16384 * gauss(i, radius)));
|
||||
printf("\t\t\t\tvalue_sum += %d * value_buffer[i+%d];\n",
|
||||
printf("\t\t\t\tvalue_sum += %d * value_buffer[(i+%d)&buffer_mask];\n",
|
||||
(int)(16384 * gauss(i, radius)), i);
|
||||
printf("\t\t\t}\n");
|
||||
}
|
||||
|
|
@ -59,7 +59,8 @@ int main()
|
|||
{
|
||||
printf("/* code generated by 'utils/blur.c' */\n");
|
||||
printf("static uchar value_blur(int pixel, int begin, int end)\n{\n");
|
||||
printf("\tint i = (pixel * (end - begin) + (end - begin) / 2) / bitmap_width + begin;\n");
|
||||
printf("\tint p = (pixel * (end - begin) + (end - begin) / 2) / bitmap_width + begin;\n");
|
||||
printf("\tint i = p & buffer_mask;\n");
|
||||
printf("\tint weight_sum = 0;\n");
|
||||
printf("\tint value_sum = 0;\n");
|
||||
printf("\tswitch (blur_power) {\n");
|
||||
|
|
@ -67,6 +68,6 @@ int main()
|
|||
printf("\tcase %d:\n", i);
|
||||
emit((1 << i) | 1);
|
||||
}
|
||||
printf("\tdefault:\n\t\tif (i < begin || end <= i)\n\t\t\treturn 0;\n\t\treturn value_buffer[i];\n\t}\n\treturn 0;\n}\n");
|
||||
printf("\tdefault:\n\t\treturn value_buffer[i];\n\t}\n\treturn 0;\n}\n");
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue