aboutsummaryrefslogtreecommitdiffstats
path: root/src/blind-matrix-rotate.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/blind-matrix-rotate.c')
-rw-r--r--src/blind-matrix-rotate.c98
1 files changed, 52 insertions, 46 deletions
diff --git a/src/blind-matrix-rotate.c b/src/blind-matrix-rotate.c
index 486616e..f629df0 100644
--- a/src/blind-matrix-rotate.c
+++ b/src/blind-matrix-rotate.c
@@ -1,4 +1,5 @@
/* See LICENSE file for copyright and license details. */
+#ifndef TYPE
#include "common.h"
USAGE("[-cd]")
@@ -6,52 +7,8 @@ USAGE("[-cd]")
static int per_channel = 0;
static int in_degrees = 0;
-#define PROCESS(TYPE)\
- do {\
- typedef TYPE pixel_t[4];\
- pixel_t matrix[9];\
- pixel_t buf;\
- size_t i;\
- \
- for (i = 0; i < stream->n_chan; i++) {\
- matrix[0][i] = 1, matrix[1][i] = 0, matrix[2][i] = 0;\
- matrix[3][i] = 0, matrix[4][i] = 1, matrix[5][i] = 0;\
- matrix[6][i] = 0, matrix[7][i] = 0, matrix[8][i] = 1;\
- }\
- \
- while (eread_frame(stream, buf)) {\
- if (per_channel && in_degrees) {\
- for (i = 0; i < stream->n_chan; i++) {\
- matrix[4][i] = matrix[0][i] = degcos(buf[i]);\
- matrix[3][i] = -(matrix[1][i] = degsin(buf[i]));\
- }\
- } else if (per_channel) {\
- for (i = 0; i < stream->n_chan; i++) {\
- matrix[4][i] = matrix[0][i] = cos(buf[i]);\
- matrix[3][i] = -(matrix[1][i] = sin(buf[i]));\
- }\
- } else {\
- buf[1] *= buf[3];\
- if (in_degrees) {\
- matrix[4][0] = matrix[0][0] = degcos(buf[1]);\
- matrix[3][0] = -(matrix[1][0] = degsin(buf[1]));\
- } else {\
- matrix[4][0] = matrix[0][0] = cos(buf[1]);\
- matrix[3][0] = -(matrix[1][0] = sin(buf[1]));\
- }\
- for (i = 0; i < stream->n_chan; i++) {\
- matrix[0][i] = matrix[0][0];\
- matrix[1][i] = matrix[1][0];\
- matrix[3][i] = matrix[3][0];\
- matrix[4][i] = matrix[4][0];\
- }\
- }\
- ewriteall(STDOUT_FILENO, matrix, sizeof(matrix), "<stdout>");\
- }\
- } while (0)
-
-static void process_lf(struct stream *stream) { PROCESS(double); }
-static void process_f(struct stream *stream) { PROCESS(float); }
+#define FILE "blind-matrix-rotate.c"
+#include "define-functions.h"
int
main(int argc, char *argv[])
@@ -93,3 +50,52 @@ main(int argc, char *argv[])
process(&stream);
return 0;
}
+
+#else
+
+static void
+PROCESS(struct stream *stream)
+{
+ typedef TYPE pixel_t[4];
+ pixel_t matrix[9];
+ pixel_t buf;
+ size_t i;
+
+ for (i = 0; i < stream->n_chan; i++) {
+ matrix[0][i] = 1, matrix[1][i] = 0, matrix[2][i] = 0;
+ matrix[3][i] = 0, matrix[4][i] = 1, matrix[5][i] = 0;
+ matrix[6][i] = 0, matrix[7][i] = 0, matrix[8][i] = 1;
+ }
+
+ while (eread_frame(stream, buf)) {
+ if (per_channel && in_degrees) {
+ for (i = 0; i < stream->n_chan; i++) {
+ matrix[4][i] = matrix[0][i] = degcos(buf[i]);
+ matrix[3][i] = -(matrix[1][i] = degsin(buf[i]));
+ }
+ } else if (per_channel) {
+ for (i = 0; i < stream->n_chan; i++) {
+ matrix[4][i] = matrix[0][i] = cos(buf[i]);
+ matrix[3][i] = -(matrix[1][i] = sin(buf[i]));
+ }
+ } else {
+ buf[1] *= buf[3];
+ if (in_degrees) {
+ matrix[4][0] = matrix[0][0] = degcos(buf[1]);
+ matrix[3][0] = -(matrix[1][0] = degsin(buf[1]));
+ } else {
+ matrix[4][0] = matrix[0][0] = cos(buf[1]);
+ matrix[3][0] = -(matrix[1][0] = sin(buf[1]));
+ }
+ for (i = 0; i < stream->n_chan; i++) {
+ matrix[0][i] = matrix[0][0];
+ matrix[1][i] = matrix[1][0];
+ matrix[3][i] = matrix[3][0];
+ matrix[4][i] = matrix[4][0];
+ }
+ }
+ ewriteall(STDOUT_FILENO, matrix, sizeof(matrix), "<stdout>");
+ }
+}
+
+#endif