[babl] babl: lut, tidy u8 code - disable u16/half variant
- From: Øyvind "pippin" Kolås <ok src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [babl] babl: lut, tidy u8 code - disable u16/half variant
- Date: Mon, 24 Jan 2022 00:57:39 +0000 (UTC)
commit 4f83dbf8a89f7c9a5e2a1754980b702de23380aa
Author: Øyvind Kolås <pippin gimp org>
Date: Mon Jan 24 01:57:20 2022 +0100
babl: lut, tidy u8 code - disable u16/half variant
babl/babl-fish-path.c | 61 +++++++++++++++++++++++++++++++++------------------
1 file changed, 40 insertions(+), 21 deletions(-)
---
diff --git a/babl/babl-fish-path.c b/babl/babl-fish-path.c
index 7d9e825..52e89a4 100644
--- a/babl/babl-fish-path.c
+++ b/babl/babl-fish-path.c
@@ -656,8 +656,11 @@ babl_fish_path2 (const Babl *source,
if (source->format.space != destination->format.space &&
(source->format.model->flags & BABL_MODEL_FLAG_ASSOCIATED)==0 &&
(
- (babl->fish_path.source_bpp == 4 && babl->fish_path.dest_bpp == 4) ||
- (babl->fish_path.source_bpp == 8 && babl->fish_path.dest_bpp == 4))
+ (babl->fish_path.source_bpp == 4 && babl->fish_path.dest_bpp == 4)
+ // XXX 16bit code paths not enabled yet.
+ //
+ //|| (babl->fish_path.source_bpp == 8 && babl->fish_path.dest_bpp == 4)
+ )
)
{
if ((source->format.model->flags & BABL_MODEL_FLAG_ASSOCIATED)==0)
@@ -719,8 +722,15 @@ babl_fish_path_process (const Babl *babl,
{
uint32_t *lut = (uint32_t*)babl->fish_path.u8_lut;
((Babl*)babl)->fish.pixels += n;
+
+
if (!lut && babl->fish.pixels > 256 * 128)
{
+#if 0
+ fprintf (stderr, "building LUT for %s to %s\n",
+ babl_get_name (babl->conversion.source),
+ babl_get_name (babl->conversion.destination));
+#endif
lut = malloc (256 * 256 * 256 * 4);
if (babl->fish_path.source_bpp == 8)
{
@@ -728,14 +738,21 @@ babl_fish_path_process (const Babl *babl,
for (int o = 0; o < 256 * 256 * 256; o++)
{
uint64_t v = o;
- int v0 = v & 0xff;
- int v1 = v & 0xff00;
- int v2 = v & 0xff0000;
- v0 <<= 8;
- v1 <<= 16;
- v2 <<= 24;
- v = v0||v1||v2;
- lut_in[o] = v | (uint64_t)0xffff000000000000;
+ uint64_t v0 = v & 0xff;
+ uint64_t v1 = (v & 0xff00) >> 8;
+ uint64_t v2 = (v & 0xff0000) >> 16;
+
+#if 1
+ // gives same results... but purer white is better?
+ v0 = (v0 << 8) | (((v0&1)?0xff:0)<<0);
+ v1 = (v1 << 24) | (((v1&1)?(uint64_t)0xff:0)<<16);
+ v2 = (v2 << 40) | (((v2&1)?(uint64_t)0xff:0)<<32);
+#else
+ v0 = (v0 << 8);
+ v1 = (v1 << 24);
+ v2 = (v2 << 40);
+#endif
+ lut_in[o] = v;
}
process_conversion_path (babl->fish_path.conversion_list,
@@ -749,7 +766,7 @@ babl_fish_path_process (const Babl *babl,
else
{
for (int o = 0; o < 256 * 256 * 256; o++)
- lut[o] = o | 0xff000000;
+ lut[o] = o;
process_conversion_path (babl->fish_path.conversion_list,
lut,
babl->fish_path.source_bpp,
@@ -772,8 +789,9 @@ babl_fish_path_process (const Babl *babl,
}
if (lut)
{
- if (babl->fish_path.source_bpp == 8)
- {
+ if (babl->fish_path.source_bpp == 8) // 16 bit, not working yet
+ { // half and u16 need their
+ // own separate handling
uint32_t *src = (uint32_t*)source;
uint32_t *dst = (uint32_t*)destination;
lut = (uint32_t*)babl->fish_path.u8_lut;
@@ -781,13 +799,15 @@ babl_fish_path_process (const Babl *babl,
{
uint32_t col_a = *src++;
uint32_t col_b = *src++;
- uint32_t col, alpha;
- col_a = col_a & 0xff00ff00;
- col_b = (col_b & 0xff00ff00)>>8;
+ uint32_t col;
+
+ uint32_t c_ar = ((col_a & 0xff000000)|
+ ((col_a & 0x0000ff00) << 8));
+ uint32_t c_gb = ((col_b & 0xff000000)|
+ ((col_b & 0x0000ff00) << 8))>>16;
+ col = c_ar|c_gb;
- col = col_a | col_b;
- alpha = col & 0xff000000;
- *dst++ = lut[col & 0xffffff] | alpha;
+ *dst++ = lut[col & 0xffffff] | (col & 0xff000000);
}
}
else
@@ -798,8 +818,7 @@ babl_fish_path_process (const Babl *babl,
while (n--)
{
uint32_t col = *src++;
- uint32_t alpha = col & 0xff000000;
- *dst++ = lut[col & 0xffffff] | alpha;
+ *dst++ = lut[col & 0xffffff] | (col & 0xff000000);
}
}
return;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]