aboutsummaryrefslogtreecommitdiffstats
path: root/libglitter_compose_double.c
diff options
context:
space:
mode:
authorMattias Andrée <maandree@kth.se>2023-01-21 18:08:32 +0100
committerMattias Andrée <maandree@kth.se>2023-01-21 18:08:32 +0100
commit5e9e4ffc468b5f9287641e23dc375afd77177523 (patch)
tree5fc741325e6d617e5fadce7f45910bf606f50c89 /libglitter_compose_double.c
parentm doc (diff)
downloadlibglitter-5e9e4ffc468b5f9287641e23dc375afd77177523.tar.gz
libglitter-5e9e4ffc468b5f9287641e23dc375afd77177523.tar.bz2
libglitter-5e9e4ffc468b5f9287641e23dc375afd77177523.tar.xz
Add integer versions of libglitter_compose_*
Signed-off-by: Mattias Andrée <maandree@kth.se>
Diffstat (limited to 'libglitter_compose_double.c')
-rw-r--r--libglitter_compose_double.c76
1 files changed, 41 insertions, 35 deletions
diff --git a/libglitter_compose_double.c b/libglitter_compose_double.c
index ba094f0..d0fdc3e 100644
--- a/libglitter_compose_double.c
+++ b/libglitter_compose_double.c
@@ -3,39 +3,6 @@
static void
-generic(double **outputs, size_t noutputs, const double *restrict input,
- size_t output_rowsize, size_t output_cellsize, size_t input_rowsize,
- size_t width, size_t height, size_t widthmul, size_t heightmul,
- const uint8_t *restrict cellmap, const double *restrict ncellweights)
-{
- size_t y, x, iy, ix, output_y, output_i, input_blanking;
- uint8_t channel;
- double value;
-
- output_rowsize *= output_cellsize;
- input_blanking = input_rowsize * heightmul - width * widthmul;
-
- for (y = 0, output_y = 0; y < height; y++, output_y += output_rowsize) {
- for (x = 0, output_i = output_y; x < width; x++, output_i += output_cellsize) {
-
- for (iy = 0; iy < heightmul; iy++) {
- for (ix = 0; ix < widthmul; ix++) {
- channel = cellmap[iy * widthmul + ix];
-
- value = input[iy * input_rowsize + ix];
- value *= ncellweights[channel];
-
- outputs[channel][output_i] += value;
- }
- }
- input = &input[widthmul];
- }
- input = &input[input_blanking];
- }
-}
-
-
-static void
vstrips(double **outputs_, const double *restrict input, size_t output_rowsize, size_t output_cellsize,
size_t input_rowsize, size_t width, size_t height, const uint8_t *restrict cellmap)
{
@@ -89,6 +56,42 @@ hstrips(double **outputs_, const double *restrict input, size_t output_rowsize,
}
+#ifndef ONLY_INT_COMPATIBLE
+
+
+static void
+generic(double **outputs, const double *restrict input,
+ size_t output_rowsize, size_t output_cellsize, size_t input_rowsize,
+ size_t width, size_t height, size_t widthmul, size_t heightmul,
+ const uint8_t *restrict cellmap, const double *restrict ncellweights)
+{
+ size_t y, x, iy, ix, output_y, output_i, input_blanking;
+ uint8_t channel;
+ double value;
+
+ output_rowsize *= output_cellsize;
+ input_blanking = input_rowsize * heightmul - width * widthmul;
+
+ for (y = 0, output_y = 0; y < height; y++, output_y += output_rowsize) {
+ for (x = 0, output_i = output_y; x < width; x++, output_i += output_cellsize) {
+
+ for (iy = 0; iy < heightmul; iy++) {
+ for (ix = 0; ix < widthmul; ix++) {
+ channel = cellmap[iy * widthmul + ix];
+
+ value = input[iy * input_rowsize + ix];
+ value *= ncellweights[channel];
+
+ outputs[channel][output_i] += value;
+ }
+ }
+ input = &input[widthmul];
+ }
+ input = &input[input_blanking];
+ }
+}
+
+
void
libglitter_compose_double(double **outputs, size_t noutputs, const double *restrict input,
size_t output_rowsize, size_t output_cellsize, size_t input_rowsize,
@@ -100,7 +103,10 @@ libglitter_compose_double(double **outputs, size_t noutputs, const double *restr
} else if (noutputs == 3 && widthmul == 1 && heightmul == 3) {
hstrips(outputs, input, output_rowsize, output_cellsize, input_rowsize, width, height, cellmap);
} else {
- generic(outputs, noutputs, input, output_rowsize, output_cellsize,
- input_rowsize, width, height, widthmul, heightmul, cellmap, ncellweights);
+ generic(outputs, input, output_rowsize, output_cellsize, input_rowsize,
+ width, height, widthmul, heightmul, cellmap, ncellweights);
}
}
+
+
+#endif