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/blind-next-frame.c | 39 +++++++++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 14 deletions(-) (limited to 'src/blind-next-frame.c') 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; } -- cgit v1.2.3-70-g09d2