diff options
Diffstat (limited to '')
| -rw-r--r-- | src/blind-double-sine-wave.c | 78 |
1 files changed, 41 insertions, 37 deletions
diff --git a/src/blind-double-sine-wave.c b/src/blind-double-sine-wave.c index e10cf1e..0b009f3 100644 --- a/src/blind-double-sine-wave.c +++ b/src/blind-double-sine-wave.c @@ -1,47 +1,13 @@ /* See LICENSE file for copyright and license details. */ +#ifndef TYPE #include "common.h" USAGE("[-e]") static int equal = 0; -#define PROCESS(TYPE, SUFFIX)\ - static void\ - process_##SUFFIX(struct stream *stream)\ - {\ - size_t i, j, n;\ - TYPE v, *p;\ - do {\ - if (equal) {\ - n = stream->ptr / stream->pixel_size;\ - for (i = 0; i < n; i++) {\ - p = (TYPE *)(stream->buf) + i * stream->n_chan;\ - v = posmod(*p, (TYPE)2);\ - v = v > 1 ? 2 - v : v;\ - v = 1 - (sin(v * (2 * (TYPE)M_PI)) + 1) / 2;\ - for (j = 0; j < stream->n_chan; j++)\ - p[j] = v;\ - }\ - n *= stream->pixel_size;\ - } else {\ - n = stream->ptr / stream->chan_size;\ - for (i = 0; i < n; i++) {\ - p = (TYPE *)(stream->buf) + i;\ - v = posmod(*p, (TYPE)2);\ - v = v > 1 ? 2 - v : v;\ - *p = 1 - (sin(v * (2 * (TYPE)M_PI)) + 1) / 2;\ - }\ - n *= stream->chan_size;\ - }\ - ewriteall(STDOUT_FILENO, stream->buf, n, "<stdout>");\ - memmove(stream->buf, stream->buf + n, stream->ptr -= n);\ - } while (eread_stream(stream, SIZE_MAX));\ - if (stream->ptr)\ - eprintf("%s: incomplete frame\n", stream->file);\ - } - -PROCESS(double, lf) -PROCESS(float, f) +#define FILE "blind-double-sine-wave.c" +#include "define-functions.h" int main(int argc, char *argv[]) @@ -74,3 +40,41 @@ main(int argc, char *argv[]) process(&stream); return 0; } + +#else + +static void +PROCESS(struct stream *stream) +{ + size_t i, j, n; + TYPE v, *p; + do { + if (equal) { + n = stream->ptr / stream->pixel_size; + for (i = 0; i < n; i++) { + p = (TYPE *)(stream->buf) + i * stream->n_chan; + v = posmod(*p, (TYPE)2); + v = v > 1 ? 2 - v : v; + v = 1 - (sin(v * (2 * (TYPE)M_PI)) + 1) / 2; + for (j = 0; j < stream->n_chan; j++) + p[j] = v; + } + n *= stream->pixel_size; + } else { + n = stream->ptr / stream->chan_size; + for (i = 0; i < n; i++) { + p = (TYPE *)(stream->buf) + i; + v = posmod(*p, (TYPE)2); + v = v > 1 ? 2 - v : v; + *p = 1 - (sin(v * (2 * (TYPE)M_PI)) + 1) / 2; + } + n *= stream->chan_size; + } + ewriteall(STDOUT_FILENO, stream->buf, n, "<stdout>"); + memmove(stream->buf, stream->buf + n, stream->ptr -= n); + } while (eread_stream(stream, SIZE_MAX)); + if (stream->ptr) + eprintf("%s: incomplete frame\n", stream->file); +} + +#endif |
