Introduction
Introduction Statistics Contact Development Disclaimer Help
Fix conversion of Y value - blind - suckless command-line video editing utility
git clone git://git.suckless.org/blind
Log
Files
Refs
README
LICENSE
---
commit 2b646382a5745b65d32e6bc66b9cf41149673c8c
parent 233e70bd856bb1b90844b51b0e7b3534e804c4ef
Author: Mattias Andrée <[email protected]>
Date: Sat, 23 Sep 2017 19:14:42 +0200
Fix conversion of Y value
Signed-off-by: Mattias Andrée <[email protected]>
Diffstat:
M TODO | 3 +--
M src/blind-convert.c | 36 ++++++++++++++++-------------…
M src/blind-from-video.c | 14 +++++++-------
M src/blind-to-video.c | 12 ++++++------
M src/util/colour.h | 12 ++++++------
5 files changed, 38 insertions(+), 39 deletions(-)
---
diff --git a/TODO b/TODO
@@ -1,5 +1,4 @@
-Why does blind-from-video produce darker images than blind-from-image and
-why does blind-to-video produce brighter images than blind-to-image?
+Conversion either from or to video changes the brightness of the primitives (b…
blind-transform affine transformation by matrix multiplication,…
improve quality on downscaling (pixels' neighb…
diff --git a/src/blind-convert.c b/src/blind-convert.c
@@ -47,12 +47,12 @@ static size_t
remove_alpha_u16(uint16_t *buf, size_t n)
{
size_t i, j;
- long int a, max = (long int)UINT16_MAX;
+ long int a, max = (long int)UINT16_MAX, ymax = 0xDAF4L;
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)…
+ buf[j + 0] = (uint16_t)(((long int)(buf[i + 0]) - 0x1001L) * a…
+ buf[j + 1] = (uint16_t)(((long int)(buf[i + 1]) - 0x8000L) * a…
+ buf[j + 2] = (uint16_t)(((long int)(buf[i + 2]) - 0x8000L) * a…
}
return j;
}
@@ -108,12 +108,12 @@ raw1_to_raw0(uint16_t *buf, size_t n)
#define RAW2_TO_RAW3(TYPE, WITH_ALPHA)\
do {\
size_t i;\
- TYPE max = (TYPE)UINT16_MAX;\
+ TYPE max = (TYPE)UINT16_MAX, ymax = (TYPE)0xDAF4;\
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…
+ out[i + 0] = (TYPE)((long int)(in[i + 0]) - 0x…
+ out[i + 1] = (TYPE)((long int)(in[i + 1]) - 0x…
+ out[i + 2] = (TYPE)((long int)(in[i + 2]) - 0x…
if (WITH_ALPHA)\
out[i + 3] = (TYPE)(in[i + 3]) / max;\
}\
@@ -121,9 +121,9 @@ raw1_to_raw0(uint16_t *buf, size_t n)
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…
+ 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)
@@ -136,13 +136,13 @@ static void raw2a_to_raw3a_f (uint16_t *in, float *out, …
#define RAW3_TO_RAW2(TYPE, WITH_ALPHA)\
do {\
size_t i;\
- TYPE max = (TYPE)UINT16_MAX;\
+ TYPE max = (TYPE)UINT16_MAX, ymax = (TYPE)0xDAF4;\
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;\
+ y = (long int)(in[i + 0] * ymax) + 0x1001L;\
+ u = (long int)(in[i + 1] * max) + 0x8000L;\
+ v = (long int)(in[i + 2] * max) + 0x8000L;\
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);\
@@ -157,9 +157,9 @@ static void raw2a_to_raw3a_f (uint16_t *in, float *out, si…
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) +…
+ 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] * ymax) …
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,…
diff --git a/src/blind-from-video.c b/src/blind-from-video.c
@@ -75,7 +75,7 @@ get_metadata(char *file, size_t *width, size_t *height)
do {\
typedef TYPE pixel_t[4];\
size_t i, ptr;\
- TYPE y, u, v, max = (TYPE)UINT16_MAX;\
+ TYPE y, u, v, max = (TYPE)UINT16_MAX, ymax = (TYPE)0xDAF4;\
TYPE r, g, b;\
pixel_t pixels[1024];\
uint16_t *pix;\
@@ -83,9 +83,9 @@ get_metadata(char *file, size_t *width, size_t *height)
for (ptr = i = 0; ptr < n; ptr += 8) {\
pix = (uint16_t *)(buf + ptr);\
pixels[i][3] = 1;\
- y = (TYPE)((long int)(le16toh(pix[1])) - 16L …
- u = (TYPE)((long int)(le16toh(pix[2])) - 128L …
- v = (TYPE)((long int)(le16toh(pix[3])) - 128L …
+ y = (TYPE)((long int)(le16toh(pix[1])) - 0x100…
+ u = (TYPE)((long int)(le16toh(pix[2])) - 0x800…
+ v = (TYPE)((long int)(le16toh(pix[3])) - 0x800…
scaled_yuv_to_ciexyz(y, u, v, pixels[i] + 0,\
pixels[i] + 1, pixels[i] …
if (++i == 1024) {\
@@ -97,9 +97,9 @@ get_metadata(char *file, size_t *width, size_t *height)
for (ptr = i = 0; ptr < n; ptr += 8) {\
pix = (uint16_t *)(buf + ptr);\
pixels[i][3] = le16toh(pix[0]) / max;\
- y = (TYPE)((long int)le16toh(pix[1]) - 16L * …
- u = (TYPE)((long int)le16toh(pix[2]) - 128L * …
- v = (TYPE)((long int)le16toh(pix[3]) - 128L * …
+ y = (TYPE)((long int)le16toh(pix[1]) - 0x1001L…
+ u = (TYPE)((long int)le16toh(pix[2]) - 0x8000L…
+ v = (TYPE)((long int)le16toh(pix[3]) - 0x8000L…
yuv_to_srgb(y, u, v, &r, &g, &b);\
r = srgb_decode(r);\
g = srgb_decode(g);\
diff --git a/src/blind-to-video.c b/src/blind-to-video.c
@@ -99,9 +99,9 @@ PROCESS(struct stream *stream, size_t n)
for (ptr = 0; ptr < n; ptr += 4 * sizeof(TYPE)) {
pixel = (TYPE *)(buf + ptr);
ciexyz_to_scaled_yuv(pixel[0], pixel[1], pixel[2], &r,…
- y = (long int)r + 16L * 256L;
- u = (long int)g + 128L * 256L;
- v = (long int)b + 128L * 256L;
+ y = (long int)r + 0x1001L;
+ u = (long int)g + 0x8000L;
+ v = (long int)b + 0x8000L;
*pixels++ = 0xFFFFU;
*pixels++ = htole((uint16_t)CLIP(0, y, 0xFFFFL));
*pixels++ = htole((uint16_t)CLIP(0, u, 0xFFFFL));
@@ -118,9 +118,9 @@ PROCESS(struct stream *stream, size_t n)
g = srgb_encode(g);
b = srgb_encode(b);
srgb_to_yuv(r, g, b, pixel + 0, pixel + 1, pixel + 2);
- y = (long int)(pixel[0] * 0xFFFFL) + 16L * 256L;
- u = (long int)(pixel[1] * 0xFFFFL) + 128L * 256L;
- v = (long int)(pixel[2] * 0xFFFFL) + 128L * 256L;
+ y = (long int)(pixel[0] * 0xDAF4L) + 0x1001L;
+ u = (long int)(pixel[1] * 0xFFFFL) + 0x8000L;
+ v = (long int)(pixel[2] * 0xFFFFL) + 0x8000L;
*pixels++ = htole((uint16_t)CLIP(0, a, 0xFFFFL));
*pixels++ = htole((uint16_t)CLIP(0, y, 0xFFFFL));
*pixels++ = htole((uint16_t)CLIP(0, u, 0xFFFFL));
diff --git a/src/util/colour.h b/src/util/colour.h
@@ -99,20 +99,20 @@ MATRIX_MULTIPLY_FUNCTIONS(srgb_to_ciexyz,
0.950302838552371742508739771438)
MATRIX_MULTIPLY_FUNCTIONS(scaled_yuv_to_ciexyz,
- 0.0000145032510666709863215648179668448847223771736…
+ 0.0000145032510666709863215648179668448847223771736…
0.0000034558679063934273909322863332915787282217934…
0.0000040092339863055289348511139868591612867021467…
- 0.0000152590218966964183704062424373759654372406657…
+ 0.0000152590218966964183704062424373759654372406657…
-0.0000020772281440939065361454742703051223884358478…
-0.0000026389860769230541030240782401916632693428255…
- 0.0000166144615304170882542564302575271995010552927…
+ 0.0000166144615304170882542564302575271995010552927…
0.0000288592575261911806914962713710437469671887811…
-0.0000007178108687576917952650134256697977974681634…
MATRIX_MULTIPLY_FUNCTIONS(ciexyz_to_scaled_yuv,
- 26625.38231027395886485464870929718017578125,
- 40524.0090949436053051613271236419677734375,
- -271.5313105642117079696618020534515380859375,
+ 26625.38231027395886485464870929718017578125 * 0…
+ 40524.0090949436053051613271236419677734375 * 0…
+ -271.5313105642117079696618020534515380859375 * 0…
-11278.3751445417292416095733642578125,
-26409.91773157499847002327442169189453125,
34100.5706543184860493056476116180419921875,
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.