Introduction
Introduction Statistics Contact Development Disclaimer Help
Update blind-convert to support unconverted output from ffmpeg and partially co…
git clone git://git.suckless.org/blind
Log
Files
Refs
README
LICENSE
---
commit b640dfad6fd5c0ae3a9bfdd9b4bd54e387b0cc51
parent 61dbc5af8844e0fbebbe4cdf6f796e8b6837c76b
Author: Mattias Andrée <[email protected]>
Date: Sun, 6 Aug 2017 02:52:29 +0200
Update blind-convert to support unconverted output from ffmpeg and partially co…
Signed-off-by: Mattias Andrée <[email protected]>
Diffstat:
M man/blind-convert.1 | 44 ++++++++---------------------…
M man/blind-from-video.1 | 11 -----------
M src/blind-affine-colour.c | 2 +-
M src/blind-convert.c | 398 +++++++++++++++++++++++++++--…
M src/blind-dissolve.c | 2 +-
M src/blind-from-named.c | 4 ++--
M src/blind-from-portable.c | 12 ++++++------
M src/blind-mosaic-corners.c | 8 ++++----
M src/blind-single-colour.c | 5 ++---
M src/blind-to-portable.c | 12 ++++++------
M src/blind-transition.c | 2 +-
M src/common.h | 4 ++--
M src/stream.c | 188 ++++++++++++-----------------…
M src/stream.h | 7 +++----
M src/util/colour.h | 104 ++++++++++++++++-------------…
M src/video-math.h | 12 ++++++------
16 files changed, 516 insertions(+), 299 deletions(-)
---
diff --git a/man/blind-convert.1 b/man/blind-convert.1
@@ -78,67 +78,45 @@ but single-precision float-point if input is
single-precision float-point.
.TP
.B raw4 f
-Host-endian, single-precision float-point XY'Z.
-.TP
-.B raw4 !f
-Host-endian, double-precision float-point XY'Z.
-.TP
-.B raw4
-Host-endian, double-precision float-point XY'Z,
-but single-precision float-point if input is
-single-precision float-point.
-.TP
-.B raw4a f
-Host-endian, single-precision float-point XY'ZA.
-.TP
-.B raw4a !f
-Host-endian, double-precision float-point XY'ZA.
-.TP
-.B raw4a
-Host-endian, double-precision float-point XY'ZA,
-but single-precision float-point if input is
-single-precision float-point.
-.TP
-.B raw5 f
Host-endian, single-precision float-point sR'G'B'.
.TP
-.B raw5 !f
+.B raw4 !f
Host-endian, double-precision float-point sR'G'B'.
.TP
-.B raw5
+.B raw4
Host-endian, double-precision float-point sR'G'B',
but single-precision float-point if input is
single-precision float-point.
.TP
-.B raw5a f
+.B raw4a f
Host-endian, single-precision float-point sR'G'B'A.
.TP
-.B raw5a !f
+.B raw4a !f
Host-endian, double-precision float-point sR'G'B'A.
.TP
-.B raw5a
+.B raw4a
Host-endian, double-precision float-point sR'G'B'A,
but single-precision float-point if input is
single-precision float-point.
.TP
-.B raw6 f
+.B raw5 f
Host-endian, single-precision float-point sRGB.
.TP
-.B raw6 !f
+.B raw5 !f
Host-endian, double-precision float-point sRGB.
.TP
-.B raw6
+.B raw5
Host-endian, double-precision float-point sRGB,
but single-precision float-point if input is
single-precision float-point.
.TP
-.B raw6a f
+.B raw5a f
Host-endian, single-precision float-point sRGBA.
.TP
-.B raw6a !f
+.B raw5a !f
Host-endian, double-precision float-point sRGBA.
.TP
-.B raw6a
+.B raw5a
Host-endian, double-precision float-point sRGBA,
but single-precision float-point if input is
single-precision float-point.
diff --git a/man/blind-from-video.1 b/man/blind-from-video.1
@@ -50,17 +50,6 @@ drafting or if you will not modify the colours. If you use t…
flag, you should also use it in
.BR blind-to-video (1),
otherwise the colours will be modified.
-
-This is similar to
-.B -F raw
-and piping the output to
-.BR blind-convert (1)
-with
-.BR "-F raw4" ,
-however, the
-.B xyza
-is recorded instead of
-.BR raw4 .
.TP
.BR -F " "\fIpixel-format\fP
Select pixel format, see
diff --git a/src/blind-affine-colour.c b/src/blind-affine-colour.c
@@ -41,7 +41,7 @@ main(int argc, char *argv[])
SELECT_PROCESS_FUNCTION(&colour);
if (skip_alpha && colour.alpha_chan != -1)
- CHECK_CHANS(&colour, == colour.n_chan - 1, == colour.luma_chan…
+ CHECK_CHANS(&colour, == (short int)(colour.n_chan - 1), == col…
else
skip_alpha = 0;
diff --git a/src/blind-convert.c b/src/blind-convert.c
@@ -3,80 +3,380 @@
USAGE("pixel-format ...")
-static void (*outconv)(double *xyzas, size_t n);
+static int in_level = INT_MAX;
+static int out_level = INT_MAX;
-#define INCONV(TYPE)\
+static void
+lf_to_f(double *in, float *out, size_t n)
+{
+ size_t i;
+ for (i = 0; i < n; i++)
+ out[i] = (float)(in[i]);
+}
+
+static void
+f_to_lf(double *in, float *out, size_t n)
+{
+ size_t i;
+ for (i = 0; i < n; i++)
+ out[i] = (double)(in[i]);
+}
+
+#if !defined(HOST_ENDIAN_IS_LITTLE_ENDIAN_16)
+static void
+le_to_h_16(uint16_t *buf, size_t n)
+{
+ size_t i;
+ for (i = 0; i < n; i++)
+ buf[i] = letoh(buf[i]);
+}
+
+static void
+h_to_le_16(uint16_t *buf, size_t n)
+{
+ size_t i;
+ for (i = 0; i < n; i++)
+ buf[i] = htole(buf[i]);
+}
+#else
+# define le_to_h_16(buf, n) ((void) buf, (void) n)
+# define h_to_le_16(buf, n) ((void) buf, (void) n)
+#endif
+
+static size_t
+remove_alpha_u16(uint16_t *buf, size_t n)
+{
+ size_t i, j;
+ long int a, max = (long int)UINT16_MAX;
+ for (i = j = 0; i < n; i += 4, j += 3) {
+ a = (long int)(buf[i + 3]);
+ buf[j + 0] = (uint16_t)(((long int)(buf[i + 0]) - 16L * 256L)…
+ buf[j + 1] = (uint16_t)(((long int)(buf[i + 1]) - 128L * 256L)…
+ buf[j + 2] = (uint16_t)(((long int)(buf[i + 2]) - 128L * 256L)…
+ }
+ return j;
+}
+
+#define REMOVE_ALPHA()\
+ do {\
+ size_t i, j;\
+ for (i = j = 0; i < n; i += 4, j += 3) {\
+ buf[j + 0] = buf[i + 0] * buf[i + 3];\
+ buf[j + 1] = buf[i + 1] * buf[i + 3];\
+ buf[j + 2] = buf[i + 2] * buf[i + 3];\
+ }\
+ return j;\
+ } while (0)
+
+static size_t remove_alpha_lf(double *buf, size_t n) { REMOVE_ALPHA(); }
+static size_t remove_alpha_f (float *buf, size_t n) { REMOVE_ALPHA(); }
+
+#define ADD_ALPHA(TYPE, MAX)\
+ do {\
+ size_t i = n, j = n + n / 3;\
+ for (; i; i -= 3, j -= 4) {\
+ out[j - 1] = (TYPE)(MAX);\
+ out[j - 2] = in[i - 1];\
+ out[j - 3] = in[i - 2];\
+ out[j - 4] = in[i - 3];\
+ }\
+ return n + n / 3;\
+ } while (0)
+
+static size_t add_alpha_u16(uint16_t *in, uint16_t *out, size_t n) { ADD_ALPHA…
+static size_t add_alpha_lf (double *in, double *out, size_t n) { ADD_ALPHA…
+static size_t add_alpha_f (float *in, float *out, size_t n) { ADD_ALPHA…
+
+static void
+raw0_to_raw1(uint16_t *buf, size_t n)
+{
+ size_t i;
+ uint16_t t;
+ for (i = 0; i < n; i += 4, buf += 4)
+ t = buf[0], buf[0] = buf[1], buf[1] = buf[2], buf[2] = buf[3],…
+}
+
+static void
+raw1_to_raw0(uint16_t *buf, size_t n)
+{
+ size_t i;
+ uint16_t t;
+ for (i = 0; i < n; i += 4, buf += 4)
+ t = buf[3], buf[3] = buf[2], buf[2] = buf[1], buf[1] = buf[0],…
+}
+
+#define RAW2_TO_RAW3(TYPE, WITH_ALPHA)\
+ do {\
+ size_t i;\
+ TYPE max = (TYPE)UINT16_MAX;\
+ if (sizeof(*in) > sizeof(*out)) {\
+ for (i = 0; i < n; i += 3 + WITH_ALPHA) {\
+ out[i + 0] = (TYPE)((long int)(in[i + 0]) - 1…
+ out[i + 1] = (TYPE)((long int)(in[i + 1]) - 12…
+ out[i + 2] = (TYPE)((long int)(in[i + 2]) - 12…
+ if (WITH_ALPHA)\
+ out[i + 3] = (TYPE)(in[i + 3]) / max;\
+ }\
+ } else {\
+ for (i = n; i; i -= 3 + WITH_ALPHA) {\
+ if (WITH_ALPHA)\
+ out[i - 1] = (TYPE)(in[i - 1]) / max;\
+ out[i - 1 - WITH_ALPHA] = (TYPE)((long int)(in…
+ out[i - 2 - WITH_ALPHA] = (TYPE)((long int)(in…
+ out[i - 3 - WITH_ALPHA] = (TYPE)((long int)(in…
+ }\
+ }\
+ } while (0)
+
+static void raw2_to_raw3_lf (uint16_t *in, double *out, size_t n) { RAW2_TO_R…
+static void raw2_to_raw3_f (uint16_t *in, float *out, size_t n) { RAW2_TO_R…
+static void raw2a_to_raw3a_lf(uint16_t *in, double *out, size_t n) { RAW2_TO_R…
+static void raw2a_to_raw3a_f (uint16_t *in, float *out, size_t n) { RAW2_TO_R…
+
+#define RAW3_TO_RAW2(TYPE, WITH_ALPHA)\
do {\
- double buf[sizeof(stream->buf) / (4 * sizeof(TYPE)) * 4];\
- double *interm;\
- TYPE *in;\
- size_t n, m;\
- do {\
- in = (TYPE *)stream->buf;\
- interm = buf;\
- n = stream->ptr / stream->pixel_size;\
- for (m = n; m--; in += 4, interm += 4) { \
- interm[0] = (double)(in[0]);\
- interm[1] = (double)(in[1]);\
- interm[2] = (double)(in[2]);\
- interm[3] = (double)(in[3]);\
+ size_t i;\
+ TYPE max = (TYPE)UINT16_MAX;\
+ long int y, u, v;\
+ if (sizeof(*in) > sizeof(*out)) {\
+ for (i = 0; i < n; i += 3 + WITH_ALPHA) {\
+ y = (long int)(in[i + 0] * max) + 16L * 256L;\
+ u = (long int)(in[i + 1] * max) + 128L * 256L;\
+ v = (long int)(in[i + 2] * max) + 128L * 256L;\
+ out[i + 0] = (uint16_t)CLIP(0, y, 0xFFFFL);\
+ out[i + 1] = (uint16_t)CLIP(0, u, 0xFFFFL);\
+ out[i + 2] = (uint16_t)CLIP(0, v, 0xFFFFL);\
+ if (WITH_ALPHA) {\
+ v = (long int)(in[i + 3] * max);\
+ out[i + 3] = (uint16_t)CLIP(0, v, 0xFF…
+ }\
+ }\
+ } else {\
+ for (i = n; i; i -= 3 + WITH_ALPHA) {\
+ if (WITH_ALPHA) {\
+ v = (long int)(in[i - 1] * max);\
+ out[i - 1] = (uint16_t)CLIP(0, v, 0xFF…
+ }\
+ v = (long int)(in[i - 1 - WITH_ALPHA] * max) +…
+ u = (long int)(in[i - 2 - WITH_ALPHA] * max) +…
+ y = (long int)(in[i - 3 - WITH_ALPHA] * max) +…
+ out[i - 1 - WITH_ALPHA] = (uint16_t)CLIP(0, v,…
+ out[i - 2 - WITH_ALPHA] = (uint16_t)CLIP(0, u,…
+ out[i - 3 - WITH_ALPHA] = (uint16_t)CLIP(0, y,…
}\
- outconv(buf, n);\
- n *= stream->pixel_size;\
- memmove(stream->buf, stream->buf + n, stream->ptr -= n…
- } while (eread_stream(stream, SIZE_MAX));\
- if (stream->ptr)\
- eprintf("%s: incomplete frame\n", stream->file);\
+ }\
} while (0)
-#define OUTCONV(TYPE)\
+static void raw3_to_raw2_lf (double *in, uint16_t *out, size_t n) { RAW3_TO_R…
+static void raw3_to_raw2_f (float *in, uint16_t *out, size_t n) { RAW3_TO_R…
+static void raw3a_to_raw2a_lf(double *in, uint16_t *out, size_t n) { RAW3_TO_R…
+static void raw3a_to_raw2a_f (float *in, uint16_t *out, size_t n) { RAW3_TO_R…
+
+#define CONVERT_COLOUR_SPACE(TYPE, CONV)\
do {\
- TYPE *out = alloca(n * 4 * sizeof(TYPE));\
- size_t i, m = n * 4;\
- for (i = 0; i < m; i++)\
- out[i] = (TYPE)(xyzas[i]);\
- ewriteall(STDOUT_FILENO, out, n * 4 * sizeof(TYPE), "<stdout>"…
+ size_t i, s = 3 + (size_t)a;\
+ for (i = 0; i < n; i += s)\
+ CONV(buf[i + 0], buf[i + 1], buf[i + 2], buf + i + 0, …
} while (0)
-static void inconv_xyza (struct stream *stream) {INCONV(double);}
-static void inconv_xyzaf(struct stream *stream) {INCONV(float);}
+static void conv_yuv_to_srgb_lf(double *buf, size_t n, int a) { CONVERT_COLOUR…
+static void conv_yuv_to_srgb_f (float *buf, size_t n, int a) { CONVERT_COLOUR…
+static void conv_srgb_to_yuv_lf(double *buf, size_t n, int a) { CONVERT_COLOUR…
+static void conv_srgb_to_yuv_f (float *buf, size_t n, int a) { CONVERT_COLOUR…
+static void conv_xyz_to_srgb_lf(double *buf, size_t n, int a) { CONVERT_COLOUR…
+static void conv_xyz_to_srgb_f (float *buf, size_t n, int a) { CONVERT_COLOUR…
+static void conv_srgb_to_xyz_lf(double *buf, size_t n, int a) { CONVERT_COLOUR…
+static void conv_srgb_to_xyz_f (float *buf, size_t n, int a) { CONVERT_COLOUR…
+
+#define CHANGE_TRANSFER(TYPE, CONV)\
+ do {\
+ size_t i, s = 3 + (size_t)a;\
+ for (i = 0; i < n; i += s) {\
+ buf[i + 0] = CONV(buf[i + 0]);\
+ buf[i + 1] = CONV(buf[i + 1]);\
+ buf[i + 2] = CONV(buf[i + 2]);\
+ }\
+ } while (0)
+
+static void conv_srgbt_to_srgb_lf(double *buf, size_t n, int a) { CHANGE_TRANS…
+static void conv_srgbt_to_srgb_f (float *buf, size_t n, int a) { CHANGE_TRANS…
+static void conv_srgb_to_srgbt_lf(double *buf, size_t n, int a) { CHANGE_TRANS…
+static void conv_srgb_to_srgbt_f (float *buf, size_t n, int a) { CHANGE_TRANS…
+
+#define CONVERT_COLOUR_SPACE_AUTO(CONV)\
+ static void\
+ conv_##CONV(enum encoding encoding, int with_alpha, void *buf, size_t …
+ {\
+ if (encoding == DOUBLE)\
+ conv_##CONV##_lf(buf, n, !!with_alpha);\
+ else\
+ conv_##CONV##_f(buf, n, !!with_alpha);\
+ }
+CONVERT_COLOUR_SPACE_AUTO(yuv_to_srgb)
+CONVERT_COLOUR_SPACE_AUTO(srgb_to_yuv)
+CONVERT_COLOUR_SPACE_AUTO(xyz_to_srgb)
+CONVERT_COLOUR_SPACE_AUTO(srgb_to_xyz)
+CONVERT_COLOUR_SPACE_AUTO(srgbt_to_srgb)
+CONVERT_COLOUR_SPACE_AUTO(srgb_to_srgbt)
+
+static void
+convert(struct stream *stream, struct stream *out, void *buf, size_t n)
+{
+ enum encoding encoding = stream->encoding;
+
+ if (in_level <= 0 && out_level > 0)
+ raw0_to_raw1(buf, n);
-static void outconv_xyza (double *xyzas, size_t n) {OUTCONV(double);}
-static void outconv_xyzaf(double *xyzas, size_t n) {OUTCONV(float);}
+ if (in_level <= 1 && out_level > 1)
+ le_to_h_16(buf, n);
+
+ if (in_level <= 2 && out_level > 2) {
+ if (out->encoding == DOUBLE && stream->alpha)
+ raw2a_to_raw3a_lf(buf, buf, n);
+ else if (out->encoding == FLOAT && stream->alpha)
+ raw2a_to_raw3a_f(buf, buf, n);
+ else if (out->encoding == DOUBLE)
+ raw2_to_raw3_lf(buf, buf, n);
+ else if (out->encoding == FLOAT)
+ raw2_to_raw3_f(buf, buf, n);
+ encoding = out->encoding;
+ } else if (stream->encoding == FLOAT && out->encoding == DOUBLE) {
+ f_to_lf(buf, buf, n);
+ encoding = out->encoding;
+ } else if (stream->encoding == DOUBLE && out->encoding == FLOAT) {
+ lf_to_f(buf, buf, n);
+ encoding = out->encoding;
+ }
+
+ if (stream->alpha && !out->alpha) {
+ if (encoding == DOUBLE)
+ n = remove_alpha_lf(buf, n);
+ else if (encoding == FLOAT)
+ n = remove_alpha_f(buf, n);
+ else
+ n = remove_alpha_u16(buf, n);
+ } else if (!stream->alpha && out->alpha) {
+ if (encoding == DOUBLE)
+ n = add_alpha_lf(buf, buf, n);
+ else if (encoding == FLOAT)
+ n = add_alpha_f(buf, buf, n);
+ else
+ n = add_alpha_u16(buf, buf, n);
+ }
+
+ if (stream->space == CIEXYZ && out->space == YUV_NONLINEAR) {
+ conv_xyz_to_srgb(encoding, out->alpha, buf, n);
+ conv_srgb_to_srgbt(encoding, out->alpha, buf, n);
+ conv_srgb_to_yuv(encoding, out->alpha, buf, n);
+ } else if (stream->space == CIEXYZ && out->space == SRGB_NONLINEAR) {
+ conv_xyz_to_srgb(encoding, out->alpha, buf, n);
+ conv_srgb_to_srgbt(encoding, out->alpha, buf, n);
+ } else if (stream->space == CIEXYZ && out->space == SRGB) {
+ conv_xyz_to_srgb(encoding, out->alpha, buf, n);
+ } else if (stream->space == YUV_NONLINEAR && out->space == CIEXYZ) {
+ conv_yuv_to_srgb(encoding, out->alpha, buf, n);
+ conv_srgbt_to_srgb(encoding, out->alpha, buf, n);
+ conv_srgb_to_xyz(encoding, out->alpha, buf, n);
+ } else if (stream->space == YUV_NONLINEAR && out->space == SRGB_NONLIN…
+ conv_yuv_to_srgb(encoding, out->alpha, buf, n);
+ } else if (stream->space == YUV_NONLINEAR && out->space == SRGB) {
+ conv_yuv_to_srgb(encoding, out->alpha, buf, n);
+ conv_srgbt_to_srgb(encoding, out->alpha, buf, n);
+ } else if (stream->space == SRGB_NONLINEAR && out->space == CIEXYZ) {
+ conv_srgbt_to_srgb(encoding, out->alpha, buf, n);
+ conv_srgb_to_xyz(encoding, out->alpha, buf, n);
+ } else if (stream->space == SRGB_NONLINEAR && out->space == YUV_NONLIN…
+ conv_srgb_to_yuv(encoding, out->alpha, buf, n);
+ } else if (stream->space == SRGB_NONLINEAR && out->space == SRGB) {
+ conv_srgbt_to_srgb(encoding, out->alpha, buf, n);
+ } else if (stream->space == SRGB && out->space == CIEXYZ) {
+ conv_srgb_to_xyz(encoding, out->alpha, buf, n);
+ } else if (stream->space == SRGB && out->space == YUV_NONLINEAR) {
+ conv_srgb_to_srgbt(encoding, out->alpha, buf, n);
+ conv_srgb_to_yuv(encoding, out->alpha, buf, n);
+ } else if (stream->space == SRGB && out->space == SRGB_NONLINEAR) {
+ conv_srgb_to_srgbt(encoding, out->alpha, buf, n);
+ }
+
+ if (out_level <= 2 && in_level > 2) {
+ if (encoding == DOUBLE && out->alpha)
+ raw3a_to_raw2a_lf(buf, buf, n);
+ else if (encoding == FLOAT && out->alpha)
+ raw3a_to_raw2a_f(buf, buf, n);
+ else if (encoding == DOUBLE)
+ raw3_to_raw2_lf(buf, buf, n);
+ else if (encoding == FLOAT)
+ raw3_to_raw2_f(buf, buf, n);
+ }
+
+ if (out_level <= 1 && in_level > 1)
+ h_to_le_16(buf, n);
+
+ if (out_level <= 0 && in_level > 0)
+ raw1_to_raw0(buf, n);
+
+ ewriteall(STDOUT_FILENO, buf, n * out->chan_size, "<stdout>");
+}
int
main(int argc, char *argv[])
{
- struct stream stream;
+ struct stream stream, out;
const char *pixfmt;
- void (*inconv)(struct stream *stream);
+ void *buf = NULL;
+ size_t n;
UNOFLAGS(!argc);
eopen_stream(&stream, NULL);
- if (!strcmp(stream.pixfmt, "xyza"))
- inconv = inconv_xyza;
- else if (!strcmp(stream.pixfmt, "xyza f"))
- inconv = inconv_xyzaf;
- else
- eprintf("input pixel format %s is not supported\n", stream.pix…
-
+ memcpy(&out, &stream, sizeof(out));
pixfmt = stream.pixfmt;
while (*argv)
pixfmt = get_pixel_format(*argv++, pixfmt);
-
- if (!strcmp(pixfmt, "xyza"))
- outconv = outconv_xyza;
- else if (!strcmp(pixfmt, "xyza f"))
- outconv = outconv_xyzaf;
- else
+ strcpy(out.pixfmt, pixfmt);
+ if (set_pixel_format(&out, NULL))
eprintf("output pixel format %s is not supported\n", pixfmt);
- strcpy(stream.pixfmt, pixfmt);
- fprint_stream_head(stdout, &stream);
+ fprint_stream_head(stdout, &out);
efflush(stdout, "<stdout>");
- inconv(&stream);
+ if (!strcmp(stream.pixfmt, out.pixfmt)) {
+ esend_stream(&stream, STDOUT_FILENO, "<stdout>");
+ return 0;
+ }
+
+ if (stream.alpha_chan == 0)
+ in_level = 0;
+ else if (stream.endian == LITTLE)
+ in_level = 1;
+ else if (stream.encoding == UINT16)
+ in_level = 2;
+ if (out.alpha_chan == 0)
+ out_level = 0;
+ else if (out.endian == LITTLE)
+ out_level = 1;
+ else if (out.encoding == UINT16)
+ out_level = 2;
+
+ if (out.encoding == UINT16)
+ out.encoding = stream.encoding;
+
+ n = MAX(stream.chan_size, out.chan_size) * MAX(stream.n_chan, out.n_ch…
+ if (n > stream.pixel_size)
+ buf = emalloc(sizeof(stream.buf) / stream.chan_size * n);
+
+ do {
+ n = stream.ptr / stream.pixel_size * stream.n_chan;
+ if (buf)
+ memcpy(buf, stream.buf, n * stream.chan_size);
+ convert(&stream, &out, buf ? buf : stream.buf, n);
+ n *= stream.chan_size;
+ memmove(stream.buf, stream.buf + n, stream.ptr -= n);
+ } while (eread_stream(&stream, SIZE_MAX));
+ if (stream.ptr)
+ eprintf("%s: incomplete frame\n", stream.file);
+
+ free(buf);
return 0;
}
diff --git a/src/blind-dissolve.c b/src/blind-dissolve.c
@@ -10,7 +10,7 @@ static int reverse = 0;
#define PROCESS(TYPE)\
do {\
- size_t i = stream->alpha_chan * stream->chan_size;\
+ size_t i = (size_t)(stream->alpha_chan) * stream->chan_size;\
TYPE a = fm ? (TYPE)(reverse ? f : fm - f) / fm_##TYPE : (TYPE…
for (; i < n; i += stream->pixel_size)\
*(TYPE *)(stream->buf + i) *= a;\
diff --git a/src/blind-from-named.c b/src/blind-from-named.c
@@ -48,7 +48,7 @@ main(int argc, char *argv[])
int filedes = -1;
int tries = 11;
int sockfd, fd;
- ssize_t n;
+ size_t n;
ARGBEGIN {
case 'a':
@@ -108,6 +108,6 @@ retry:
}
while ((n = eread(fd, buf, sizeof(buf), "<received file>")))
- ewriteall(STDOUT_FILENO, buf, (size_t)n, "<stdout>");
+ ewriteall(STDOUT_FILENO, buf, n, "<stdout>");
return 0;
}
diff --git a/src/blind-from-portable.c b/src/blind-from-portable.c
@@ -57,7 +57,7 @@ static int strict = 1;
strict *= !USING_BINARY##BITS;\
if (!strict && sizeof(ITYPE) != sizeof(OTYPE))\
eprintf("-s is supported not on this machine\n");\
- if (stream->endian == HOST_ENDIAN && !strict) {\
+ if (stream->endian == HOST && !strict) {\
esend_stream(stream, STDOUT_FILENO, "<stdout>");\
break;\
}\
@@ -82,7 +82,7 @@ static int strict = 1;
do {\
size_t i, n;\
TYPE *buf = (TYPE *)(stream->buf);\
- if (stream->endian == HOST_ENDIAN) {\
+ if (stream->endian == HOST) {\
esend_stream(stream, STDOUT_FILENO, "<stdout>");\
break;\
}\
@@ -124,11 +124,11 @@ main(int argc, char *argv[])
eopen_stream(&stream, NULL);
#if defined(HOST_ENDIAN_IS_LITTLE_ENDIAN)
- if (stream.endian == LITTLE_ENDIAN)
- stream.endian = HOST_ENDIAN;
+ if (stream.endian == LITTLE)
+ stream.endian = HOST;
#elif defined(HOST_ENDIAN_IS_BIG_ENDIAN)
- if (stream.endian == BIG_ENDIAN)
- stream.endian = HOST_ENDIAN;
+ if (stream.endian == BIG)
+ stream.endian = HOST;
#endif
SELECT_PROCESS_FUNCTION(&stream);
diff --git a/src/blind-mosaic-corners.c b/src/blind-mosaic-corners.c
@@ -86,10 +86,10 @@ main(int argc, char *argv[])
j = 1;
memcpy(found, here, pixsize);
- dr = x != stream.width - 1 ? pixsize : tiled_x ? pixsi…
- dl = x ? -pixsize : tiled_x ? stream.row_size - pixsiz…
- dd = y != stream.height - 1 ? stream.row_size : tiled_…
- du = y ? -stream.row_size : tiled_y ? stream.frame_siz…
+ dr = (ssize_t)(x != stream.width - 1 ? pixsize : tiled…
+ dl = (ssize_t)(x ? -pixsize : tiled_x ? stream.row_siz…
+ dd = (ssize_t)(y != stream.height - 1 ? stream.row_siz…
+ du = (ssize_t)(y ? -stream.row_size : tiled_y ? stream…
memcpy(found + j++ * pixsize, here + dr, pixsize);
memcpy(found + j++ * pixsize, here + dl, pixsize);
diff --git a/src/blind-single-colour.c b/src/blind-single-colour.c
@@ -77,8 +77,7 @@ PROCESS(void)
{
typedef TYPE pixel_t[4];
pixel_t buf[BUFSIZ / 4];
- size_t x, y, n;
- ssize_t r;
+ size_t x, y, n, r;
for (x = 0; x < ELEMENTSOF(buf); x++) {
buf[x][0] = (TYPE)X;
buf[x][1] = (TYPE)Y;
@@ -88,7 +87,7 @@ PROCESS(void)
while (inf || stream.frames--)
for (y = stream.height; y--;)
for (x = stream.width * sizeof(*buf); x;)
- for (x -= n = MIN(sizeof(buf), x); n; n -= (si…
+ for (x -= n = MIN(sizeof(buf), x); n; n -= r)
r = ewrite(STDOUT_FILENO, buf, n, "<st…
}
diff --git a/src/blind-to-portable.c b/src/blind-to-portable.c
@@ -74,7 +74,7 @@ static int strict = 1;
strict *= !USING_BINARY##BITS;\
if (!strict && sizeof(ITYPE) != sizeof(OTYPE))\
eprintf("-s is supported not on this machine\n");\
- if (stream->endian == LITTLE_ENDIAN && !strict) {\
+ if (stream->endian == LITTLE && !strict) {\
esend_stream(stream, STDOUT_FILENO, "<stdout>");\
break;\
}\
@@ -99,7 +99,7 @@ static int strict = 1;
do {\
size_t i, n;\
TYPE *buf = (TYPE *)(stream->buf);\
- if (stream->endian == LITTLE_ENDIAN) {\
+ if (stream->endian == LITTLE) {\
esend_stream(stream, STDOUT_FILENO, "<stdout>");\
break;\
}\
@@ -141,11 +141,11 @@ main(int argc, char *argv[])
eopen_stream(&stream, NULL);
#if defined(HOST_ENDIAN_IS_LITTLE_ENDIAN)
- if (stream.endian == HOST_ENDIAN)
- stream.endian = LITTLE_ENDIAN;
+ if (stream.endian == HOST)
+ stream.endian = LITTLE;
#elif defined(HOST_ENDIAN_IS_BIG_ENDIAN)
- if (stream.endian == HOST_ENDIAN)
- stream.endian = BIG_ENDIAN;
+ if (stream.endian == HOST)
+ stream.endian = BIG;
#endif
SELECT_PROCESS_FUNCTION(&stream);
diff --git a/src/blind-transition.c b/src/blind-transition.c
@@ -14,7 +14,7 @@ static struct stream softness;
#define PROCESS(TYPE)\
do {\
size_t i, j = 0;\
- TYPE a, s, t = fm ? (TYPE)(reverse ? fm - f : f) / fm_##TYPE :…
+ TYPE a, s, t = fm ? (TYPE)(reverse ? fm - f : f) / fm_##TYPE :…
if (!softness_file) {\
for (i = 0; i < n; i += stream->pixel_size) {\
a = ((TYPE *)(stream->buf + i))[1];\
diff --git a/src/common.h b/src/common.h
@@ -66,7 +66,7 @@
#endif
#if !defined(PIPE_BUF)
-# define PIPE_BUF BUFSIZ
+# define PIPE_BUF 512
#endif
#ifndef DONT_INCLUDE_FLOAT
@@ -113,7 +113,7 @@
#define SELECT_PROCESS_FUNCTION(stream)\
do {\
- if ((stream)->endian != HOST_ENDIAN)\
+ if ((stream)->endian != HOST)\
eprintf("pixel format %s is not supported, try xyza\n"…
SELECT_PROCESS_FUNCTION_FLOAT(stream);\
SELECT_PROCESS_FUNCTION_DOUBLE(stream);\
diff --git a/src/stream.c b/src/stream.c
@@ -98,7 +98,7 @@ set_pixel_format(struct stream *stream, const char *pixfmt)
#define TEST_ENCODING_AGNOSTIC(FMT) (!strcmp(stream->pixfmt, FMT) || !strcmp(s…
if (pixfmt) {
- pixfmt = get_pixel_format(pixfmt, "xyza");
+ pixfmt = get_pixel_format(pixfmt, stream->pixfmt[0] ? stream->…
if (strlen(pixfmt) >= sizeof(stream->pixfmt))
return -1;
strcpy(stream->pixfmt, pixfmt);
@@ -107,7 +107,7 @@ set_pixel_format(struct stream *stream, const char *pixfmt)
stream->n_chan = 4;
stream->alpha = UNPREMULTIPLIED;
stream->encoding = DOUBLE;
- stream->endian = HOST_ENDIAN;
+ stream->endian = HOST;
stream->alpha_chan = 3;
stream->luma_chan = -1;
@@ -119,13 +119,13 @@ set_pixel_format(struct stream *stream, const char *pixfm…
} else if (!strcmp(stream->pixfmt, "raw0")) {
stream->space = YUV_NONLINEAR;
stream->encoding = UINT16;
- stream->endian = LITTLE_ENDIAN;
+ stream->endian = LITTLE;
stream->alpha_chan = 0;
stream->luma_chan = 1;
} else if (!strcmp(stream->pixfmt, "raw1")) {
stream->space = YUV_NONLINEAR;
stream->encoding = UINT16;
- stream->endian = LITTLE_ENDIAN;
+ stream->endian = LITTLE;
} else if (!strcmp(stream->pixfmt, "raw2a") || !strcmp(stream->pixfmt,…
stream->space = YUV_NONLINEAR;
stream->alpha = stream->pixfmt[4] == 'a' ? UNPREMULTIPLIED : N…
@@ -133,19 +133,15 @@ set_pixel_format(struct stream *stream, const char *pixfm…
} else if (TEST_ENCODING_AGNOSTIC("raw3") || TEST_ENCODING_AGNOSTIC("r…
stream->space = YUV_NONLINEAR;
stream->alpha = stream->pixfmt[4] == 'a' ? UNPREMULTIPLIED : N…
- stream->encoding = strlen(stream->pixfmt) > 6 ? FLOAT : DOUBLE;
+ stream->encoding = strlen(stream->pixfmt) > 5 ? FLOAT : DOUBLE;
} else if (TEST_ENCODING_AGNOSTIC("raw4") || TEST_ENCODING_AGNOSTIC("r…
- stream->space = CIEXYZ_NONLINEAR;
- stream->alpha = stream->pixfmt[4] == 'a' ? UNPREMULTIPLIED : N…
- stream->encoding = strlen(stream->pixfmt) > 6 ? FLOAT : DOUBLE;
- } else if (TEST_ENCODING_AGNOSTIC("raw5") || TEST_ENCODING_AGNOSTIC("r…
stream->space = SRGB_NONLINEAR;
stream->alpha = stream->pixfmt[4] == 'a' ? UNPREMULTIPLIED : N…
- stream->encoding = strlen(stream->pixfmt) > 6 ? FLOAT : DOUBLE;
- } else if (TEST_ENCODING_AGNOSTIC("raw6") || TEST_ENCODING_AGNOSTIC("r…
+ stream->encoding = strlen(stream->pixfmt) > 5 ? FLOAT : DOUBLE;
+ } else if (TEST_ENCODING_AGNOSTIC("raw5") || TEST_ENCODING_AGNOSTIC("r…
stream->space = SRGB;
stream->alpha = stream->pixfmt[4] == 'a' ? UNPREMULTIPLIED : N…
- stream->encoding = strlen(stream->pixfmt) > 6 ? FLOAT : DOUBLE;
+ stream->encoding = strlen(stream->pixfmt) > 5 ? FLOAT : DOUBLE;
} else {
return -1;
}
@@ -156,25 +152,21 @@ set_pixel_format(struct stream *stream, const char *pixfm…
}
if (stream->luma_chan == -1) {
- switch (stream->space) {
- case CIEXYZ:
- case CIEXYZ_NONLINEAR:
+ if (stream->space == CIEXYZ)
stream->luma_chan = 1;
- break;
- case YUV_NONLINEAR:
+ else if (stream->space == YUV_NONLINEAR)
stream->luma_chan = 0;
- break;
- default:
- break;
- }
}
switch (stream->encoding) {
+ case FLOAT:
+ stream->chan_size = sizeof(float);
+ break;
case DOUBLE:
stream->chan_size = sizeof(double);
break;
- case FLOAT:
- stream->chan_size = sizeof(float);
+ case LONG_DOUBLE:
+ stream->chan_size = sizeof(long double);
break;
case UINT8:
stream->chan_size = sizeof(uint8_t);
@@ -310,108 +302,68 @@ encheck_compat(int status, const struct stream *a, const…
const char *
get_pixel_format(const char *specified, const char *current)
{
- enum colour_space space;
+ enum colour_space space = CIEXYZ;
enum alpha alpha = UNPREMULTIPLIED;
- enum encoding encoding = DOUBLE;
- enum endian endian = HOST_ENDIAN;
- int alpha_first = 0;
-
- if (!strcmp(current, "xyza"))
- space = CIEXYZ;
- else if (!strcmp(current, "xyza f"))
- space = CIEXYZ;
- else if (!strcmp(current, "raw0"))
- space = YUV_NONLINEAR, encoding = UINT16, endian = LITTLE_ENDI…
- else if (!strcmp(current, "raw1"))
- space = YUV_NONLINEAR, encoding = UINT16, endian = LITTLE_ENDI…
- else if (!strcmp(current, "raw2"))
- space = YUV_NONLINEAR, encoding = UINT16, alpha = NO_ALPHA;
- else if (!strcmp(current, "raw2a"))
- space = YUV_NONLINEAR, encoding = UINT16;
- else if (!strcmp(current, "raw3"))
- space = YUV_NONLINEAR, alpha = NO_ALPHA;
- else if (!strcmp(current, "raw3a"))
- space = YUV_NONLINEAR;
- else if (!strcmp(current, "raw4"))
- space = CIEXYZ_NONLINEAR, alpha = NO_ALPHA;
- else if (!strcmp(current, "raw4a"))
- space = CIEXYZ_NONLINEAR;
- else if (!strcmp(current, "raw5"))
- space = SRGB_NONLINEAR, alpha = NO_ALPHA;
- else if (!strcmp(current, "raw5a"))
- space = SRGB_NONLINEAR;
- else if (!strcmp(current, "raw6"))
- space = SRGB, alpha = NO_ALPHA;
- else if (!strcmp(current, "raw6a"))
- space = SRGB;
+ enum encoding encoding = UINT16;
+ int level = -1;
+ size_t n = strlen(specified);
+
+ if ((n >= 2 && !strcmp(specified - 2, " f")) ||
+ !strcmp(specified, "raw0") || !strcmp(specified, "raw1") ||
+ !strcmp(specified, "raw2") || !strcmp(specified, "raw2a"))
+ return specified;
+
+ if (!strcmp(current, "xyza")) space = CIEXYZ, encoding = DOUBL…
+ else if (!strcmp(current, "xyza f")) space = CIEXYZ, encoding = FLOAT;
+ else if (!strcmp(current, "raw0")) level = 0;
+ else if (!strcmp(current, "raw1")) level = 1;
+ else if (!strcmp(current, "raw2")) level = 2, alpha = NO_ALPHA;
+ else if (!strcmp(current, "raw2a")) level = 2;
+ else if (!strcmp(current, "raw3")) level = 3, encoding = DOUBLE, al…
+ else if (!strcmp(current, "raw3a")) level = 3, encoding = DOUBLE;
+ else if (!strcmp(current, "raw3 f")) level = 3, encoding = FLOAT, alp…
+ else if (!strcmp(current, "raw3a f")) level = 3, encoding = FLOAT;
+ else if (!strcmp(current, "raw4")) level = 4, encoding = DOUBLE, al…
+ else if (!strcmp(current, "raw4a")) level = 4, encoding = DOUBLE;
+ else if (!strcmp(current, "raw4 f")) level = 4, encoding = FLOAT, alp…
+ else if (!strcmp(current, "raw4a f")) level = 4, encoding = FLOAT;
+ else if (!strcmp(current, "raw5")) level = 5, encoding = DOUBLE, al…
+ else if (!strcmp(current, "raw5a")) level = 5, encoding = DOUBLE;
+ else if (!strcmp(current, "raw5 f")) level = 5, encoding = FLOAT, alp…
+ else if (!strcmp(current, "raw5a f")) level = 5, encoding = FLOAT;
else
return specified;
- if (!strcmp(specified, "xyza"))
- space = CIEXYZ, alpha = UNPREMULTIPLIED;
- else if (!strcmp(specified, "xyza !f"))
- return "xyza";
- else if (!strcmp(specified, "f"))
- encoding = FLOAT;
- else if (!strcmp(specified, "!f"))
- encoding = DOUBLE;
- else if (!strcmp(specified, "raw3 !f"))
- return "raw3";
- else if (!strcmp(specified, "raw3a !f"))
- return "raw3a";
- else if (!strcmp(specified, "raw4 !f"))
- return "raw4";
- else if (!strcmp(specified, "raw4a !f"))
- return "raw4a";
- else if (!strcmp(specified, "raw5 !f"))
- return "raw5";
- else if (!strcmp(specified, "raw5a !f"))
- return "raw5a";
- else if (!strcmp(specified, "raw6 !f"))
- return "raw6";
- else if (!strcmp(specified, "raw6a !f"))
- return "raw6a";
- else if (!strcmp(specified, "raw3"))
- space = YUV_NONLINEAR, alpha = NO_ALPHA;
- else if (!strcmp(specified, "raw4"))
- space = CIEXYZ_NONLINEAR, alpha = NO_ALPHA;
- else if (!strcmp(specified, "raw5"))
- space = SRGB_NONLINEAR, alpha = NO_ALPHA;
- else if (!strcmp(specified, "raw6"))
- space = SRGB, alpha = NO_ALPHA;
- else if (!strcmp(specified, "raw3a"))
- space = YUV_NONLINEAR, alpha = UNPREMULTIPLIED;
- else if (!strcmp(specified, "raw4a"))
- space = CIEXYZ_NONLINEAR, alpha = UNPREMULTIPLIED;
- else if (!strcmp(specified, "raw5a"))
- space = SRGB_NONLINEAR, alpha = UNPREMULTIPLIED;
- else if (!strcmp(specified, "raw6a"))
- space = SRGB, alpha = UNPREMULTIPLIED;
+ if (!strcmp(specified, "f")) encoding = FLOAT;
+ else if (!strcmp(specified, "!f")) encoding = DOUBLE;
+ else if (!strcmp(specified, "xyza")) level = -1, alpha = UNPREMULT…
+ else if (!strcmp(specified, "raw3")) level = 3, alpha = NO_ALPHA;
+ else if (!strcmp(specified, "raw3a")) level = 3, alpha = UNPREMULTI…
+ else if (!strcmp(specified, "raw4")) level = 4, alpha = NO_ALPHA;
+ else if (!strcmp(specified, "raw4a")) level = 4, alpha = UNPREMULTI…
+ else if (!strcmp(specified, "raw5")) level = 5, alpha = NO_ALPHA;
+ else if (!strcmp(specified, "raw5a")) level = 5, alpha = UNPREMULTI…
+ else if (!strcmp(specified, "xyza !f")) return "xyza";
+ else if (!strcmp(specified, "raw3 !f")) return "raw3";
+ else if (!strcmp(specified, "raw3a !f")) return "raw3a";
+ else if (!strcmp(specified, "raw4 !f")) return "raw4";
+ else if (!strcmp(specified, "raw4a !f")) return "raw4a";
+ else if (!strcmp(specified, "raw5 !f")) return "raw5";
+ else if (!strcmp(specified, "raw5a !f")) return "raw5a";
else
return specified;
- if (space == CIEXYZ && alpha == UNPREMULTIPLIED)
- return encoding == FLOAT ? "xyza f" : "xyza";
- else if (space == YUV_NONLINEAR && alpha == UNPREMULTIPLIED && encodin…
- return alpha_first ? "raw0" : "raw1";
- else if (space == YUV_NONLINEAR && encoding == UINT16)
- return alpha ? "raw2" : "raw2a";
- else if (space == YUV_NONLINEAR && encoding == DOUBLE)
- return alpha ? "raw3" : "raw3a";
- else if (space == YUV_NONLINEAR && encoding == FLOAT)
- return alpha ? "raw3 f" : "raw3a f";
- else if (space == CIEXYZ_NONLINEAR && encoding == DOUBLE)
- return alpha ? "raw4" : "raw4a";
- else if (space == CIEXYZ_NONLINEAR && encoding == FLOAT)
- return alpha ? "raw4 f" : "raw4a f";
- else if (space == SRGB_NONLINEAR && encoding == DOUBLE)
- return alpha ? "raw5" : "raw5a";
- else if (space == SRGB_NONLINEAR && encoding == FLOAT)
- return alpha ? "raw5 f" : "raw5a f";
- else if (space == SRGB && encoding == DOUBLE)
- return alpha ? "raw6" : "raw6a";
- else if (space == SRGB && encoding == FLOAT)
- return alpha ? "raw6 f" : "raw6a f";
+ if (level == 0 && encoding == UINT16) return "raw0";
+ else if (level == 1 && encoding == UINT16) return "raw1";
+ else if (level == 2 && encoding == UINT16) return alpha ? "raw2a" : …
+ else if (level == 3 && encoding == DOUBLE) return alpha ? "raw3a" : …
+ else if (level == 3 && encoding == FLOAT) return alpha ? "raw3a f" : …
+ else if (level == 4 && encoding == DOUBLE) return alpha ? "raw4a" : …
+ else if (level == 4 && encoding == FLOAT) return alpha ? "raw4a f" : …
+ else if (level == 5 && encoding == DOUBLE) return alpha ? "raw5a" : …
+ else if (level == 5 && encoding == FLOAT) return alpha ? "raw5a f" : …
+ else if (level < 0 && space == CIEXYZ && alpha == UNPREMULTIPLIED)
+ return encoding == FLOAT ? "xyza f" : encoding == DOUBLE ? "xy…
else
return specified;
}
diff --git a/src/stream.h b/src/stream.h
@@ -65,7 +65,6 @@ enum dimension {
enum colour_space {
CIEXYZ,
- CIEXYZ_NONLINEAR,
YUV_NONLINEAR,
SRGB_NONLINEAR,
SRGB
@@ -88,9 +87,9 @@ enum encoding {
};
enum endian {
- HOST_ENDIAN,
- LITTLE_ENDIAN,
- BIG_ENDIAN /* not used */
+ HOST,
+ LITTLE,
+ BIG /* not used */
};
struct stream {
diff --git a/src/util/colour.h b/src/util/colour.h
@@ -57,68 +57,68 @@ SRGB_DECODE(float, _f, f)
MATRIX_MULTIPLY_FUNCTION(FUNCTION_BASE##_f, float, __VA_ARGS__)
MATRIX_MULTIPLY_FUNCTIONS(yuv_to_srgb,
- 1,
- 0.00028328010485821202317155420580263580632163211703,
- 1.14070449590558520291949662350816652178764343261719,
- 1,
- -0.3963088666949721172727549856062978506088256835937…
- -0.5810736428822822485784627133398316800594329833984…
- 1,
- 2.03990003507541306504435851820744574069976806640625,
- 0.00017179031692307700847528739718228507626918144524)
+ 1,
+ 0.00028328010485821202317155420580263580632163211703,
+ 1.14070449590558520291949662350816652178764343261719,
+ 1,
+ -0.3963088666949721172727549856062978506088256835937…
+ -0.5810736428822822485784627133398316800594329833984…
+ 1,
+ 2.03990003507541306504435851820744574069976806640625,
+ 0.00017179031692307700847528739718228507626918144524)
MATRIX_MULTIPLY_FUNCTIONS(srgb_to_yuv,
- 0.299, 0.587, 0.114,
- -0.1466275659824047006285496763666742481291294097900…
- -0.2877158683610296363575287159619620069861412048339…
- 0.4343434343434343647416540079575497657060623168945…
- 0.6145689257722452003562807476555462926626205444335…
- -0.5145228215767635449040540152054745703935623168945…
- -0.1000461041954817803523170027801825199276208877563…
+ 0.299, 0.587, 0.114,
+ -0.1466275659824047006285496763666742481291294097900…
+ -0.2877158683610296363575287159619620069861412048339…
+ 0.4343434343434343647416540079575497657060623168945…
+ 0.6145689257722452003562807476555462926626205444335…
+ -0.5145228215767635449040540152054745703935623168945…
+ -0.1000461041954817803523170027801825199276208877563…
MATRIX_MULTIPLY_FUNCTIONS(ciexyz_to_srgb,
- 3.240446254647737500675930277794,
- -1.537134761820080575134284117667,
- -0.498530193022728718155178739835,
- -0.969266606244679751469561779231,
- 1.876011959788370209167851498933,
- 0.041556042214430065351304932619,
- 0.055643503564352832235773149705,
- -0.204026179735960239147729566866,
- 1.057226567722703292062647051353)
+ 3.240446254647737500675930277794,
+ -1.537134761820080575134284117667,
+ -0.498530193022728718155178739835,
+ -0.969266606244679751469561779231,
+ 1.876011959788370209167851498933,
+ 0.041556042214430065351304932619,
+ 0.055643503564352832235773149705,
+ -0.204026179735960239147729566866,
+ 1.057226567722703292062647051353)
MATRIX_MULTIPLY_FUNCTIONS(srgb_to_ciexyz,
- 0.412457445582367576708548995157,
- 0.357575865245515878143578447634,
- 0.180437247826399665973085006954,
- 0.212673370378408277403536885686,
- 0.715151730491031756287156895269,
- 0.072174899130559869164791564344,
- 0.019333942761673460208893260415,
- 0.119191955081838593666354597644,
- 0.950302838552371742508739771438)
+ 0.412457445582367576708548995157,
+ 0.357575865245515878143578447634,
+ 0.180437247826399665973085006954,
+ 0.212673370378408277403536885686,
+ 0.715151730491031756287156895269,
+ 0.072174899130559869164791564344,
+ 0.019333942761673460208893260415,
+ 0.119191955081838593666354597644,
+ 0.950302838552371742508739771438)
MATRIX_MULTIPLY_FUNCTIONS(scaled_yuv_to_ciexyz,
- 0.0000145032510666709863215648179668448847223771736…
- 0.0000034558679063934273909322863332915787282217934…
- 0.0000040092339863055289348511139868591612867021467…
- 0.0000152590218966964183704062424373759654372406657…
- -0.0000020772281440939065361454742703051223884358478…
- -0.0000026389860769230541030240782401916632693428255…
- 0.0000166144615304170882542564302575271995010552927…
- 0.0000288592575261911806914962713710437469671887811…
- -0.0000007178108687576917952650134256697977974681634…
+ 0.0000145032510666709863215648179668448847223771736…
+ 0.0000034558679063934273909322863332915787282217934…
+ 0.0000040092339863055289348511139868591612867021467…
+ 0.0000152590218966964183704062424373759654372406657…
+ -0.0000020772281440939065361454742703051223884358478…
+ -0.0000026389860769230541030240782401916632693428255…
+ 0.0000166144615304170882542564302575271995010552927…
+ 0.0000288592575261911806914962713710437469671887811…
+ -0.0000007178108687576917952650134256697977974681634…
MATRIX_MULTIPLY_FUNCTIONS(ciexyz_to_scaled_yuv,
- 26625.38231027395886485464870929718017578125,
- 40524.0090949436053051613271236419677734375,
- -271.5313105642117079696618020534515380859375,
- -11278.3751445417292416095733642578125,
- -26409.91773157499847002327442169189453125,
- 34100.5706543184860493056476116180419921875,
- 162829.60100012840121053159236907958984375,
- -123829.313212639070115983486175537109375,
- -28411.65702312920984695665538311004638671875)
+ 26625.38231027395886485464870929718017578125,
+ 40524.0090949436053051613271236419677734375,
+ -271.5313105642117079696618020534515380859375,
+ -11278.3751445417292416095733642578125,
+ -26409.91773157499847002327442169189453125,
+ 34100.5706543184860493056476116180419921875,
+ 162829.60100012840121053159236907958984375,
+ -123829.313212639070115983486175537109375,
+ -28411.65702312920984695665538311004638671875)
#undef MATRIX_MULTIPLY_FUNCTIONS
#undef MATRIX_MULTIPLY_FUNCTION
diff --git a/src/video-math.h b/src/video-math.h
@@ -139,19 +139,19 @@ degcos_f(float u)
#define htole(A) (_Generic((A),\
uint8_t: (A),\
int8_t: (uint8_t)(A),\
- uint16_t: htole16(A),\
+ uint16_t: htole16((uint16_t)(A)),\
int16_t: (uint16_t)htole16((uint16_t)(A)),\
- uint32_t: htole32(A),\
+ uint32_t: htole32((uint32_t)(A)),\
int32_t: (uint32_t)htole32((uint32_t)(A)),\
- uint64_t: htole64(A),\
+ uint64_t: htole64((uint64_t)(A)),\
int64_t: (uint64_t)htole64((uint64_t)(A))))
#define letoh(A) (_Generic((A),\
uint8_t: (A),\
int8_t: (uint8_t)(A),\
- uint16_t: le16toh(A),\
+ uint16_t: le16toh((uint16_t)(A)),\
int16_t: (uint16_t)le16toh((uint16_t)(A)),\
- uint32_t: le32toh(A),\
+ uint32_t: le32toh((uint32_t)(A)),\
int32_t: (uint32_t)le32toh((uint32_t)(A)),\
- uint64_t: le64toh(A),\
+ uint64_t: le64toh((uint64_t)(A)),\
int64_t: (uint64_t)le64toh((uint64_t)(A))))
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.