From bfc501a39adef716ef022c51e3a7757ae55f0c71 Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Sun, 8 Jan 2017 09:08:54 +0100 Subject: Add vu-frame-to-image MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- src/vu-frame-to-image.c | 67 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 src/vu-frame-to-image.c (limited to 'src/vu-frame-to-image.c') diff --git a/src/vu-frame-to-image.c b/src/vu-frame-to-image.c new file mode 100644 index 0000000..e4466cf --- /dev/null +++ b/src/vu-frame-to-image.c @@ -0,0 +1,67 @@ +/* See LICENSE file for copyright and license details. */ +#include "arg.h" +#include "util.h" + +#include +#include +#include +#include + +static void +usage(void) +{ + eprintf("usage: %s -w width -h height\n", argv0); +} + +int +main(int argc, char *argv[]) +{ + size_t width = 0, height = 0; + size_t p, n; + ssize_t r; + char buf[8096]; + + ARGBEGIN { + case 'w': + if (tozu(EARGF(usage()), 1, SIZE_MAX, &width)) + eprintf("argument of -w must be an integer in [1, %zu]\n", SIZE_MAX); + break; + case 'h': + if (tozu(EARGF(usage()), 1, SIZE_MAX, &height)) + eprintf("argument of -h must be an integer in [1, %zu]\n", SIZE_MAX); + break; + default: + usage(); + } ARGEND; + + if (!width || !height || argc) + usage(); + + printf("P7\n" + "WIDTH %zu\n" + "HEIGHT %zu\n" + "DEPTH 4\n" + "MAXVAL 255\n" + "TUPLTYPE RGB_ALPHA\n" + "ENDHDR\n", width, height); + fflush(stdout); + if (ferror(stdout)) + eprintf(":"); + + for (n = 0;;) { + for (p = 0; p < n;) { + r = write(STDOUT_FILENO, buf + p, n - p); + if (r < 0) + eprintf("write :"); + p += (size_t)r; + } + r = read(STDIN_FILENO, buf, sizeof(buf)); + if (r < 0) + eprintf("read :"); + if (r == 0) + break; + n = (size_t)r; + } + + return 0; +} -- cgit v1.2.3-70-g09d2