Introduction
Introduction Statistics Contact Development Disclaimer Help
Misc code improvements - blind - suckless command-line video editing utility
git clone git://git.suckless.org/blind
Log
Files
Refs
README
LICENSE
---
commit d05d162cb81664f292834fa5d48d623d2b6147a7
parent c216ac3049102422a41ba2c9476b0dbf4f3e4034
Author: Mattias Andrée <[email protected]>
Date: Sun, 16 Jul 2017 15:29:43 +0200
Misc code improvements
Signed-off-by: Mattias Andrée <[email protected]>
Diffstat:
M src/blind-apply-palette.c | 7 +------
M src/blind-chroma-key.c | 8 +-------
M src/blind-cone-gradient.c | 12 ++++--------
M src/blind-coordinate-field.c | 12 ++----------
M src/blind-cross-product.c | 8 +-------
M src/blind-dot-product.c | 8 +-------
M src/blind-double-sine-wave.c | 8 +-------
M src/blind-dual-key.c | 8 +-------
M src/blind-extract-alpha.c | 9 +--------
M src/blind-find-rectangle.c | 6 ++----
M src/blind-flip.c | 2 +-
M src/blind-from-named.c | 3 ---
M src/blind-from-portable.c | 19 ++++++++-----------
M src/blind-from-text.c | 52 ++++++++++++++++-------------…
M src/blind-gauss-blur.c | 18 ++++++------------
M src/blind-get-colours.c | 2 --
M src/blind-hexagon-tessellation.c | 15 +++++----------
M src/blind-linear-gradient.c | 12 ++++--------
M src/blind-matrix-orthoproject.c | 9 ++-------
M src/blind-matrix-reflect.c | 9 ++-------
M src/blind-matrix-rotate.c | 9 ++-------
M src/blind-matrix-scale.c | 9 ++-------
M src/blind-matrix-shear.c | 9 ++-------
M src/blind-matrix-translate.c | 9 ++-------
M src/blind-matrix-transpose.c | 9 ++-------
M src/blind-mosaic-edges.c | 66 +++++++++++++++--------------…
M src/blind-mosaic.c | 9 +--------
M src/blind-multiply-matrices.c | 7 +------
M src/blind-next-frame.c | 10 ++--------
M src/blind-norm.c | 8 +-------
M src/blind-premultiply.c | 8 +-------
M src/blind-quaternion-product.c | 8 +-------
M src/blind-radial-gradient.c | 15 ++++++---------
M src/blind-rectangle-tessellation.c | 16 ++++++----------
M src/blind-reverse.c | 4 +---
M src/blind-rewrite-head.c | 7 +------
M src/blind-round-wave.c | 8 +-------
M src/blind-sawtooth-wave.c | 8 +-------
M src/blind-set-luma.c | 8 +-------
M src/blind-sinc-wave.c | 7 +------
M src/blind-sine-wave.c | 8 +-------
M src/blind-single-colour.c | 10 ++--------
M src/blind-spectrum.c | 9 ++-------
M src/blind-spiral-gradient.c | 12 ++++--------
M src/blind-square-gradient.c | 7 +------
M src/blind-time-blur.c | 10 ++--------
M src/blind-to-portable.c | 9 ++-------
M src/blind-to-text.c | 35 +++++++++++++++--------------…
M src/blind-triangle-tessellation.c | 15 +++++----------
M src/blind-triangular-wave.c | 8 +-------
M src/blind-unpremultiply.c | 8 +-------
M src/blind-vector-projection.c | 8 +-------
M src/common.h | 8 ++++++++
M src/define-functions.h | 12 ++++++++++++
M src/stream.c | 24 ++++++++++++++++++------
M src/stream.h | 6 +++---
56 files changed, 216 insertions(+), 434 deletions(-)
---
diff --git a/src/blind-apply-palette.c b/src/blind-apply-palette.c
@@ -34,12 +34,7 @@ main(int argc, char *argv[])
eopen_stream(&stream, NULL);
eopen_stream(&palette, argv[0]);
- if (!strcmp(stream.pixfmt, "xyza"))
- process = process_lf;
- else if (!strcmp(stream.pixfmt, "xyza f"))
- process = process_f;
- else
- eprintf("pixel format %s is not supported, try xyza\n", stream…
+ SELECT_PROCESS_FUNCTION(&stream);
if (strcmp(stream.pixfmt, palette.pixfmt))
eprintf("videos use incompatible pixel formats\n");
diff --git a/src/blind-chroma-key.c b/src/blind-chroma-key.c
@@ -18,13 +18,7 @@ main(int argc, char *argv[])
eopen_stream(&stream, NULL);
eopen_stream(&key, argv[0]);
- if (!strcmp(stream.pixfmt, "xyza"))
- process = process_lf;
- else if (!strcmp(stream.pixfmt, "xyza f"))
- process = process_f;
- else
- eprintf("pixel format %s is not supported, try xyza\n", stream…
-
+ SELECT_PROCESS_FUNCTION(&stream);
if (strcmp(stream.pixfmt, key.pixfmt))
eprintf("videos use incompatible pixel formats\n");
diff --git a/src/blind-cone-gradient.c b/src/blind-cone-gradient.c
@@ -41,12 +41,7 @@ main(int argc, char *argv[])
eopen_stream(&stream, NULL);
- if (!strcmp(stream.pixfmt, "xyza"))
- process = process_lf;
- else if (!strcmp(stream.pixfmt, "xyza f"))
- process = process_f;
- else
- eprintf("pixel format %s is not supported, try xyza\n", stream…
+ SELECT_PROCESS_FUNCTION(&stream);
if (stream.width > 3 || stream.height > 3 ||
stream.width * stream.height < 2 ||
@@ -72,7 +67,7 @@ PROCESS(struct stream *stream)
pixel_t buf[BUFSIZ / sizeof(pixel_t)];
TYPE *params, x1, y1, x2, y2;
TYPE x, y, u, v, m = 1;
- size_t ix, iy, ptr = 0;
+ size_t i, ix, iy, ptr = 0;
for (;;) {
while (stream->ptr < stream->frame_size) {
@@ -116,7 +111,8 @@ PROCESS(struct stream *stream)
v = 2 - v;
}
}
- buf[ptr][0] = buf[ptr][1] = buf[ptr][2] = buf[…
+ for (i = 0; i < stream->n_chan; i++)
+ buf[ptr][i] = x;
if (++ptr == ELEMENTSOF(buf)) {
ewriteall(STDOUT_FILENO, buf, sizeof(b…
ptr = 0;
diff --git a/src/blind-coordinate-field.c b/src/blind-coordinate-field.c
@@ -44,18 +44,10 @@ main(int argc, char *argv[])
if (inf)
einf_check_fd(STDOUT_FILENO, "<stdout>");
- pixfmt = get_pixel_format(pixfmt, "xyza");
- if (!strcmp(pixfmt, "xyza"))
- process = process_lf;
- else if (!strcmp(pixfmt, "xyza f"))
- process = process_f;
- else
- eprintf("pixel format %s is not supported, try xyza\n", pixfmt…
-
- strcpy(stream.pixfmt, pixfmt);
+ eset_pixel_format(&stream, pixfmt);
+ SELECT_PROCESS_FUNCTION(&stream);
fprint_stream_head(stdout, &stream);
efflush(stdout, "<stdout>");
-
process();
return 0;
}
diff --git a/src/blind-cross-product.c b/src/blind-cross-product.c
@@ -18,13 +18,7 @@ main(int argc, char *argv[])
eopen_stream(&left, NULL);
eopen_stream(&right, argv[0]);
- if (left.encoding == DOUBLE)
- process = process_lf;
- else if (left.encoding == FLOAT)
- process = process_f;
- else
- eprintf("pixel format %s is not supported, try xyza\n", left.p…
-
+ SELECT_PROCESS_FUNCTION(&left);
fprint_stream_head(stdout, &left);
efflush(stdout, "<stdout>");
process_two_streams(&left, &right, STDOUT_FILENO, "<stdout>", process);
diff --git a/src/blind-dot-product.c b/src/blind-dot-product.c
@@ -18,13 +18,7 @@ main(int argc, char *argv[])
eopen_stream(&left, NULL);
eopen_stream(&right, argv[0]);
- if (left.encoding == DOUBLE)
- process = process_lf;
- else if (left.encoding == FLOAT)
- process = process_f;
- else
- eprintf("pixel format %s is not supported, try xyza\n", left.p…
-
+ SELECT_PROCESS_FUNCTION(&left);
fprint_stream_head(stdout, &left);
efflush(stdout, "<stdout>");
process_two_streams(&left, &right, STDOUT_FILENO, "<stdout>", process);
diff --git a/src/blind-double-sine-wave.c b/src/blind-double-sine-wave.c
@@ -28,13 +28,7 @@ main(int argc, char *argv[])
eopen_stream(&stream, NULL);
- if (stream.encoding == DOUBLE)
- process = process_lf;
- else if (stream.encoding == FLOAT)
- process = process_f;
- else
- eprintf("pixel format %s is not supported, try xyza\n", stream…
-
+ SELECT_PROCESS_FUNCTION(&stream);
fprint_stream_head(stdout, &stream);
efflush(stdout, "<stdout>");
process(&stream);
diff --git a/src/blind-dual-key.c b/src/blind-dual-key.c
@@ -28,13 +28,7 @@ main(int argc, char *argv[])
eopen_stream(&stream, NULL);
eopen_stream(&dual, argv[6]);
- if (!strcmp(stream.pixfmt, "xyza"))
- process = process_lf;
- else if (!strcmp(stream.pixfmt, "xyza f"))
- process = process_f;
- else
- eprintf("pixel format %s is not supported, try xyza\n", stream…
-
+ SELECT_PROCESS_FUNCTION(&stream);
fprint_stream_head(stdout, &stream);
efflush(stdout, "<stdout>");
process_two_streams(&stream, &dual, STDOUT_FILENO, "<stdout>", process…
diff --git a/src/blind-extract-alpha.c b/src/blind-extract-alpha.c
@@ -19,18 +19,11 @@ main(int argc, char *argv[])
eopen_stream(&stream, NULL);
fd = eopen(argv[0], O_WRONLY | O_CREAT | O_TRUNC, 0666);
- if (stream.encoding == DOUBLE)
- process = process_lf;
- else if (stream.encoding == FLOAT)
- process = process_f;
- else
- eprintf("pixel format %s is not supported, try xyza\n", stream…
-
+ SELECT_PROCESS_FUNCTION(&stream);
fprint_stream_head(stdout, &stream);
efflush(stdout, "<stdout>");
if (dprint_stream_head(fd, &stream) < 0)
eprintf("dprintf %s:", argv[0]);
-
process(&stream, fd, argv[0]);
return 0;
}
diff --git a/src/blind-find-rectangle.c b/src/blind-find-rectangle.c
@@ -9,7 +9,6 @@ struct pair {
};
static struct stream stream;
-static double X, Y, Z, alpha = 1;
static size_t min_width = 1;
static size_t min_height = 1;
static size_t min_area = 1;
@@ -76,6 +75,7 @@ main(int argc, char *argv[])
{
double colour_lf[4];
float colour_f[4];
+ double X, Y, Z, alpha = 1;
ARGBEGIN {
case 'a':
@@ -117,14 +117,12 @@ main(int argc, char *argv[])
colour_lf[2] = Z;
colour_lf[3] = alpha;
process(colour_lf);
- } else if (stream.encoding == FLOAT) {
+ } else {
colour_f[0] = (float)X;
colour_f[1] = (float)Y;
colour_f[2] = (float)Z;
colour_f[3] = (float)alpha;
process(colour_f);
- } else {
- eprintf("pixel format %s is not supported, try xyza\n", stream…
}
fshut(stdout, "<stdout>");
diff --git a/src/blind-flip.c b/src/blind-flip.c
@@ -21,7 +21,7 @@ main(int argc, char *argv[])
while (eread_frame(&stream, buf))
for (ptr = stream.frame_size; ptr;)
ewriteall(STDOUT_FILENO, buf + (ptr -= stream.row_size…
- stream.row_size, "<stdout>");
+ stream.row_size, "<stdout>");
/* ewriteall is faster than writev(3) and vmsplice(3) */
free(buf);
diff --git a/src/blind-from-named.c b/src/blind-from-named.c
@@ -40,9 +40,6 @@ erecv_fd(int sock)
}
#if !defined(HAVE_SENDFILE)
-# if !defined(PIPE_BUF)
-# define PIPE_BUF BUFSIZ
-# endif
static ssize_t
sendfile(int outfd, int infd, off_t *offset, size_t count)
{
diff --git a/src/blind-from-portable.c b/src/blind-from-portable.c
@@ -3,6 +3,8 @@
USAGE("[-s]")
+static int strict = 1;
+
#define CONV(ITYPE, SITYPE, OTYPE, EXPONENT, HA2EXPONENT, FRACTION)\
do {\
static int cache_i = 0;\
@@ -74,15 +76,14 @@ USAGE("[-s]")
static double conv_double(uint64_t portable) {CONV(uint64_t, int64_t, double, …
static float conv_float (uint32_t portable) {CONV(uint32_t, int32_t, float, …
-static void process_lf(struct stream *stream, int strict) {PROCESS(uint64_t, d…
-static void process_f (struct stream *stream, int strict) {PROCESS(uint32_t, f…
+static void process_lf(struct stream *stream) {PROCESS(uint64_t, double, 64);}
+static void process_f (struct stream *stream) {PROCESS(uint32_t, float, 32);}
int
main(int argc, char *argv[])
{
struct stream stream;
- int strict = 1;
- void (*process)(struct stream *stream, int strict);
+ void (*process)(struct stream *stream);
ARGBEGIN {
case 's':
@@ -91,20 +92,16 @@ main(int argc, char *argv[])
default:
usage();
} ARGEND;
+
if (argc)
usage();
eopen_stream(&stream, NULL);
- if (stream.encoding == DOUBLE)
- process = process_lf;
- else if (stream.encoding == FLOAT)
- process = process_f;
- else
- eprintf("pixel format %s is not supported\n", stream.pixfmt);
+ SELECT_PROCESS_FUNCTION(&stream);
fprint_stream_head(stdout, &stream);
efflush(stdout, "<stdout>");
- process(&stream, strict);
+ process(&stream);
return 0;
}
diff --git a/src/blind-from-text.c b/src/blind-from-text.c
@@ -1,27 +1,11 @@
/* See LICENSE file for copyright and license details. */
+#ifndef TYPE
#include "common.h"
USAGE("")
-#define PROCESS(TYPE, FMT)\
- do {\
- TYPE buf[BUFSIZ / sizeof(TYPE)];\
- size_t i;\
- int r, done = 0;\
- while (!done) {\
- for (i = 0; i < ELEMENTSOF(buf); i += (size_t)r) {\
- r = scanf("%"FMT, buf + i);\
- if (r == EOF) {\
- done = 1;\
- break;\
- }\
- }\
- ewriteall(STDOUT_FILENO, buf, i * sizeof(*buf), "<stdo…
- }\
- } while (0)
-
-static void process_lf(void) { PROCESS(double, "lf"); }
-static void process_f(void) { PROCESS(float, "f"); }
+#define FILE "blind-from-text.c"
+#include "define-functions.h"
int
main(int argc, char *argv[])
@@ -54,15 +38,31 @@ main(int argc, char *argv[])
ewriteall(STDOUT_FILENO, stream.buf, stream.ptr, "<stdout>");
einit_stream(&stream);
- if (stream.encoding == DOUBLE)
- process = process_lf;
- else if (stream.encoding == FLOAT)
- process = process_f;
- else
- eprintf("pixel format %s is not supported, try xyza\n", stream…
-
+ SELECT_PROCESS_FUNCTION(&stream);
process();
efshut(stdin, "<stdin>");
return 0;
}
+
+#else
+
+static void
+PROCESS(void)
+{
+ TYPE buf[BUFSIZ / sizeof(TYPE)];
+ size_t i;
+ int r, done = 0;
+ while (!done) {
+ for (i = 0; i < ELEMENTSOF(buf); i += (size_t)r) {
+ r = scanf("%"SCAN_TYPE, buf + i);
+ if (r == EOF) {
+ done = 1;
+ break;
+ }
+ }
+ ewriteall(STDOUT_FILENO, buf, i * sizeof(*buf), "<stdout>");
+ }
+}
+
+#endif
diff --git a/src/blind-gauss-blur.c b/src/blind-gauss-blur.c
@@ -273,15 +273,15 @@ static size_t spread = 0;
} while (0)
static void
-process_xyza(char *restrict output, char *restrict cbuf, char *restrict sbuf,
- struct stream *colour, struct stream *sigma)
+process_lf(char *restrict output, char *restrict cbuf, char *restrict sbuf,
+ struct stream *colour, struct stream *sigma)
{
PROCESS(double);
}
static void
-process_xyzaf(char *restrict output, char *restrict cbuf, char *restrict sbuf,
- struct stream *colour, struct stream *sigma)
+process_f(char *restrict output, char *restrict cbuf, char *restrict sbuf,
+ struct stream *colour, struct stream *sigma)
{
PROCESS(float);
}
@@ -292,7 +292,7 @@ main(int argc, char *argv[])
struct stream colour, sigma;
char *arg;
void (*process)(char *restrict output, char *restrict cbuf, char *rest…
- struct stream *colour, struct stream *sigma);
+ struct stream *colour, struct stream *sigma);
ARGBEGIN {
case 'a':
@@ -333,12 +333,7 @@ main(int argc, char *argv[])
eopen_stream(&colour, NULL);
eopen_stream(&sigma, argv[0]);
- if (!strcmp(colour.pixfmt, "xyza"))
- process = process_xyza;
- else if (!strcmp(colour.pixfmt, "xyza f"))
- process = process_xyzaf;
- else
- eprintf("pixel format %s is not supported, try xyza\n", colour…
+ SELECT_PROCESS_FUNCTION(&colour);
echeck_compat(&colour, &sigma);
@@ -348,6 +343,5 @@ main(int argc, char *argv[])
fprint_stream_head(stdout, &colour);
efflush(stdout, "<stdout>");
process_each_frame_two_streams(&colour, &sigma, STDOUT_FILENO, "<stdou…
-
return 0;
}
diff --git a/src/blind-get-colours.c b/src/blind-get-colours.c
@@ -63,11 +63,9 @@ main(int argc, char *argv[])
do {
n = stream.ptr / width;
-
qsort(stream.buf, n, width, pixcmp);
m = unique(stream.buf, n);
ptr = merge(&colours, ptr, stream.buf, m, &siz);
-
n *= width;
memmove(stream.buf, stream.buf + n, stream.ptr -= n);
} while (eread_stream(&stream, SIZE_MAX));
diff --git a/src/blind-hexagon-tessellation.c b/src/blind-hexagon-tessellation.c
@@ -4,8 +4,7 @@
USAGE("[-F pixel-format] block-diameter")
#define SET_XYZA(TYPE)\
- (pixwidth *= sizeof(double),\
- colours = alloca(4 * pixwidth),\
+ (colours = alloca(4 * stream.pixel_size),\
((TYPE *)colours)[ 0] = (TYPE)0.412457445582367600,\
((TYPE *)colours)[ 1] = (TYPE)0.212673370378408280,\
((TYPE *)colours)[ 2] = (TYPE)0.019333942761673460,\
@@ -30,7 +29,6 @@ main(int argc, char *argv[])
{
size_t diameter;
const char *pixfmt = "xyza";
- size_t pixwidth = 4;
char *colours;
size_t x, y, y2;
int k;
@@ -48,15 +46,12 @@ main(int argc, char *argv[])
diameter = etozu_arg("block-diameter", argv[0], 1, SIZE_MAX);
- pixfmt = get_pixel_format(pixfmt, "xyza");
- if (!strcmp(pixfmt, "xyza"))
+ eset_pixel_format(&stream, pixfmt);
+ if (stream.encoding == DOUBLE)
SET_XYZA(double);
- else if (!strcmp(pixfmt, "xyza f"))
- SET_XYZA(float);
else
- eprintf("pixel format %s is not supported, try xyza\n", pixfmt…
+ SET_XYZA(float);
- strcpy(stream.pixfmt, pixfmt);
stream.width = (size_t)((double)diameter * sqrt(3.));
stream.height = diameter * 3 / 2;
fprint_stream_head(stdout, &stream);
@@ -100,7 +95,7 @@ main(int argc, char *argv[])
} else {
k = (stream.width <= x * 4 && x * 4 < stream.w…
}
- ewriteall(STDOUT_FILENO, colours + (size_t)k * pixwidt…
+ ewriteall(STDOUT_FILENO, colours + (size_t)k * stream.…
}
}
diff --git a/src/blind-linear-gradient.c b/src/blind-linear-gradient.c
@@ -36,12 +36,7 @@ main(int argc, char *argv[])
eopen_stream(&stream, NULL);
- if (!strcmp(stream.pixfmt, "xyza"))
- process = process_lf;
- else if (!strcmp(stream.pixfmt, "xyza f"))
- process = process_f;
- else
- eprintf("pixel format %s is not supported, try xyza\n", stream…
+ SELECT_PROCESS_FUNCTION(&stream);
if (stream.width > 2 || stream.height > 2 || stream.width * stream.hei…
eprintf("<stdin>: each frame must contain exactly 2 pixels\n");
@@ -63,7 +58,7 @@ PROCESS(struct stream *stream)
pixel_t buf[BUFSIZ / sizeof(pixel_t)];
TYPE *params, x1, y1, x2, y2, norm2;
TYPE x, y;
- size_t ix, iy, ptr = 0;
+ size_t i, ix, iy, ptr = 0;
for (;;) {
while (stream->ptr < stream->frame_size) {
@@ -91,7 +86,8 @@ PROCESS(struct stream *stream)
x = (x * x2 + y * y2) / norm2;
if (bilinear)
x = abs(x);
- buf[ptr][0] = buf[ptr][1] = buf[ptr][2] = buf[…
+ for (i = 0; i < stream->n_chan; i++)
+ buf[ptr][i] = x;
if (++ptr == ELEMENTSOF(buf)) {
ewriteall(STDOUT_FILENO, buf, sizeof(b…
ptr = 0;
diff --git a/src/blind-matrix-orthoproject.c b/src/blind-matrix-orthoproject.c
@@ -28,6 +28,8 @@ main(int argc, char *argv[])
eopen_stream(&stream, NULL);
+ SELECT_PROCESS_FUNCTION(&stream);
+
if (stream.width > 2 || stream.height > 2 || stream.width * stream.hei…
eprintf("<stdin>: each frame must contain exactly 2 pixels\n");
@@ -36,13 +38,6 @@ main(int argc, char *argv[])
fprint_stream_head(stdout, &stream);
efflush(stdout, "<stdout>");
- if (stream.encoding == DOUBLE)
- process = process_lf;
- else if (stream.encoding == FLOAT)
- process = process_f;
- else
- eprintf("pixel format %s is not supported, try xyza\n", stream…
-
process(&stream);
return 0;
}
diff --git a/src/blind-matrix-reflect.c b/src/blind-matrix-reflect.c
@@ -28,6 +28,8 @@ main(int argc, char *argv[])
eopen_stream(&stream, NULL);
+ SELECT_PROCESS_FUNCTION(&stream);
+
if (stream.width > 2 || stream.height > 2 || stream.width * stream.hei…
eprintf("<stdin>: each frame must contain exactly 2 pixels\n");
@@ -36,13 +38,6 @@ main(int argc, char *argv[])
fprint_stream_head(stdout, &stream);
efflush(stdout, "<stdout>");
- if (stream.encoding == DOUBLE)
- process = process_lf;
- else if (stream.encoding == FLOAT)
- process = process_f;
- else
- eprintf("pixel format %s is not supported, try xyza\n", stream…
-
process(&stream);
return 0;
}
diff --git a/src/blind-matrix-rotate.c b/src/blind-matrix-rotate.c
@@ -32,6 +32,8 @@ main(int argc, char *argv[])
eopen_stream(&stream, NULL);
+ SELECT_PROCESS_FUNCTION(&stream);
+
if (stream.width != 1 || stream.height != 1)
eprintf("<stdin>: each frame must contain exactly 1 pixels\n");
@@ -40,13 +42,6 @@ main(int argc, char *argv[])
fprint_stream_head(stdout, &stream);
efflush(stdout, "<stdout>");
- if (stream.encoding == DOUBLE)
- process = process_lf;
- else if (stream.encoding == FLOAT)
- process = process_f;
- else
- eprintf("pixel format %s is not supported, try xyza\n", stream…
-
process(&stream);
return 0;
}
diff --git a/src/blind-matrix-scale.c b/src/blind-matrix-scale.c
@@ -28,6 +28,8 @@ main(int argc, char *argv[])
eopen_stream(&stream, NULL);
+ SELECT_PROCESS_FUNCTION(&stream);
+
if (stream.width > 2 || stream.height > 2 || stream.width * stream.hei…
eprintf("<stdin>: each frame must contain exactly 2 pixels\n");
@@ -36,13 +38,6 @@ main(int argc, char *argv[])
fprint_stream_head(stdout, &stream);
efflush(stdout, "<stdout>");
- if (stream.encoding == DOUBLE)
- process = process_lf;
- else if (stream.encoding == FLOAT)
- process = process_f;
- else
- eprintf("pixel format %s is not supported, try xyza\n", stream…
-
process(&stream);
return 0;
}
diff --git a/src/blind-matrix-shear.c b/src/blind-matrix-shear.c
@@ -36,6 +36,8 @@ main(int argc, char *argv[])
eopen_stream(&stream, NULL);
+ SELECT_PROCESS_FUNCTION(&stream);
+
if (stream.width > 2 || stream.height > 2 || stream.width * stream.hei…
eprintf("<stdin>: each frame must contain exactly 2 pixels\n");
@@ -44,13 +46,6 @@ main(int argc, char *argv[])
fprint_stream_head(stdout, &stream);
efflush(stdout, "<stdout>");
- if (stream.encoding == DOUBLE)
- process = process_lf;
- else if (stream.encoding == FLOAT)
- process = process_f;
- else
- eprintf("pixel format %s is not supported, try xyza\n", stream…
-
process(&stream);
return 0;
}
diff --git a/src/blind-matrix-translate.c b/src/blind-matrix-translate.c
@@ -28,6 +28,8 @@ main(int argc, char *argv[])
eopen_stream(&stream, NULL);
+ SELECT_PROCESS_FUNCTION(&stream);
+
if (stream.width > 2 || stream.height > 2 || stream.width * stream.hei…
eprintf("<stdin>: each frame must contain exactly 2 pixels\n");
@@ -36,13 +38,6 @@ main(int argc, char *argv[])
fprint_stream_head(stdout, &stream);
efflush(stdout, "<stdout>");
- if (stream.encoding == DOUBLE)
- process = process_lf;
- else if (stream.encoding == FLOAT)
- process = process_f;
- else
- eprintf("pixel format %s is not supported, try xyza\n", stream…
-
process(&stream);
return 0;
}
diff --git a/src/blind-matrix-transpose.c b/src/blind-matrix-transpose.c
@@ -28,6 +28,8 @@ main(int argc, char *argv[])
eopen_stream(&stream, NULL);
+ SELECT_PROCESS_FUNCTION(&stream);
+
if (stream.width != 1 || stream.height != 1)
eprintf("<stdin>: each frame must contain exactly 1 pixels\n");
@@ -36,13 +38,6 @@ main(int argc, char *argv[])
fprint_stream_head(stdout, &stream);
efflush(stdout, "<stdout>");
- if (stream.encoding == DOUBLE)
- process = process_lf;
- else if (stream.encoding == FLOAT)
- process = process_f;
- else
- eprintf("pixel format %s is not supported, try xyza\n", stream…
-
process(&stream);
return 0;
}
diff --git a/src/blind-mosaic-edges.c b/src/blind-mosaic-edges.c
@@ -10,9 +10,7 @@ main(int argc, char *argv[])
int tiled_y = 0;
struct stream stream;
void *colours[2];
- char *buf;
- char *edges;
- char *here;
+ char *buf, *edges, *here;
size_t i, n, x, y;
int v;
@@ -65,37 +63,37 @@ main(int argc, char *argv[])
x = i % stream.width;
y = i / stream.width;
- if (x != stream.width - 1 &&
- memcmp(here + stream.pixel_size, here, stream.pixe…
- goto at_edge;
-
- if (tiled_x && x == stream.width - 1 &&
- memcmp(here + stream.pixel_size - stream.row_size,…
- goto at_edge;
-
- if (x &&
- memcmp(here - stream.pixel_size, here, stream.pixe…
- goto at_edge;
-
- if (tiled_x && !x &&
- memcmp(here + stream.row_size - stream.pixel_size,…
- goto at_edge;
-
- if (y != stream.height - 1 &&
- memcmp(here + stream.row_size, here, stream.pixel_…
- goto at_edge;
-
- if (tiled_y && y == stream.height - 1 &&
- memcmp(here + stream.row_size - stream.frame_size,…
- goto at_edge;
-
- if (y &&
- memcmp(here - stream.row_size, here, stream.pixel_…
- goto at_edge;
-
- if (tiled_y && !y &&
- memcmp(here + stream.frame_size - stream.row_size,…
- goto at_edge;
+ if (x != stream.width - 1) {
+ if (memcmp(here + stream.pixel_size, here, str…
+ goto at_edge;
+ } else if (tiled_x) {
+ if (memcmp(here + stream.pixel_size - stream.r…
+ goto at_edge;
+ }
+
+ if (x) {
+ if (memcmp(here - stream.pixel_size, here, str…
+ goto at_edge;
+ } else if (tiled_x) {
+ if (memcmp(here + stream.row_size - stream.pix…
+ goto at_edge;
+ }
+
+ if (y != stream.height - 1) {
+ if (memcmp(here + stream.row_size, here, strea…
+ goto at_edge;
+ } else if (tiled_y) {
+ if (memcmp(here + stream.row_size - stream.fra…
+ goto at_edge;
+ }
+
+ if (y) {
+ if (memcmp(here - stream.row_size, here, strea…
+ goto at_edge;
+ } else if (tiled_y) {
+ if (memcmp(here + stream.frame_size - stream.r…
+ goto at_edge;
+ }
continue;
at_edge:
diff --git a/src/blind-mosaic.c b/src/blind-mosaic.c
@@ -157,18 +157,11 @@ main(int argc, char *argv[])
eopen_stream(&colour, NULL);
eopen_stream(&mosaic, argv[0]);
- if (!strcmp(colour.pixfmt, "xyza"))
- process = process_lf;
- else if (!strcmp(colour.pixfmt, "xyza f"))
- process = process_f;
- else
- eprintf("pixel format %s is not supported, try xyza\n", colour…
-
+ SELECT_PROCESS_FUNCTION(&colour);
echeck_compat(&colour, &mosaic);
fprint_stream_head(stdout, &colour);
efflush(stdout, "<stdout>");
process_each_frame_two_streams(&colour, &mosaic, STDOUT_FILENO, "<stdo…
-
return 0;
}
diff --git a/src/blind-multiply-matrices.c b/src/blind-multiply-matrices.c
@@ -66,12 +66,7 @@ main(int argc, char *argv[])
height = streams[i].height;
}
- if (streams->encoding == DOUBLE)
- process = process_lf;
- else if (streams->encoding == FLOAT)
- process = process_f;
- else
- eprintf("pixel format %s is not supported, try xyza\n", stream…
+ SELECT_PROCESS_FUNCTION(streams);
w = streams->width, streams->width = max_width;
h = streams->height, streams->height = max_height;
diff --git a/src/blind-next-frame.c b/src/blind-next-frame.c
@@ -6,13 +6,11 @@ USAGE("[-f frames] width height pixel-format ...")
int
main(int argc, char *argv[])
{
- struct stream stream;
+ struct stream stream = { .frames = 1, .fd = STDIN_FILENO, .file = "<st…
size_t n;
int i;
char *p;
- stream.frames = 1;
-
ARGBEGIN {
case 'f':
stream.frames = entozu_flag(2, 'f', UARGF(), 1, SIZE_MAX);
@@ -24,10 +22,7 @@ main(int argc, char *argv[])
if (argc < 3)
usage();
- stream.fd = STDIN_FILENO;
- stream.file = "<stdin>";
stream.pixfmt[0] = '\0';
-
stream.width = entozu_arg(2, "the width", argv[0], 1, SIZE_MAX);
stream.height = entozu_arg(2, "the height", argv[1], 1, SIZE_MAX);
argv += 2, argc -= 2;
@@ -42,8 +37,7 @@ main(int argc, char *argv[])
p = stpcpy(p, argv[i]);
}
}
-
- enset_pixel_size(2, &stream);
+ enset_pixel_format(2, &stream, NULL);
fprint_stream_head(stdout, &stream);
enfflush(2, stdout, "<stdout>");
diff --git a/src/blind-norm.c b/src/blind-norm.c
@@ -40,13 +40,7 @@ main(int argc, char *argv[])
eopen_stream(&stream, NULL);
- if (!strcmp(stream.pixfmt, "xyza"))
- process = process_lf;
- else if (!strcmp(stream.pixfmt, "xyza f"))
- process = process_f;
- else
- eprintf("pixel format %s is not supported, try xyza\n", stream…
-
+ SELECT_PROCESS_FUNCTION(&stream);
fprint_stream_head(stdout, &stream);
efflush(stdout, "<stdout>");
process(&stream);
diff --git a/src/blind-premultiply.c b/src/blind-premultiply.c
@@ -36,13 +36,7 @@ main(int argc, char *argv[])
eopen_stream(&stream, NULL);
- if (!strcmp(stream.pixfmt, "xyza"))
- process = process_lf;
- else if (!strcmp(stream.pixfmt, "xyza f"))
- process = process_f;
- else
- eprintf("pixel format %s is not supported, try xyza\n", stream…
-
+ SELECT_PROCESS_FUNCTION(&stream);
fprint_stream_head(stdout, &stream);
efflush(stdout, "<stdout>");
process(&stream);
diff --git a/src/blind-quaternion-product.c b/src/blind-quaternion-product.c
@@ -18,13 +18,7 @@ main(int argc, char *argv[])
eopen_stream(&left, NULL);
eopen_stream(&right, argv[0]);
- if (left.encoding == DOUBLE)
- process = process_lf;
- else if (left.encoding == FLOAT)
- process = process_f;
- else
- eprintf("pixel format %s is not supported, try xyza\n", left.p…
-
+ SELECT_PROCESS_FUNCTION(&left);
fprint_stream_head(stdout, &left);
efflush(stdout, "<stdout>");
process_two_streams(&left, &right, STDOUT_FILENO, "<stdout>", process);
diff --git a/src/blind-radial-gradient.c b/src/blind-radial-gradient.c
@@ -33,12 +33,7 @@ main(int argc, char *argv[])
eopen_stream(&stream, NULL);
- if (!strcmp(stream.pixfmt, "xyza"))
- process = process_lf;
- else if (!strcmp(stream.pixfmt, "xyza f"))
- process = process_f;
- else
- eprintf("pixel format %s is not supported, try xyza\n", stream…
+ SELECT_PROCESS_FUNCTION(&stream);
if (stream.width > 3 || stream.height > 3 ||
stream.width * stream.height < 2 ||
@@ -64,7 +59,7 @@ PROCESS(struct stream *stream)
pixel_t buf[BUFSIZ / sizeof(pixel_t)];
TYPE *params, x1, y1, x2, y2, norm, rd = 1, pe = 2, re = 2, e = 0.5;
TYPE x, y, p, r, rx, ry;
- size_t ix, iy, ptr = 0;
+ size_t i, ix, iy, ptr = 0;
for (;;) {
while (stream->ptr < stream->frame_size) {
if (!eread_stream(stream, stream->frame_size - stream-…
@@ -97,7 +92,8 @@ PROCESS(struct stream *stream)
for (ix = 0; ix < width; ix++) {
x = (TYPE)ix - x1;
x = sqrt(x * x + y) / norm;
- buf[ptr][0] = buf[ptr][1] = buf[ptr][2…
+ for (i = 0; i < stream->n_chan; i++)
+ buf[ptr][i] = x;
if (++ptr == ELEMENTSOF(buf)) {
ewriteall(STDOUT_FILENO, buf, …
ptr = 0;
@@ -116,7 +112,8 @@ PROCESS(struct stream *stream)
p = pow(abs(p / norm), pe);
r = pow(abs(r / norm), re);
x = pow(p + r, e);
- buf[ptr][0] = buf[ptr][1] = buf[ptr][2…
+ for (i = 0; i < stream->n_chan; i++)
+ buf[ptr][i] = x;
if (++ptr == ELEMENTSOF(buf)) {
ewriteall(STDOUT_FILENO, buf, …
ptr = 0;
diff --git a/src/blind-rectangle-tessellation.c b/src/blind-rectangle-tessellat…
@@ -4,8 +4,7 @@
USAGE("[-F pixel-format] block-width block-height")
#define SET_XYZA(TYPE)\
- (pixwidth *= sizeof(double),\
- colours = alloca(4 * pixwidth),\
+ (colours = alloca(4 * stream.pixel_size),\
((TYPE *)colours)[ 0] = (TYPE)0.412457445582367600,\
((TYPE *)colours)[ 1] = (TYPE)0.212673370378408280,\
((TYPE *)colours)[ 2] = (TYPE)0.019333942761673460,\
@@ -30,7 +29,6 @@ main(int argc, char *argv[])
{
size_t width, height;
const char *pixfmt = "xyza";
- size_t pixwidth = 4;
char *colours;
size_t x1, y1, x2, y2;
@@ -48,15 +46,12 @@ main(int argc, char *argv[])
width = etozu_arg("block-width", argv[0], 1, SIZE_MAX);
height = etozu_arg("block-height", argv[1], 1, SIZE_MAX);
- pixfmt = get_pixel_format(pixfmt, "xyza");
- if (!strcmp(pixfmt, "xyza"))
+ eset_pixel_format(&stream, pixfmt);
+ if (stream.encoding == DOUBLE)
SET_XYZA(double);
- else if (!strcmp(pixfmt, "xyza f"))
- SET_XYZA(float);
else
- eprintf("pixel format %s is not supported, try xyza\n", pixfmt…
+ SET_XYZA(float);
- strcpy(stream.pixfmt, pixfmt);
stream.width = 2 * width;
stream.height = 2 * height;
fprint_stream_head(stdout, &stream);
@@ -66,7 +61,8 @@ main(int argc, char *argv[])
for (y2 = 0; y2 < height; y2++)
for (x1 = 0; x1 < 2; x1++)
for (x2 = 0; x2 < width; x2++)
- ewriteall(STDOUT_FILENO, colours + (y1…
+ ewriteall(STDOUT_FILENO, colours + (y1…
+ stream.pixel_size, "<stdout>…
return 0;
}
diff --git a/src/blind-reverse.c b/src/blind-reverse.c
@@ -98,9 +98,7 @@ main(int argc, char *argv[])
if (stream.frames * stream.frame_size > (size_t)SSIZE_MAX - stream.hea…
eprintf("%s: video is too large\n", stream.file);
-#if defined(POSIX_FADV_RANDOM)
- posix_fadvise(stream.fd, 0, 0, POSIX_FADV_RANDOM);
-#endif
+ fadvise_random(stream.fd, 0, 0);
(inplace ? in_place : to_stdout)(&stream);
close(stream.fd);
diff --git a/src/blind-rewrite-head.c b/src/blind-rewrite-head.c
@@ -65,7 +65,6 @@ main(int argc, char *argv[])
usage();
} ARGEND;
-
if (headless) {
if (argc != 5)
eprintf("all positional arguments are mandatory unless…
@@ -73,14 +72,12 @@ main(int argc, char *argv[])
usage();
}
-
memset(&stream, 0, sizeof(stream));
stream.file = argv[0];
stream.fd = eopen(stream.file, O_RDWR);
if (!headless)
einit_stream(&stream);
-
if (argc < 2 || !strcmp(argv[1], "auto"))
frames_auto = 1;
else
@@ -102,14 +99,12 @@ main(int argc, char *argv[])
else if (strcmp(argv[4], "same")) {
if (strlen(argv[4]) >= sizeof(stream.pixfmt))
eprintf("choosen pixel format is unsupported\n");
- strcpy(stream.pixfmt, argv[5]);
- if (set_pixel_size(&stream))
+ if (set_pixel_format(&stream, argv[5]))
eprintf("choosen pixel format is unsupported\n");
} else if (headless) {
eprintf("cannot use both 'same' and -h\n");
}
-
rewrite(&stream, frames_auto);
close(stream.fd);
return 0;
diff --git a/src/blind-round-wave.c b/src/blind-round-wave.c
@@ -28,13 +28,7 @@ main(int argc, char *argv[])
eopen_stream(&stream, NULL);
- if (stream.encoding == DOUBLE)
- process = process_lf;
- else if (stream.encoding == FLOAT)
- process = process_f;
- else
- eprintf("pixel format %s is not supported, try xyza\n", stream…
-
+ SELECT_PROCESS_FUNCTION(&stream);
fprint_stream_head(stdout, &stream);
efflush(stdout, "<stdout>");
process(&stream);
diff --git a/src/blind-sawtooth-wave.c b/src/blind-sawtooth-wave.c
@@ -28,13 +28,7 @@ main(int argc, char *argv[])
eopen_stream(&stream, NULL);
- if (stream.encoding == DOUBLE)
- process = process_lf;
- else if (stream.encoding == FLOAT)
- process = process_f;
- else
- eprintf("pixel format %s is not supported, try xyza\n", stream…
-
+ SELECT_PROCESS_FUNCTION(&stream);
fprint_stream_head(stdout, &stream);
efflush(stdout, "<stdout>");
process(&stream);
diff --git a/src/blind-set-luma.c b/src/blind-set-luma.c
@@ -18,13 +18,7 @@ main(int argc, char *argv[])
eopen_stream(&colour, NULL);
eopen_stream(&luma, argv[0]);
- if (!strcmp(colour.pixfmt, "xyza"))
- process = process_lf;
- else if (!strcmp(colour.pixfmt, "xyza f"))
- process = process_f;
- else
- eprintf("pixel format %s is not supported, try xyza\n", colour…
-
+ SELECT_PROCESS_FUNCTION(&colour);
fprint_stream_head(stdout, &colour);
efflush(stdout, "<stdout>");
process_two_streams(&colour, &luma, STDOUT_FILENO, "<stdout>", process…
diff --git a/src/blind-sinc-wave.c b/src/blind-sinc-wave.c
@@ -34,12 +34,7 @@ main(int argc, char *argv[])
eprintf("theta0-stream must be of dimension 1x1\n");
}
- if (stream.encoding == DOUBLE)
- process = process_lf;
- else if (stream.encoding == FLOAT)
- process = process_f;
- else
- eprintf("pixel format %s is not supported, try xyza\n", stream…
+ SELECT_PROCESS_FUNCTION(&stream);
if (have_theta0 && strcmp(stream.pixfmt, theta0.pixfmt))
eprintf("videos use incompatible pixel formats\n");
diff --git a/src/blind-sine-wave.c b/src/blind-sine-wave.c
@@ -28,13 +28,7 @@ main(int argc, char *argv[])
eopen_stream(&stream, NULL);
- if (stream.encoding == DOUBLE)
- process = process_lf;
- else if (stream.encoding == FLOAT)
- process = process_f;
- else
- eprintf("pixel format %s is not supported, try xyza\n", stream…
-
+ SELECT_PROCESS_FUNCTION(&stream);
fprint_stream_head(stdout, &stream);
efflush(stdout, "<stdout>");
process(&stream);
diff --git a/src/blind-single-colour.c b/src/blind-single-colour.c
@@ -57,15 +57,9 @@ main(int argc, char *argv[])
if (inf)
einf_check_fd(STDOUT_FILENO, "<stdout>");
- pixfmt = get_pixel_format(pixfmt, "xyza");
- if (!strcmp(pixfmt, "xyza"))
- process = process_lf;
- else if (!strcmp(pixfmt, "xyza f"))
- process = process_f;
- else
- eprintf("pixel format %s is not supported, try xyza\n", pixfmt…
+ eset_pixel_format(&stream, pixfmt);
+ SELECT_PROCESS_FUNCTION(&stream);
- strcpy(stream.pixfmt, pixfmt);
fprint_stream_head(stdout, &stream);
efflush(stdout, "<stdout>");
diff --git a/src/blind-spectrum.c b/src/blind-spectrum.c
@@ -33,14 +33,9 @@ main(int argc, char *argv[])
eopen_stream(&stream, NULL);
eopen_stream(&spectrum, argv[0]);
- if (!strcmp(stream.pixfmt, "xyza"))
- process = process_lf;
- else if (!strcmp(stream.pixfmt, "xyza f"))
- process = process_f;
- else
- eprintf("pixel format %s is not supported, try xyza\n", stream…
+ SELECT_PROCESS_FUNCTION(&stream);
- if (strcmp(stream.pixfmt, spectrum.pixfmt))
+ if (stream.n_chan != spectrum.n_chan || stream.encoding != spectrum.en…
eprintf("videos use incompatible pixel formats\n");
echeck_dimensions(&spectrum, WIDTH | HEIGHT, "spectrum");
diff --git a/src/blind-spiral-gradient.c b/src/blind-spiral-gradient.c
@@ -52,12 +52,7 @@ main(int argc, char *argv[])
eopen_stream(&stream, NULL);
- if (!strcmp(stream.pixfmt, "xyza"))
- process = process_lf;
- else if (!strcmp(stream.pixfmt, "xyza f"))
- process = process_f;
- else
- eprintf("pixel format %s is not supported, try xyza\n", stream…
+ SELECT_PROCESS_FUNCTION(&stream);
if (stream.width > 5 || stream.height > 5 ||
stream.width * stream.height < 2 ||
@@ -85,7 +80,7 @@ PROCESS(struct stream *stream)
TYPE *params, x1, y1, x2, y2, b, r, u, v;
TYPE x, y, a = 0, e = 1, p = 1, k = 1, ep = 1;
TYPE x3 = 1, y3 = 0, rd = 1, P, R, Rx, Ry, Pe = 2, Re = 2, PRe = 0.5;
- size_t ix, iy, ptr = 0;
+ size_t i, ix, iy, ptr = 0;
for (;;) {
while (stream->ptr < stream->frame_size) {
if (!eread_stream(stream, stream->frame_size - stream-…
@@ -166,7 +161,8 @@ PROCESS(struct stream *stream)
r = (TYPE)(int)(r + 1) + v / (2 * (TYP…
else
r = mod(r, 1 / (TYPE)spirals) * (TYPE)…
- buf[ptr][0] = buf[ptr][1] = buf[ptr][2] = buf[…
+ for (i = 0; i < stream->n_chan; i++)
+ buf[ptr][i] = x;
if (++ptr == ELEMENTSOF(buf)) {
ewriteall(STDOUT_FILENO, buf, sizeof(b…
ptr = 0;
diff --git a/src/blind-square-gradient.c b/src/blind-square-gradient.c
@@ -33,12 +33,7 @@ main(int argc, char *argv[])
eopen_stream(&stream, NULL);
- if (!strcmp(stream.pixfmt, "xyza"))
- process = process_lf;
- else if (!strcmp(stream.pixfmt, "xyza f"))
- process = process_f;
- else
- eprintf("pixel format %s is not supported, try xyza\n", stream…
+ SELECT_PROCESS_FUNCTION(&stream);
if (stream.width > 3 || stream.height > 3 ||
stream.width * stream.height < 2 ||
diff --git a/src/blind-time-blur.c b/src/blind-time-blur.c
@@ -14,7 +14,7 @@ main(int argc, char *argv[])
{
struct stream colour, alpha;
void (*process)(char *restrict output, char *restrict cbuf, char *rest…
- struct stream *colour, struct stream *alpha);
+ struct stream *colour, struct stream *alpha);
ARGBEGIN {
default:
@@ -27,13 +27,7 @@ main(int argc, char *argv[])
eopen_stream(&colour, NULL);
eopen_stream(&alpha, argv[0]);
- if (colour.encoding == DOUBLE)
- process = process_lf;
- else if (colour.encoding == FLOAT)
- process = process_f;
- else
- eprintf("pixel format %s is not supported, try xyza\n", colour…
-
+ SELECT_PROCESS_FUNCTION(&colour);
echeck_compat(&colour, &alpha);
fprint_stream_head(stdout, &colour);
efflush(stdout, "<stdout>");
diff --git a/src/blind-to-portable.c b/src/blind-to-portable.c
@@ -108,18 +108,13 @@ main(int argc, char *argv[])
default:
usage();
} ARGEND;
+
if (argc)
usage();
eopen_stream(&stream, NULL);
- if (stream.encoding == DOUBLE)
- process = process_lf;
- else if (stream.encoding == FLOAT)
- process = process_f;
- else
- eprintf("pixel format %s is not supported\n", stream.pixfmt);
-
+ SELECT_PROCESS_FUNCTION(&stream);
fprint_stream_head(stdout, &stream);
efflush(stdout, "<stdout>");
process(&stream, strict);
diff --git a/src/blind-to-text.c b/src/blind-to-text.c
@@ -1,18 +1,11 @@
/* See LICENSE file for copyright and license details. */
+#ifndef TYPE
#include "common.h"
USAGE("")
-#define PROCESS(TYPE, CAST, FMT)\
- do {\
- size_t i;\
- TYPE *p = (TYPE *)(stream->buf);\
- for (i = 0, n /= stream->chan_size; i < n; i++)\
- printf("%"FMT"%c", (CAST)(p[i]), (i + 1) % stream->n_c…
- } while (0)
-
-static void process_lf(struct stream *stream, size_t n) {PROCESS(double, doubl…
-static void process_f (struct stream *stream, size_t n) {PROCESS(float, doubl…
+#define FILE "blind-to-text.c"
+#include "define-functions.h"
int
main(int argc, char *argv[])
@@ -24,16 +17,22 @@ main(int argc, char *argv[])
eopen_stream(&stream, NULL);
- if (stream.encoding == DOUBLE)
- process = process_lf;
- else if (stream.encoding == FLOAT)
- process = process_f;
- else
- eprintf("pixel format %s is not supported, try xyza\n", stream…
-
+ SELECT_PROCESS_FUNCTION(&stream);
printf("%zu %zu %zu %s\n", stream.frames, stream.width, stream.height,…
-
process_stream(&stream, process);
efshut(stdout, "<stdout>");
return 0;
}
+
+#else
+
+static void
+PROCESS(struct stream *stream, size_t n)
+{
+ size_t i;
+ TYPE *p = (TYPE *)(stream->buf);
+ for (i = 0, n /= stream->chan_size; i < n; i++)
+ printf("%.25"PRINT_TYPE"%c", (PRINT_CAST)(p[i]), (i + 1) % str…
+}
+
+#endif
diff --git a/src/blind-triangle-tessellation.c b/src/blind-triangle-tessellatio…
@@ -4,8 +4,7 @@
USAGE("[-F pixel-format] block-width block-height")
#define SET_XYZA(TYPE)\
- (pixwidth *= sizeof(double),\
- colours = alloca(8 * pixwidth),\
+ (colours = alloca(8 * stream.pixel_size),\
((TYPE *)colours)[ 0] = (TYPE)0.412457445582367600,\
((TYPE *)colours)[ 1] = (TYPE)0.212673370378408280,\
((TYPE *)colours)[ 2] = (TYPE)0.019333942761673460,\
@@ -46,7 +45,6 @@ main(int argc, char *argv[])
{
size_t width, height;
const char *pixfmt = "xyza";
- size_t pixwidth = 4;
char *colours;
size_t x1, y1, x2, y2, k;
@@ -64,15 +62,12 @@ main(int argc, char *argv[])
width = etozu_arg("block-width", argv[0], 1, SIZE_MAX);
height = etozu_arg("block-height", argv[1], 1, SIZE_MAX);
- pixfmt = get_pixel_format(pixfmt, "xyza");
- if (!strcmp(pixfmt, "xyza"))
+ eset_pixel_format(&stream, pixfmt);
+ if (stream.encoding == DOUBLE)
SET_XYZA(double);
- else if (!strcmp(pixfmt, "xyza f"))
- SET_XYZA(float);
else
- eprintf("pixel format %s is not supported, try xyza\n", pixfmt…
+ SET_XYZA(float);
- strcpy(stream.pixfmt, pixfmt);
stream.width = 2 * width;
stream.height = 2 * height;
fprint_stream_head(stdout, &stream);
@@ -83,7 +78,7 @@ main(int argc, char *argv[])
for (x1 = 0; x1 < 2; x1++) {
for (x2 = 0; x2 < width; x2++) {
k = y1 * 4 + x1 * 2 + (x2 * height > y…
- ewriteall(STDOUT_FILENO, colours + k *…
+ ewriteall(STDOUT_FILENO, colours + k *…
}
}
}
diff --git a/src/blind-triangular-wave.c b/src/blind-triangular-wave.c
@@ -32,13 +32,7 @@ main(int argc, char *argv[])
eopen_stream(&stream, NULL);
- if (stream.encoding == DOUBLE)
- process = process_lf;
- else if (stream.encoding == FLOAT)
- process = process_f;
- else
- eprintf("pixel format %s is not supported, try xyza\n", stream…
-
+ SELECT_PROCESS_FUNCTION(&stream);
fprint_stream_head(stdout, &stream);
efflush(stdout, "<stdout>");
process(&stream);
diff --git a/src/blind-unpremultiply.c b/src/blind-unpremultiply.c
@@ -36,13 +36,7 @@ main(int argc, char *argv[])
eopen_stream(&stream, NULL);
- if (!strcmp(stream.pixfmt, "xyza"))
- process = process_lf;
- else if (!strcmp(stream.pixfmt, "xyza f"))
- process = process_f;
- else
- eprintf("pixel format %s is not supported, try xyza\n", stream…
-
+ SELECT_PROCESS_FUNCTION(&stream);
fprint_stream_head(stdout, &stream);
efflush(stdout, "<stdout>");
process(&stream);
diff --git a/src/blind-vector-projection.c b/src/blind-vector-projection.c
@@ -36,13 +36,7 @@ main(int argc, char *argv[])
eopen_stream(&left, NULL);
eopen_stream(&right, argv[0]);
- if (!strcmp(left.pixfmt, "xyza"))
- process = process_lf;
- else if (!strcmp(left.pixfmt, "xyza f"))
- process = process_f;
- else
- eprintf("pixel format %s is not supported, try xyza\n", left.p…
-
+ SELECT_PROCESS_FUNCTION(&left);
fprint_stream_head(stdout, &left);
efflush(stdout, "<stdout>");
process_two_streams(&left, &right, STDOUT_FILENO, "<stdout>", process);
diff --git a/src/common.h b/src/common.h
@@ -68,3 +68,11 @@
#if !defined(PIPE_BUF)
# define PIPE_BUF BUFSIZ
#endif
+
+#define SELECT_PROCESS_FUNCTION(stream)\
+ do {\
+ if ((stream)->encoding == DOUBLE)\
+ process = process_lf;\
+ else\
+ process = process_f;\
+ } while (0)
diff --git a/src/define-functions.h b/src/define-functions.h
@@ -2,12 +2,24 @@
#define PROCESS process_lf
#define TYPE double
+#define SCAN_TYPE "lf"
+#define PRINT_TYPE "lf"
+#define PRINT_CAST double
#include FILE
#undef PROCESS
#undef TYPE
+#undef SCAN_TYPE
+#undef PRINT_TYPE
+#undef PRINT_CAST
#define PROCESS process_f
#define TYPE float
+#define SCAN_TYPE "f"
+#define PRINT_TYPE "lf"
+#define PRINT_CAST double
#include FILE
#undef PROCESS
#undef TYPE
+#undef SCAN_TYPE
+#undef PRINT_TYPE
+#undef PRINT_CAST
diff --git a/src/stream.c b/src/stream.c
@@ -73,7 +73,7 @@ eninit_stream(int status, struct stream *stream)
memmove(stream->buf, stream->buf + 5, stream->ptr -= 5);
stream->headlen = n + 5;
- enset_pixel_size(status, stream);
+ enset_pixel_format(status, stream, NULL);
stream->xptr = 0;
@@ -93,8 +93,15 @@ enopen_stream(int status, struct stream *stream, const char …
int
-set_pixel_size(struct stream *stream)
+set_pixel_format(struct stream *stream, const char *pixfmt)
{
+ if (pixfmt) {
+ pixfmt = get_pixel_format(pixfmt, "xyza");
+ if (strlen(pixfmt) >= sizeof(stream->pixfmt))
+ return -1;
+ strcpy(stream->pixfmt, pixfmt);
+ }
+
if (!strcmp(stream->pixfmt, "xyza")) {
stream->n_chan = 4;
stream->chan_size = sizeof(double);
@@ -110,6 +117,7 @@ set_pixel_size(struct stream *stream)
} else {
return -1;
}
+
stream->pixel_size = stream->n_chan * stream->chan_size;
stream->row_size = stream->pixel_size * stream->width;
stream->col_size = stream->pixel_size * stream->height;
@@ -118,11 +126,15 @@ set_pixel_size(struct stream *stream)
}
void
-enset_pixel_size(int status, struct stream *stream)
+enset_pixel_format(int status, struct stream *stream, const char *pixfmt)
{
- if (set_pixel_size(stream))
- enprintf(status, "file %s uses unsupported pixel format: %s\n",
- stream->file, stream->pixfmt);
+ if (!set_pixel_format(stream, pixfmt)) {
+ if (pixfmt)
+ enprintf(status, "pixel format %s is not supported, tr…
+ else
+ enprintf(status, "%s: unsupported pixel format: %s\n",
+ stream->file, stream->pixfmt);
+ }
}
diff --git a/src/stream.h b/src/stream.h
@@ -37,7 +37,7 @@
#define einit_stream(...) eninit_stream(1, __VA_ARGS__)
#define eopen_stream(...) enopen_stream(1, __VA_ARGS__)
-#define eset_pixel_size(...) enset_pixel_size(1, __VA_ARGS__)
+#define eset_pixel_format(...) enset_pixel_format(1, __VA_ARGS__)
#define eread_stream(...) enread_stream(1, __VA_ARGS__)
#define einf_check_fd(...) eninf_check_fd(1, __VA_ARGS__)
#define echeck_dimensions(...) encheck_dimensions(1, __VA_ARGS__)
@@ -100,8 +100,8 @@ struct stream {
void eninit_stream(int status, struct stream *stream);
void enopen_stream(int status, struct stream *stream, const char *file);
-int set_pixel_size(struct stream *stream);
-void enset_pixel_size(int status, struct stream *stream);
+int set_pixel_format(struct stream *stream, const char *pixfmt);
+void enset_pixel_format(int status, struct stream *stream, const char *pixfmt);
void fprint_stream_head(FILE *fp, struct stream *stream);
int dprint_stream_head(int fd, struct stream *stream);
size_t enread_stream(int status, struct stream *stream, size_t n);
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.