diff options
| author | Mattias Andrée <maandree@kth.se> | 2017-01-13 09:05:08 +0100 |
|---|---|---|
| committer | Mattias Andrée <maandree@kth.se> | 2017-01-13 09:05:08 +0100 |
| commit | 4674ec0e4b833ab0d0365225ba99228df14abe87 (patch) | |
| tree | 1b89fe1559fc9a2422e20048700e694a72d17751 /src/blind-single-colour.c | |
| parent | vu-from-video: fix Y'UV encoding + add vu-to-video (diff) | |
| download | blind-4674ec0e4b833ab0d0365225ba99228df14abe87.tar.gz blind-4674ec0e4b833ab0d0365225ba99228df14abe87.tar.bz2 blind-4674ec0e4b833ab0d0365225ba99228df14abe87.tar.xz | |
Rename to blind
Signed-off-by: Mattias Andrée <maandree@kth.se>
Diffstat (limited to 'src/blind-single-colour.c')
| -rw-r--r-- | src/blind-single-colour.c | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/src/blind-single-colour.c b/src/blind-single-colour.c new file mode 100644 index 0000000..254ea2a --- /dev/null +++ b/src/blind-single-colour.c @@ -0,0 +1,88 @@ +/* See LICENSE file for copyright and license details. */ +#include "stream.h" +#include "util.h" + +#include <inttypes.h> +#include <string.h> +#include <unistd.h> + +USAGE("[-f frames | -f 'inf'] -w width -h height (X Y Z | Y) [alpha]") + +typedef double pixel_t[4]; + +int +main(int argc, char *argv[]) +{ + struct stream stream; + double X, Y, Z, alpha = 1; + size_t x, y, n; + pixel_t buf[1024]; + ssize_t r; + int inf = 0; + char *arg; + + stream.width = 0; + stream.height = 0; + stream.frames = 1; + + ARGBEGIN { + case 'f': + arg = EARG(); + if (!strcmp(arg, "inf")) + inf = 1, stream.frames = 0; + else + stream.frames = etozu_flag('f', arg, 1, SIZE_MAX); + break; + case 'w': + stream.width = etozu_flag('w', EARG(), 1, SIZE_MAX); + break; + case 'h': + stream.height = etozu_flag('h', EARG(), 1, SIZE_MAX); + break; + default: + usage(); + } ARGEND; + + if (!stream.width || !stream.height || !argc || argc > 4) + usage(); + + if (argc < 3) { + X = D65_XYY_X / D65_XYY_Y; + Z = 1 / D65_XYY_Y - 1 - X; + Y = etolf_arg("the Y value", argv[1]); + } else { + X = etolf_arg("the X value", argv[0]); + Y = etolf_arg("the Y value", argv[1]); + Z = etolf_arg("the Z value", argv[2]); + } + if (~argc & 1) + alpha = etolf_arg("the alpha value", argv[argc - 1]); + + if (inf) + einf_check_fd(STDOUT_FILENO, "<stdout>"); + + strcpy(stream.pixfmt, "xyza"); + fprint_stream_head(stdout, &stream); + efflush(stdout, "<stdout>"); + + for (x = 0; x < ELEMENTSOF(buf); x++) { + buf[x][0] = X; + buf[x][1] = Y; + buf[x][2] = Z; + buf[x][3] = alpha; + } + while (inf || stream.frames--) { + for (y = stream.height; y--;) { + for (x = stream.width; x;) { + x -= n = ELEMENTSOF(buf) < x ? ELEMENTSOF(buf) : x; + for (n *= sizeof(*buf); n; n -= (size_t)r) { + r = write(STDOUT_FILENO, buf, n); + if (r < 0) + eprintf("write <stdout>:"); + } + } + } + } + + return 0; +} |
