From 80d76b61b0e2b1224f8b0417658285b90934880e Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Sun, 9 Apr 2017 10:16:50 +0200 Subject: blind-next-frame: add -f flag: read multiple frames MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- src/arg.h | 2 +- src/blind-compress.c | 2 +- src/blind-cut.c | 2 +- src/blind-decompress.c | 2 +- src/blind-flip.c | 2 +- src/blind-flop.c | 2 +- src/blind-from-text.c | 2 +- src/blind-next-frame.c | 39 +++++++++++++++++++++++++-------------- src/blind-read-head.c | 2 +- src/blind-repeat.c | 2 +- src/blind-set-luma.c | 2 +- src/blind-to-text.c | 2 +- src/blind-transpose.c | 2 +- src/blind-write-head.c | 2 +- 14 files changed, 38 insertions(+), 27 deletions(-) (limited to 'src') diff --git a/src/arg.h b/src/arg.h index 1d04f24..5285d92 100644 --- a/src/arg.h +++ b/src/arg.h @@ -77,7 +77,7 @@ extern char *argv0; #define LNGARG() &argv[0][0] -#define ENOFLAGS(...) ARGBEGIN {\ +#define UNOFLAGS(...) ARGBEGIN {\ default:\ usage();\ } ARGEND;\ diff --git a/src/blind-compress.c b/src/blind-compress.c index c70a066..7d41f23 100644 --- a/src/blind-compress.c +++ b/src/blind-compress.c @@ -38,7 +38,7 @@ main(int argc, char *argv[]) size_t *cmp = NULL; size_t cmpsize = 0; - ENOFLAGS(argc); + UNOFLAGS(argc); stream.file = ""; stream.fd = STDIN_FILENO; diff --git a/src/blind-cut.c b/src/blind-cut.c index 75d7fd6..c1e1bdc 100644 --- a/src/blind-cut.c +++ b/src/blind-cut.c @@ -19,7 +19,7 @@ main(int argc, char *argv[]) char buf[BUFSIZ]; int to_end = 0; - ENOFLAGS(argc != 3); + UNOFLAGS(argc != 3); if (!strcmp(argv[0], "end")) eprintf("refusing to create video with zero frames\n"); diff --git a/src/blind-decompress.c b/src/blind-decompress.c index ea24fc6..f01fa8f 100644 --- a/src/blind-decompress.c +++ b/src/blind-decompress.c @@ -14,7 +14,7 @@ main(int argc, char *argv[]) char *buf; size_t n, m, fptr, sptr, same = 0, diff = 0; - ENOFLAGS(argc); + UNOFLAGS(argc); stream.file = ""; stream.fd = STDIN_FILENO; diff --git a/src/blind-flip.c b/src/blind-flip.c index 0c18602..b37a9d8 100644 --- a/src/blind-flip.c +++ b/src/blind-flip.c @@ -14,7 +14,7 @@ main(int argc, char *argv[]) size_t n, ptr, row_size; char *buf; - ENOFLAGS(argc); + UNOFLAGS(argc); stream.file = ""; stream.fd = STDIN_FILENO; diff --git a/src/blind-flop.c b/src/blind-flop.c index 5f737f3..39370a5 100644 --- a/src/blind-flop.c +++ b/src/blind-flop.c @@ -15,7 +15,7 @@ main(int argc, char *argv[]) char *buf, *image; size_t i, j, n, m; - ENOFLAGS(argc); + UNOFLAGS(argc); stream.file = ""; stream.fd = STDIN_FILENO; diff --git a/src/blind-from-text.c b/src/blind-from-text.c index 6717c99..6bd5921 100644 --- a/src/blind-from-text.c +++ b/src/blind-from-text.c @@ -37,7 +37,7 @@ main(int argc, char *argv[]) ssize_t len; void (*process)(void) = NULL; - ENOFLAGS(argc); + UNOFLAGS(argc); len = getline(&line, &size, stdin); if (len < 0) { diff --git a/src/blind-next-frame.c b/src/blind-next-frame.c index 8afa725..41ab0ca 100644 --- a/src/blind-next-frame.c +++ b/src/blind-next-frame.c @@ -6,19 +6,27 @@ #include #include -USAGE("width height pixel-format ...") +USAGE("[-f frames] width height pixel-format ...") int main(int argc, char *argv[]) { struct stream stream; - size_t n, w; + size_t n, w, h = 0; int i, anything = 0; char *p; - ENOFLAGS(argc < 3); - stream.frames = 1; + + ARGBEGIN { + case 'f': + stream.frames = etozu_flag('f', UARGF(), 1, SIZE_MAX); + break; + } ARGEND; + + if (argc < 3) + usage(); + stream.fd = STDIN_FILENO; stream.file = ""; stream.pixfmt[0] = '\0'; @@ -44,20 +52,23 @@ main(int argc, char *argv[]) enfflush(2, stdout, ""); w = stream.width * stream.pixel_size; - while (stream.height) { - stream.height--; - for (n = w; n; n -= stream.ptr) { - stream.ptr = 0; - if (!enread_stream(2, &stream, n)) - goto done; - anything = 1; - enwriteall(2, STDOUT_FILENO, stream.buf, stream.ptr, ""); + while (stream.frames) { + stream.frames--; + for (h = stream.height; h;) { + h--; + for (n = w; n; n -= stream.ptr) { + stream.ptr = 0; + if (!enread_stream(2, &stream, n)) + goto done; + anything = 1; + enwriteall(2, STDOUT_FILENO, stream.buf, stream.ptr, ""); + } } } done: - if (anything && (stream.height || n)) - enprintf(2, "incomplete frame\n"); + if (anything && (h || n || stream.frames)) + enprintf(2, "%s: is shorted than expected\n", stream.file); return !anything; } diff --git a/src/blind-read-head.c b/src/blind-read-head.c index afb2fbc..c31e2b0 100644 --- a/src/blind-read-head.c +++ b/src/blind-read-head.c @@ -16,7 +16,7 @@ main(int argc, char *argv[]) size_t i, ptr; ssize_t r; - ENOFLAGS(argc); + UNOFLAGS(argc); for (ptr = 0; ptr < sizeof(buf);) { r = read(STDIN_FILENO, buf + ptr, 1); diff --git a/src/blind-repeat.c b/src/blind-repeat.c index 82c924f..29089c6 100644 --- a/src/blind-repeat.c +++ b/src/blind-repeat.c @@ -98,7 +98,7 @@ main(int argc, char *argv[]) size_t count = 0; int inf = 0; - ENOFLAGS(argc != 2); + UNOFLAGS(argc != 2); if (!strcmp(argv[0], "inf")) inf = 1; diff --git a/src/blind-set-luma.c b/src/blind-set-luma.c index 49cbc08..f4bd3d5 100644 --- a/src/blind-set-luma.c +++ b/src/blind-set-luma.c @@ -92,7 +92,7 @@ main(int argc, char *argv[]) struct stream colour, luma; void (*process)(struct stream *colour, struct stream *luma, size_t n); - ENOFLAGS(argc != 1); + UNOFLAGS(argc != 1); colour.file = ""; colour.fd = STDIN_FILENO; diff --git a/src/blind-to-text.c b/src/blind-to-text.c index 5467787..c196dcb 100644 --- a/src/blind-to-text.c +++ b/src/blind-to-text.c @@ -27,7 +27,7 @@ main(int argc, char *argv[]) size_t n; void (*process)(struct stream *stream, size_t n) = NULL; - ENOFLAGS(argc); + UNOFLAGS(argc); stream.file = ""; stream.fd = STDIN_FILENO; diff --git a/src/blind-transpose.c b/src/blind-transpose.c index cf1036b..9421fc5 100644 --- a/src/blind-transpose.c +++ b/src/blind-transpose.c @@ -16,7 +16,7 @@ main(int argc, char *argv[]) char *buf, *image; size_t n, imgw, srcw, srch, ps, x, y, i, b, dx; - ENOFLAGS(argc); + UNOFLAGS(argc); stream.file = ""; stream.fd = STDIN_FILENO; diff --git a/src/blind-write-head.c b/src/blind-write-head.c index 9e7c4a3..81f36b4 100644 --- a/src/blind-write-head.c +++ b/src/blind-write-head.c @@ -6,7 +6,7 @@ USAGE("parameters ...") int main(int argc, char *argv[]) { - ENOFLAGS(!argc); + UNOFLAGS(!argc); printf("%s", *argv++); while (*argv) -- cgit v1.2.3-70-g09d2