diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/arg.h | 4 | ||||
| -rw-r--r-- | src/blind-colour-srgb.c | 2 | ||||
| -rw-r--r-- | src/blind-compress.c | 1 | ||||
| -rw-r--r-- | src/blind-concat.c | 4 | ||||
| -rw-r--r-- | src/blind-crop.c | 1 | ||||
| -rw-r--r-- | src/blind-extend.c | 11 | ||||
| -rw-r--r-- | src/blind-flip.c | 1 | ||||
| -rw-r--r-- | src/blind-flop.c | 1 | ||||
| -rw-r--r-- | src/blind-from-video.c | 8 | ||||
| -rw-r--r-- | src/blind-gauss-blur.c | 4 | ||||
| -rw-r--r-- | src/blind-single-colour.c | 8 | ||||
| -rw-r--r-- | src/blind-to-image.c | 2 | ||||
| -rw-r--r-- | src/blind-to-video.c | 2 | ||||
| -rw-r--r-- | src/blind-transpose.c | 1 | ||||
| -rw-r--r-- | src/stream.c | 31 | ||||
| -rw-r--r-- | src/stream.h | 12 |
16 files changed, 48 insertions, 45 deletions
@@ -73,9 +73,9 @@ extern char *argv0; (&argv[0][1]) :\ (argc--, argv++, argv[0]))) -#define LNGARG() &argv[0][0] +#define UARGF() EARGF(usage()) -#define EARG() EARGF(usage()) +#define LNGARG() &argv[0][0] #define ENOFLAGS(...) ARGBEGIN {\ default:\ diff --git a/src/blind-colour-srgb.c b/src/blind-colour-srgb.c index 53fb784..5e6c0db 100644 --- a/src/blind-colour-srgb.c +++ b/src/blind-colour-srgb.c @@ -12,7 +12,7 @@ main(int argc, char *argv[]) ARGBEGIN { case 'd': - depth = etoi_flag('d', EARG(), 1, 64); + depth = etoi_flag('d', UARGF(), 1, 64); break; case 'l': linear = 1; diff --git a/src/blind-compress.c b/src/blind-compress.c index 768ef06..c70a066 100644 --- a/src/blind-compress.c +++ b/src/blind-compress.c @@ -51,7 +51,6 @@ main(int argc, char *argv[]) buf[0] = emalloc(n); buf[1] = ecalloc(1, n); - memcpy(buf[0], stream.buf, stream.ptr); for (i = 0; eread_frame(&stream, buf[i], n); i ^= 1) { parts = compare(buf[i], buf[i ^ 1], n, &cmp, &cmpsize); for (off = part = 0; part < parts; part += 2) { diff --git a/src/blind-concat.c b/src/blind-concat.c index f6fe504..f59bee5 100644 --- a/src/blind-concat.c +++ b/src/blind-concat.c @@ -209,10 +209,10 @@ main(int argc, char *argv[]) ARGBEGIN { case 'o': - output_file = EARG(); + output_file = UARGF(); break; case 'j': - jobs = etozu_flag('j', EARG(), 1, SHRT_MAX); + jobs = etozu_flag('j', UARGF(), 1, SHRT_MAX); break; default: usage(); diff --git a/src/blind-crop.c b/src/blind-crop.c index bd0b9e0..c08864e 100644 --- a/src/blind-crop.c +++ b/src/blind-crop.c @@ -77,7 +77,6 @@ main(int argc, char *argv[]) right_start = left + orown; right = irown - right_start; - memcpy(buf, stream.buf, ptr = stream.ptr); while (eread_frame(&stream, buf, n)) { if (tile) { for (ptr = y = 0; y < stream.height; y++) { diff --git a/src/blind-extend.c b/src/blind-extend.c index 4331ae3..8b9e638 100644 --- a/src/blind-extend.c +++ b/src/blind-extend.c @@ -14,23 +14,23 @@ main(int argc, char *argv[]) { struct stream stream; char *buf, *image; - size_t ptr, n, m, imgw, imgh, rown; + size_t n, m, imgw, imgh, rown; size_t xoff, yoff, h, x, y; size_t left = 0, right = 0, top = 0, bottom = 0; int tile = 0; ARGBEGIN { case 'l': - left = etozu_flag('l', EARG(), 0, SIZE_MAX); + left = etozu_flag('l', UARGF(), 0, SIZE_MAX); break; case 'r': - right = etozu_flag('r', EARG(), 0, SIZE_MAX); + right = etozu_flag('r', UARGF(), 0, SIZE_MAX); break; case 'a': - top = etozu_flag('a', EARG(), 0, SIZE_MAX); + top = etozu_flag('a', UARGF(), 0, SIZE_MAX); break; case 'b': - bottom = etozu_flag('b', EARG(), 0, SIZE_MAX); + bottom = etozu_flag('b', UARGF(), 0, SIZE_MAX); break; case 't': tile = 1; @@ -80,7 +80,6 @@ main(int argc, char *argv[]) xoff = (rown - left % rown) % rown; yoff = (stream.height - top % stream.height) % stream.height; - memcpy(buf, stream.buf, ptr = stream.ptr); while (eread_frame(&stream, buf, n)) { if (!tile) { for (y = 0; y < stream.height; y++) diff --git a/src/blind-flip.c b/src/blind-flip.c index 98e0d58..0c18602 100644 --- a/src/blind-flip.c +++ b/src/blind-flip.c @@ -26,7 +26,6 @@ main(int argc, char *argv[]) n = stream.height * (row_size = stream.width * stream.pixel_size); buf = emalloc(n); - memcpy(buf, stream.buf, stream.ptr); while (eread_frame(&stream, buf, n)) for (ptr = n; ptr;) ewriteall(STDOUT_FILENO, buf + (ptr -= row_size), row_size, "<stdout>"); diff --git a/src/blind-flop.c b/src/blind-flop.c index e98771d..5f737f3 100644 --- a/src/blind-flop.c +++ b/src/blind-flop.c @@ -30,7 +30,6 @@ main(int argc, char *argv[]) image = emalloc(n); m = n - stream.pixel_size; - memcpy(buf, stream.buf, stream.ptr); while (eread_row(&stream, buf, n)) { for (i = 0; i < stream.pixel_size; i++) for (j = 0; j < n; j += stream.pixel_size) diff --git a/src/blind-from-video.c b/src/blind-from-video.c index f164195..7f3aa13 100644 --- a/src/blind-from-video.c +++ b/src/blind-from-video.c @@ -172,7 +172,7 @@ convert(const char *infile, int outfd, const char *outfile, size_t width, size_t if (dup2(pipe_rw[1], STDOUT_FILENO) == -1) eprintf("dup2:"); close(pipe_rw[1]); - execvp("ffmpeg", cmd); + execvp("ffmpeg", (char **)(void *)cmd); eprintf("exec ffmpeg:"); } @@ -221,13 +221,13 @@ main(int argc, char *argv[]) skip_length = 1; break; case 'r': - frame_rate = EARG(); + frame_rate = UARGF(); break; case 'w': - width = etozu_flag('w', EARG(), 1, SIZE_MAX); + width = etozu_flag('w', UARGF(), 1, SIZE_MAX); break; case 'h': - height = etozu_flag('h', EARG(), 1, SIZE_MAX); + height = etozu_flag('h', UARGF(), 1, SIZE_MAX); break; default: usage(); diff --git a/src/blind-gauss-blur.c b/src/blind-gauss-blur.c index ef0ebba..542b44b 100644 --- a/src/blind-gauss-blur.c +++ b/src/blind-gauss-blur.c @@ -317,10 +317,10 @@ main(int argc, char *argv[]) measure_y_only = 1; break; case 'j': - jobs = etozu_flag('j', EARG(), 1, SHRT_MAX); + jobs = etozu_flag('j', UARGF(), 1, SHRT_MAX); break; case 's': - arg = EARG(); + arg = UARGF(); if (!strcmp(arg, "auto")) auto_spread = 1; else diff --git a/src/blind-single-colour.c b/src/blind-single-colour.c index 2784f97..a0f5ccb 100644 --- a/src/blind-single-colour.c +++ b/src/blind-single-colour.c @@ -16,7 +16,7 @@ main(int argc, char *argv[]) struct stream stream; double X, Y, Z, alpha = 1; size_t x, y, n; - pixel_t buf[1024]; + pixel_t buf[BUFSIZ / 4]; ssize_t r; int inf = 0; char *arg; @@ -27,17 +27,17 @@ main(int argc, char *argv[]) ARGBEGIN { case 'f': - arg = EARG(); + arg = UARGF(); 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); + stream.width = etozu_flag('w', UARGF(), 1, SIZE_MAX); break; case 'h': - stream.height = etozu_flag('h', EARG(), 1, SIZE_MAX); + stream.height = etozu_flag('h', UARGF(), 1, SIZE_MAX); break; default: usage(); diff --git a/src/blind-to-image.c b/src/blind-to-image.c index 761722a..4512085 100644 --- a/src/blind-to-image.c +++ b/src/blind-to-image.c @@ -91,7 +91,7 @@ main(int argc, char *argv[]) ARGBEGIN { case 'd': - depth = etoi_flag('d', EARG(), 1, 64); + depth = etoi_flag('d', UARGF(), 1, 64); break; case 'f': farbfeld = 1; diff --git a/src/blind-to-video.c b/src/blind-to-video.c index 0793a0a..04cfd91 100644 --- a/src/blind-to-video.c +++ b/src/blind-to-video.c @@ -123,7 +123,7 @@ main(int argc, char *argv[]) if (dup2(pipe_rw[0], STDIN_FILENO) == -1) eprintf("dup2:"); close(pipe_rw[0]); - execvp("ffmpeg", cmd); + execvp("ffmpeg", (char **)(void *)cmd); eprintf("exec ffmpeg:"); } diff --git a/src/blind-transpose.c b/src/blind-transpose.c index 7bc124d..cf1036b 100644 --- a/src/blind-transpose.c +++ b/src/blind-transpose.c @@ -35,7 +35,6 @@ main(int argc, char *argv[]) srch *= ps; srcw *= dx = imgw * ps; imgw *= ps; - memcpy(buf, stream.buf, stream.ptr); while (eread_frame(&stream, buf, n)) { for (b = y = 0; y < srch; y += ps) for (x = 0; x < srcw; x += dx) diff --git a/src/stream.c b/src/stream.c index 4b2cc23..a54f7f0 100644 --- a/src/stream.c +++ b/src/stream.c @@ -32,14 +32,11 @@ eninit_stream(int status, struct stream *stream) } *p = '\0'; - w = strchr(stream->buf, ' '); - if (!w) + if (!(w = strchr(stream->buf, ' '))) goto bad_format; - h = strchr(w + 1, ' '); - if (!h) + if (!(h = strchr(w + 1, ' '))) goto bad_format; - f = strchr(h + 1, ' '); - if (!f) + if (!(f = strchr(h + 1, ' '))) goto bad_format; *w++ = *h++ = *f++ = '\0'; @@ -89,6 +86,8 @@ eninit_stream(int status, struct stream *stream) enset_pixel_size(status, stream); + stream->xptr = 0; + return; bad_format: enprintf(status, "%s: file format not supported\n", stream->file); @@ -181,19 +180,29 @@ enread_frame(int status, struct stream *stream, void *buf, size_t n) { char *buffer = buf; ssize_t r; - for (; stream->ptr < n; stream->ptr += (size_t)r) { - r = read(stream->fd, buffer + stream->ptr, n - stream->ptr); + size_t m; + + if (stream->ptr) { + m = stream->ptr < n ? stream->ptr : n; + memcpy(buffer + stream->xptr, stream->buf, m); + memmove(stream->buf, stream->buf + m, stream->ptr -= m); + stream->xptr += m; + } + + for (; stream->xptr < n; stream->xptr += (size_t)r) { + r = read(stream->fd, buffer + stream->xptr, n - stream->xptr); if (r < 0) { enprintf(status, "read %s:", stream->file); } else if (r == 0) { - if (!stream->ptr) + if (!stream->xptr) break; enprintf(status, "%s: incomplete frame", stream->file); } } - if (!stream->ptr) + + if (!stream->xptr) return 0; - stream->ptr -= n; + stream->xptr -= n; return 1; } diff --git a/src/stream.h b/src/stream.h index f2d88ed..a5cebc6 100644 --- a/src/stream.h +++ b/src/stream.h @@ -36,8 +36,7 @@ #define process_multiple_streams(...) nprocess_multiple_streams(1, __VA_ARGS__) #define process_each_frame_two_streams(...) nprocess_each_frame_two_streams(1, __VA_ARGS__) -struct stream -{ +struct stream { size_t frames; size_t width; size_t height; @@ -45,7 +44,8 @@ struct stream char pixfmt[32]; int fd; size_t ptr; - char buf[4096]; + size_t xptr; + char buf[BUFSIZ]; const char *file; size_t headlen; }; @@ -62,13 +62,13 @@ void encheck_compat(int status, const struct stream *a, const struct stream *b); int enread_frame(int status, struct stream *stream, void *buf, size_t n); void nprocess_each_frame_segmented(int status, struct stream *stream, int output_fd, const char* output_fname, - void (*process)(struct stream *stream, size_t n, size_t frame)); + void (*process)(struct stream *stream, size_t n, size_t frame)); void nprocess_two_streams(int status, struct stream *left, struct stream *right, int output_fd, const char* output_fname, - void (*process)(struct stream *left, struct stream *right, size_t n)); + void (*process)(struct stream *left, struct stream *right, size_t n)); void nprocess_multiple_streams(int status, struct stream *streams, size_t n_streams, int output_fd, const char* output_fname, - void (*process)(struct stream *streams, size_t n_streams, size_t n)); + void (*process)(struct stream *streams, size_t n_streams, size_t n)); void nprocess_each_frame_two_streams(int status, struct stream *left, struct stream *right, int output_fd, const char* output_fname, void (*process)(char *restrict output, char *restrict lbuf, char *restrict rbuf, |
