aboutsummaryrefslogtreecommitdiffstats
path: root/src/blind-convert.c
diff options
context:
space:
mode:
authorMattias Andrée <maandree@kth.se>2017-09-23 19:14:42 +0200
committerMattias Andrée <maandree@kth.se>2017-09-23 19:14:42 +0200
commit2b646382a5745b65d32e6bc66b9cf41149673c8c (patch)
tree72f2eabe8614bb4ac7ae487ef0ddebff11809aff /src/blind-convert.c
parentblind-to-video manpage: transparent videos (diff)
downloadblind-2b646382a5745b65d32e6bc66b9cf41149673c8c.tar.gz
blind-2b646382a5745b65d32e6bc66b9cf41149673c8c.tar.bz2
blind-2b646382a5745b65d32e6bc66b9cf41149673c8c.tar.xz
Fix conversion of Y value
Signed-off-by: Mattias Andrée <maandree@kth.se>
Diffstat (limited to 'src/blind-convert.c')
-rw-r--r--src/blind-convert.c36
1 files changed, 18 insertions, 18 deletions
diff --git a/src/blind-convert.c b/src/blind-convert.c
index 8f14367..fd4240d 100644
--- 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) * a / max + 16L * 256L);
- buf[j + 1] = (uint16_t)(((long int)(buf[i + 1]) - 128L * 256L) * a / max + 128L * 256L);
- buf[j + 2] = (uint16_t)(((long int)(buf[i + 2]) - 128L * 256L) * a / max + 128L * 256L);
+ buf[j + 0] = (uint16_t)(((long int)(buf[i + 0]) - 0x1001L) * a / ymax + 0x1001L);
+ buf[j + 1] = (uint16_t)(((long int)(buf[i + 1]) - 0x8000L) * a / max + 0x8000L);
+ buf[j + 2] = (uint16_t)(((long int)(buf[i + 2]) - 0x8000L) * a / max + 0x8000L);
}
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]) - 16L * 256L) / max;\
- out[i + 1] = (TYPE)((long int)(in[i + 1]) - 128L * 256L) / max;\
- out[i + 2] = (TYPE)((long int)(in[i + 2]) - 128L * 256L) / max;\
+ out[i + 0] = (TYPE)((long int)(in[i + 0]) - 0x1001L) / ymax;\
+ out[i + 1] = (TYPE)((long int)(in[i + 1]) - 0x8000L) / max;\
+ out[i + 2] = (TYPE)((long int)(in[i + 2]) - 0x8000L) / max;\
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[i - 1 - WITH_ALPHA]) - 128L * 256L) / max;\
- out[i - 2 - WITH_ALPHA] = (TYPE)((long int)(in[i - 2 - WITH_ALPHA]) - 128L * 256L) / max;\
- out[i - 3 - WITH_ALPHA] = (TYPE)((long int)(in[i - 3 - WITH_ALPHA]) - 16L * 256L) / max;\
+ out[i - 1 - WITH_ALPHA] = (TYPE)((long int)(in[i - 1 - WITH_ALPHA]) - 0x8000L) / max;\
+ out[i - 2 - WITH_ALPHA] = (TYPE)((long int)(in[i - 2 - WITH_ALPHA]) - 0x8000L) / max;\
+ out[i - 3 - WITH_ALPHA] = (TYPE)((long int)(in[i - 3 - WITH_ALPHA]) - 0x1001L) / ymax;\
}\
}\
} while (0)
@@ -136,13 +136,13 @@ static void raw2a_to_raw3a_f (uint16_t *in, float *out, size_t n) { RAW2_TO_RAW
#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, size_t n) { RAW2_TO_RAW
v = (long int)(in[i - 1] * max);\
out[i - 1] = (uint16_t)CLIP(0, v, 0xFFFFL); \
}\
- v = (long int)(in[i - 1 - WITH_ALPHA] * max) + 128L * 256L;\
- u = (long int)(in[i - 2 - WITH_ALPHA] * max) + 128L * 256L;\
- y = (long int)(in[i - 3 - WITH_ALPHA] * max) + 16L * 256L;\
+ v = (long int)(in[i - 1 - WITH_ALPHA] * max) + 0x8000L;\
+ u = (long int)(in[i - 2 - WITH_ALPHA] * max) + 0x8000L;\
+ y = (long int)(in[i - 3 - WITH_ALPHA] * ymax) + 0x1001L;\
out[i - 1 - WITH_ALPHA] = (uint16_t)CLIP(0, v, 0xFFFFL);\
out[i - 2 - WITH_ALPHA] = (uint16_t)CLIP(0, u, 0xFFFFL);\
out[i - 3 - WITH_ALPHA] = (uint16_t)CLIP(0, y, 0xFFFFL);\