Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • GNOME/babl
  • lillolollo/babl
  • ajonsson/babl
3 results
Show changes
Commits on Source (10)
Showing with 427 additions and 369 deletions
......@@ -4,7 +4,7 @@ cache:
.build:
stage: build
image: archlinux:base-20210214.0.15477
image: archlinux:latest
variables:
PACMAN_CACHE: $CI_PROJECT_DIR/_pacman_cache
artifacts:
......
......@@ -4,6 +4,9 @@ the news section both in the README and the webpage.
-->
2022-02-21 babl-0.1.90 </dt><dd>
Fixes for avoiding load of wrong SIMD extensions.
</dd><dt>
2022-02-21 babl-0.1.90 </dt><dd>
Automatic LUT creation for conversions from &lt;24bpp of colorant componants,
SIMD builds for x86_64 micro-architecture levels and ARM neon, pre-defined
CIE Lab u8 and CIE Lab u16 formats. Fix bug of an unlocked non-locked mutex,
......
......@@ -247,7 +247,8 @@ babl_extension_load (const char *path)
}
static void
babl_extension_load_dir (const char *base_path)
babl_extension_load_dir (const char *base_path,
const char **exclusion_patterns)
{
DIR *dir;
......@@ -269,7 +270,12 @@ babl_extension_load_dir (const char *base_path)
if ((extension = strrchr (dentry->d_name, '.')) != NULL &&
!strcmp (extension, SHREXT))
{
babl_extension_load (path);
int excluded = 0;
for (int i = 0; exclusion_patterns[i]; i++)
if (strstr (path, exclusion_patterns[i]))
excluded = 1;
if (!excluded)
babl_extension_load (path);
}
babl_free (path);
......@@ -316,7 +322,8 @@ expand_path (char *path)
/* parse the provided colon seperated list of paths to search
*/
void
babl_extension_load_dir_list (const char *dir_list)
babl_extension_load_dir_list (const char *dir_list,
const char **exclusion_patterns)
{
int eos = 0;
const char *src;
......@@ -339,7 +346,7 @@ babl_extension_load_dir_list (const char *dir_list)
{
char *expanded_path = expand_path (path);
if (expanded_path) {
babl_extension_load_dir (expanded_path);
babl_extension_load_dir (expanded_path, exclusion_patterns);
babl_free (expanded_path);
}
}
......
......@@ -28,7 +28,8 @@ BABL_CLASS_DECLARE (extension);
*/
const Babl * babl_extension (const char *name);
void babl_extension_load_dir_list (const char *dir_list);
void babl_extension_load_dir_list (const char *dir_list,
const char **exclusion_patterns);
typedef struct
{
......
......@@ -127,12 +127,13 @@ babl_dir_list (void)
}
static void simd_init (void);
static const char **simd_init (void);
void
babl_init (void)
{
const char **exclusion_pattern;
babl_cpu_accel_set_use (1);
simd_init ();
exclusion_pattern = simd_init ();
if (ref_count++ == 0)
{
......@@ -155,7 +156,7 @@ babl_init (void)
babl_sanity ();
dir_list = babl_dir_list ();
babl_extension_load_dir_list (dir_list);
babl_extension_load_dir_list (dir_list, exclusion_pattern);
babl_free (dir_list);
if (!getenv ("BABL_INHIBIT_CACHE"))
......@@ -263,12 +264,14 @@ babl_trc_new_arm_neon (const char *name,
#endif
static void simd_init (void)
static const char **simd_init (void)
{
static const char *exclude[] = {"neon-", "x86-64-v3", "x86-64-v2", NULL};
#ifdef ARCH_X86_64
BablCpuAccelFlags accel = babl_cpu_accel_get_support ();
if ((accel & BABL_CPU_ACCEL_X86_64_V3) == BABL_CPU_ACCEL_X86_64_V3)
{
static const char *exclude[] = {NULL};
babl_base_init = babl_base_init_x86_64_v2; /// !!
// this is correct,
// it performs better
......@@ -276,24 +279,40 @@ static void simd_init (void)
babl_trc_new = babl_trc_new_x86_64_v2;
babl_trc_lookup_by_name = babl_trc_lookup_by_name_x86_64_v2;
_babl_space_add_universal_rgb = _babl_space_add_universal_rgb_x86_64_v3;
return exclude;
}
else if ((accel & BABL_CPU_ACCEL_X86_64_V2) == BABL_CPU_ACCEL_X86_64_V2)
{
static const char *exclude[] = {"x86-64-v3-", NULL};
babl_base_init = babl_base_init_x86_64_v2;
babl_trc_new = babl_trc_new_x86_64_v2;
babl_trc_lookup_by_name = babl_trc_lookup_by_name_x86_64_v2;
_babl_space_add_universal_rgb = _babl_space_add_universal_rgb_x86_64_v2;
return exclude;
}
else
{
static const char *exclude[] = {"x86-64-v3-", "x86-64-v2-", NULL};
return exclude;
}
#endif
#ifdef ARCH_ARM
BablCpuAccelFlags accel = babl_cpu_accel_get_support ();
if ((accel & BABL_CPU_ACCEL_ARM_NEON) == BABL_CPU_ACCEL_ARM_NEON)
{
static const char *exclude[] = {NULL};
babl_base_init = babl_base_init_arm_neon;
babl_trc_new = babl_trc_new_arm_neon;
babl_trc_lookup_by_name = babl_trc_lookup_by_name_arm_neon;
_babl_space_add_universal_rgb = _babl_space_add_universal_rgb_arm_neon;
return exclude;
}
else
{
static const char *exclude[] = {"arm-neon-", NULL};
return exclude;
}
#endif
return exclude;
}
......@@ -52,13 +52,13 @@ babl_trc_lut_from_linear (const Babl *trc_,
if (entry >= trc->lut_size -1)
{
entry = trc->lut_size - 1;
diff = 0.0;
diff = 0.0f;
}
else if (entry < 0) entry = 0;
if (diff > 0.0)
if (diff > 0.0f)
{
ret = trc->inv_lut[entry] * (1.0 - diff) + trc->inv_lut[entry+1] * diff;
ret = trc->inv_lut[entry] * (1.0f - diff) + trc->inv_lut[entry+1] * diff;
}
else
{
......@@ -81,9 +81,9 @@ babl_trc_lut_to_linear (const Babl *trc_,
if (entry >= trc->lut_size) entry = trc->lut_size - 1;
else if (entry < 0) entry = 0;
if (diff > 0.0 && entry < trc->lut_size - 1)
if (diff > 0.0f && entry < trc->lut_size - 1)
{
ret = trc->lut[entry] * (1.0 - diff) + trc->lut[entry+1] * diff;
ret = trc->lut[entry] * (1.0f - diff) + trc->lut[entry+1] * diff;
}
else
{
......@@ -189,13 +189,13 @@ _babl_trc_formula_srgb_from_linear (const Babl *trc_,
{
float v = _babl_trc_gamma_from_linear ((Babl *) trc, x - f);
v = (v-b)/a;
if (v < 0.0 || v >= 0.0)
if (v < 0.0f || v >= 0.0f)
return v;
return 0.0;
return 0.0f;
}
if (c > 0.0)
if (c > 0.0f)
return (x - e) / c;
return 0.0;
return 0.0f;
}
static inline float
......@@ -231,10 +231,10 @@ _babl_trc_formula_cie_from_linear (const Babl *trc_,
{
float v = _babl_trc_gamma_from_linear ((Babl *) trc, x - c);
v = (v-b)/a;
if (v < 0.0 || v >= 0.0)
if (v < 0.0f || v >= 0.0f)
return v;
}
return 0.0;
return 0.0f;
}
static inline float
......@@ -479,7 +479,7 @@ BABL_SIMD_SUFFIX (babl_trc_new) (const char *name,
for (k = 0; k < 16; k++)
{
double guess = (min + max) / 2;
float reversed_index = babl_trc_lut_to_linear (BABL(&trc_db[i]), guess) * (n_lut-1.0);
float reversed_index = babl_trc_lut_to_linear (BABL(&trc_db[i]), guess) * (n_lut-1.0f);
if (reversed_index < j)
{
......
......@@ -98,7 +98,7 @@ static inline float babl_frexpf(float x, int *e)
if (!ee) {
if (x) {
x = babl_frexpf(x*18446744073709551616.0, e);
x = babl_frexpf(x*18446744073709551616.0f, e);
*e -= 64;
} else *e = 0;
return x;
......@@ -130,11 +130,12 @@ static inline float babl_frexpf(float x, int *e)
static inline float
init_newtonf (float x, float exponent, float c0, float c1, float c2)
{
#define fM_LN2 0.69314718055994530942f
int iexp = 0;
float y = babl_frexpf(x, &iexp);
y = 2*y+(iexp-2);
c1 *= M_LN2*exponent;
c2 *= M_LN2*M_LN2*exponent*exponent;
c1 *= fM_LN2*exponent;
c2 *= fM_LN2*fM_LN2*exponent*exponent;
return y = c0 + c1*y + c2*y*y;
}
......
......@@ -59,7 +59,7 @@ static inline float
babl_epsilon_for_zero_float (float value)
{
return value * (value > BABL_ALPHA_FLOOR_F || value < -BABL_ALPHA_FLOOR_F) +
BABL_ALPHA_FLOOR * (value <= BABL_ALPHA_FLOOR_F &&
BABL_ALPHA_FLOOR_F * (value <= BABL_ALPHA_FLOOR_F &&
value >= -BABL_ALPHA_FLOOR_F);
}
......
This diff is collapsed.
......@@ -143,10 +143,10 @@ conv_cairo32_rgba8_le (const Babl *conversion,
}
else
{
float falpha = alpha / 255.0;
*dst++ = red / falpha + 0.5;
*dst++ = green / falpha + 0.5;
*dst++ = blue / falpha + 0.5;
float falpha = alpha / 255.0f;
*dst++ = red / falpha + 0.5f;
*dst++ = green / falpha + 0.5f;
*dst++ = blue / falpha + 0.5f;
*dst++ = alpha;
}
}
......@@ -243,9 +243,9 @@ extensions/x86-64-v3-cairo.so 0: cairo-ARGB32 to cairo-RGB24 error:0.002999 cos
int alpha = src[3];
if (alpha)
{
float falpha = (alpha/255.0);
float falpha = (alpha/255.0f);
for (int c = 0; c < 3; c++)
*dst++ = (*src++)/falpha + .5;
*dst++ = (*src++)/falpha + .5f;
}
else
{
......@@ -447,17 +447,17 @@ conv_rgbafloat_cairo32_le (const Babl *conversion,
float green = *fsrc++;
float blue = *fsrc++;
float alpha = *fsrc++;
if (alpha >= 1.0)
if (alpha >= 1.0f)
{
int val = babl_trc_from_linear (trc[2], blue) * 0xff + .0;
int val = babl_trc_from_linear (trc[2], blue) * 0xff;
*cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val;
val = babl_trc_from_linear (trc[1], green) * 0xff + .0;
val = babl_trc_from_linear (trc[1], green) * 0xff;
*cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val;
val = babl_trc_from_linear (trc[0], red) * 0xff + .0;
val = babl_trc_from_linear (trc[0], red) * 0xff;
*cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val;
*cdst++ = 0xff;
}
else if (alpha <= 0.0)
else if (alpha <= 0.0f)
{
(*(uint32_t*)cdst)=0;
cdst+=4;
......@@ -465,13 +465,12 @@ conv_rgbafloat_cairo32_le (const Babl *conversion,
else
{
float balpha = alpha * 0xff;
int val = babl_trc_from_linear (trc[2], blue) * balpha + 0.0;
int val = babl_trc_from_linear (trc[2], blue) * balpha;
*cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val;
val = babl_trc_from_linear (trc[1], green) * balpha + 0.0;
val = babl_trc_from_linear (trc[1], green) * balpha;
*cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val;
val = babl_trc_from_linear (trc[0], red) * balpha + 0.0;
val = babl_trc_from_linear (trc[0], red) * balpha;
*cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val;
balpha+=0.0;
if (balpha > 255)balpha=255;
*cdst++ = balpha;
}
......@@ -495,7 +494,7 @@ conv_yafloat_cairo32_le (const Babl *conversion,
{
float gray = *fsrc++;
float alpha = *fsrc++;
if (alpha >= 1.0)
if (alpha >= 1.0f)
{
int val = babl_trc_from_linear (trc[0], gray) * 0xff;
val = val >= 0xff ? 0xff : val <= 0 ? 0 : val;
......@@ -504,7 +503,7 @@ conv_yafloat_cairo32_le (const Babl *conversion,
*cdst++ = val;
*cdst++ = 0xff;
}
else if (alpha <= 0.0)
else if (alpha <= 0.0f)
{
(*(uint32_t*)cdst)=0;
cdst+=4;
......@@ -537,7 +536,7 @@ conv_yafloat_nl_cairo32_le (const Babl *conversion,
{
float gray = *fsrc++;
float alpha = *fsrc++;
if (alpha >= 1.0)
if (alpha >= 1.0f)
{
int val = gray * 0xff;
val = val >= 0xff ? 0xff : val <= 0 ? 0 : val;
......@@ -546,7 +545,7 @@ conv_yafloat_nl_cairo32_le (const Babl *conversion,
*cdst++ = val;
*cdst++ = 0xff;
}
else if (alpha <= 0.0)
else if (alpha <= 0.0f)
{
(*(uint32_t*)cdst)=0;
cdst+=4;
......
......@@ -146,15 +146,15 @@ babl_lookup_new (BablLookupFunction function,
end = u.f;
}
if (precision <= 0.000005) shift = 0; /* checked for later */
else if (precision <= 0.000010) shift = 8;
else if (precision <= 0.000020) shift = 9;
else if (precision <= 0.000040) shift = 10;
else if (precision <= 0.000081) shift = 11;
else if (precision <= 0.000161) shift = 12;
else if (precision <= 0.000200) shift = 13;
else if (precision <= 0.000324) shift = 14;
else if (precision <= 0.000649) shift = 15;
if (precision <= 0.000005f) shift = 0; /* checked for later */
else if (precision <= 0.000010f) shift = 8;
else if (precision <= 0.000020f) shift = 9;
else if (precision <= 0.000040f) shift = 10;
else if (precision <= 0.000081f) shift = 11;
else if (precision <= 0.000161f) shift = 12;
else if (precision <= 0.000200f) shift = 13;
else if (precision <= 0.000324f) shift = 14;
else if (precision <= 0.000649f) shift = 15;
else shift = 16; /* a bit better than 8bit sRGB quality */
......@@ -162,16 +162,16 @@ babl_lookup_new (BablLookupFunction function,
* causes lookups very close to zero to be passed directly to the
* function instead.
*/
if (start == 0.0)
if (start == 0.0f)
start = precision;
if (end == 0.0)
if (end == 0.0f)
end = -precision;
/* Compute start and */
if (start < 0.0 || end < 0.0)
if (start < 0.0f || end < 0.0f)
{
if (end < 0.0)
if (end < 0.0f)
{
u.f = start;
positive_max = (u.i << LSHIFT) >> shift;
......@@ -301,7 +301,7 @@ conv_rgbaF_linear_rgbAF_gamma (const Babl *conversion,
float green = *fsrc++;
float blue = *fsrc++;
float alpha = *fsrc++;
if (alpha == 1.0)
if (alpha == 1.0f)
{
*fdst++ = linear_to_gamma_2_2_lut (red);
*fdst++ = linear_to_gamma_2_2_lut (green);
......@@ -352,7 +352,7 @@ conv_rgbaF_linear_rgba8_gamma (const Babl *conversion,
*cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val;
val = linear_to_gamma_2_2_lut (blue) * 0xff + 0.5f;
*cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val;
val = alpha * 0xff + 0.5;
val = alpha * 0xff + 0.5f;
*cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val;
}
}
......@@ -374,7 +374,7 @@ conv_rgbaF_linear_rgbA8_gamma (const Babl *conversion,
float green = *fsrc++;
float blue = *fsrc++;
float alpha = *fsrc++;
if (alpha >= 1.0)
if (alpha >= 1.0f)
{
int val = linear_to_gamma_2_2_lut (red) * 0xff + 0.5f;
*cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val;
......@@ -411,7 +411,7 @@ conv_yaF_linear_rgbA8_gamma (const Babl *conversion,unsigned char *src,
{
float gray = *fsrc++;
float alpha = *fsrc++;
if (alpha >= 1.0)
if (alpha >= 1.0f)
{
int val = linear_to_gamma_2_2_lut (gray) * 0xff + 0.5f;
*cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val;
......@@ -419,7 +419,7 @@ conv_yaF_linear_rgbA8_gamma (const Babl *conversion,unsigned char *src,
*cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val;
*cdst++ = 0xff;
}
else if (alpha <= 0.0)
else if (alpha <= 0.0f)
{
*((uint32_t*)(cdst))=0;
cdst+=4;
......@@ -453,7 +453,7 @@ conv_rgbaF_linear_rgbA8_gamma_cairo (const Babl *conversion,unsigned char *src,
float green = *fsrc++;
float blue = *fsrc++;
float alpha = *fsrc++;
if (alpha >= 1.0)
if (alpha >= 1.0f)
{
int val = linear_to_gamma_2_2_lut (blue) * 0xff + 0.5f;
*cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val;
......@@ -494,7 +494,7 @@ conv_rgbAF_linear_rgbAF_gamma (const Babl *conversion,
float blue = *fsrc++;
float alpha = *fsrc++;
if (alpha == 1.0)
if (alpha == 1.0f)
{
*fdst++ = linear_to_gamma_2_2_lut (red);
*fdst++ = linear_to_gamma_2_2_lut (green);
......@@ -503,7 +503,7 @@ conv_rgbAF_linear_rgbAF_gamma (const Babl *conversion,
}
else
{
float alpha_recip = 1.0 / alpha;
float alpha_recip = 1.0f / alpha;
*fdst++ = linear_to_gamma_2_2_lut (red * alpha_recip) * alpha;
*fdst++ = linear_to_gamma_2_2_lut (green * alpha_recip) * alpha;
*fdst++ = linear_to_gamma_2_2_lut (blue * alpha_recip) * alpha;
......@@ -677,10 +677,10 @@ init (void)
float a;
/* tweaking the precision - does impact speed.. */
fast_pow = babl_lookup_new (core_lookup, NULL, 0.0, 1.0, 0.000199);
fast_rpow = babl_lookup_new (core_rlookup, NULL, 0.0, 1.0, 0.000250);
fast_pow = babl_lookup_new (core_lookup, NULL, 0.0f, 1.0f, 0.000199f);
fast_rpow = babl_lookup_new (core_rlookup, NULL, 0.0f, 1.0f, 0.000250f);
for (f = 0.0; f < 1.0; f+= 0.0000001)
for (f = 0.0; f < 1.0f; f+= 0.0000001f)
{
a = linear_to_gamma_2_2_lut (f);
a = gamma_2_2_to_linear_lut (f);
......
......@@ -168,7 +168,7 @@ conv_rgbAF_linear_rgbAF_nonlinear (const Babl *conversion,
}
else
{
float alpha_recip = 1.0 / alpha;
float alpha_recip = 1.0f / alpha;
*fdst++ = babl_trc_from_linear (trc[0], *fsrc++ * alpha_recip) * alpha;
*fdst++ = babl_trc_from_linear (trc[1], *fsrc++ * alpha_recip) * alpha;
*fdst++ = babl_trc_from_linear (trc[2], *fsrc++ * alpha_recip) * alpha;
......@@ -204,7 +204,7 @@ conv_yAF_linear_yAF_nonlinear (const Babl *conversion,
}
else
{
float alpha_recip = 1.0 / alpha;
float alpha_recip = 1.0f / alpha;
*fdst++ = babl_trc_from_linear (trc[0], *fsrc++ * alpha_recip) * alpha;
*fdst++ = *fsrc++;
}
......
......@@ -82,7 +82,7 @@ table_init (void)
float f;
uint32_t s;
} u;
u.f = 0.0;
u.f = 0.0f;
//u.s[0] = 0;
......@@ -91,15 +91,15 @@ table_init (void)
int c;
int cg;
if (u.f <= 0.0)
if (u.f <= 0.0f)
{
c = 0;
cg = 0;
}
else
{
c = (u.f * 255.1619) + 0.5;
cg = (linear_to_gamma_2_2 (u.f) * 255.1619) + 0.5;
c = (u.f * 255.1619f) + 0.5f;
cg = (linear_to_gamma_2_2 (u.f) * 255.1619f) + 0.5f;
if (cg > 255) cg = 255;
if (c > 255) c = 255;
}
......
......@@ -59,17 +59,17 @@ conv_F_8 (const Babl *conversion,
while (n--)
{
float f = ((*(float *) src));
if (f < 0.0)
if (f < 0.0f)
{
*(unsigned char *) dst = 0;
}
else if (f > 1.0)
else if (f > 1.0f)
{
*(unsigned char *) dst = 255;
}
else
{
*(unsigned char *) dst = lrint (f * 255.0);
*(unsigned char *) dst = lrint (f * 255.0f);
}
dst += 1;
src += 4;
......@@ -87,17 +87,17 @@ conv_F_16 (const Babl *conversion,
while (n--)
{
float f = ((*(float *) src));
if (f < 0.0)
if (f < 0.0f)
{
*(unsigned short *) dst = 0;
}
else if (f > 1.0)
else if (f > 1.0f)
{
*(unsigned short *) dst = 65535;
}
else
{
*(unsigned short *) dst = lrint (f * 65535.0);
*(unsigned short *) dst = lrint (f * 65535.0f);
}
dst += 2;
src += 4;
......@@ -116,7 +116,7 @@ conv_8_F (const Babl *conversion,
while (n--)
{
(*(float *) dst) = (*(unsigned char *) src / 255.0);
(*(float *) dst) = (*(unsigned char *) src / 255.0f);
dst += 4;
src += 1;
}
......@@ -649,11 +649,11 @@ conv_rgbaF_rgbA8 (const Babl *conversion,
for (c = 0; c < 3; c++)
{
*(unsigned char *) dst = lrint (((*(float *) src) * alpha) * 255.0);
*(unsigned char *) dst = lrint (((*(float *) src) * alpha) * 255.0f);
dst += 1;
src += 4;
}
*(unsigned char *) dst = lrint (alpha * 255.0);
*(unsigned char *) dst = lrint (alpha * 255.0f);
dst++;
src += 4;
}
......@@ -673,7 +673,7 @@ conv_rgbaF_rgb8 (const Babl *conversion,
for (c = 0; c < 3; c++)
{
*(unsigned char *) dst = lrint ((*(float *) src) * 255.0);
*(unsigned char *) dst = lrint ((*(float *) src) * 255.0f);
dst += 1;
src += 4;
}
......@@ -695,7 +695,7 @@ conv_rgbaF_rgb16 (const Babl *conversion,
for (c = 0; c < 3; c++)
{
*(unsigned short *) dst = lrint ((*(float *) src) * 65535.0);
*(unsigned short *) dst = lrint ((*(float *) src) * 65535.0f);
dst += 2;
src += 4;
}
......
......@@ -61,7 +61,7 @@ conv_F_8 (const Babl *conversion,
while (n--)
{
float f = ((*(float *) src));
int uval = lrint (f * 255.0);
int uval = lrint (f * 255.0f);
if (uval < 0) uval = 0;
if (uval > 255) uval = 255;
......@@ -83,17 +83,17 @@ conv_F_16 (const Babl *conversion,
while (n--)
{
float f = ((*(float *) src));
if (f < 0.0)
if (f < 0.0f)
{
*(unsigned short *) dst = 0;
}
else if (f > 1.0)
else if (f > 1.0f)
{
*(unsigned short *) dst = 65535;
}
else
{
*(unsigned short *) dst = lrint (f * 65535.0);
*(unsigned short *) dst = lrint (f * 65535.0f);
}
dst += 2;
src += 4;
......@@ -110,7 +110,7 @@ conv_8_F (const Babl *conversion,
while (n--)
{
(*(float *) dst) = ((*(unsigned char *) src) / 255.0);
(*(float *) dst) = ((*(unsigned char *) src) / 255.0f);
dst += 4;
src += 1;
}
......@@ -146,7 +146,7 @@ conv_rgbaF_rgb8 (const Babl *conversion,
for (c = 0; c < 3; c++)
{
int val = rint ((*(float *) src) * 255.0);
int val = rint ((*(float *) src) * 255.0f);
if (val < 0)
*(unsigned char *) dst = 0;
else if (val > 255)
......@@ -679,11 +679,11 @@ conv_rgbaF_rgbA8 (const Babl *conversion,
for (c = 0; c < 3; c++)
{
*(unsigned char *) dst = lrint (((*(float *) src) * alpha) * 255.0);
*(unsigned char *) dst = lrint (((*(float *) src) * alpha) * 255.0f);
dst += 1;
src += 4;
}
*(unsigned char *) dst = lrint (alpha * 255.0);
*(unsigned char *) dst = lrint (alpha * 255.0f);
dst++;
src += 4;
}
......@@ -703,12 +703,12 @@ conv_rgbaF_rgb16 (const Babl *conversion,
for (c = 0; c < 3; c++)
{
if ((*(float *) src) >= 1.0)
if ((*(float *) src) >= 1.0f)
*(unsigned short *) dst = 65535;
else if ((*(float *) src) <=0)
*(unsigned short *) dst = 0;
else
*(unsigned short *) dst = lrint ((*(float *) src) * 65535.0);
*(unsigned short *) dst = lrint ((*(float *) src) * 65535.0f);
dst += 2;
src += 4;
}
......@@ -733,11 +733,11 @@ conv_rgbA16_rgbaF (const Babl *conversion,
if (alpha == 0.0f)
recip_alpha = 10000.0;
else
recip_alpha = 1.0/alpha;
recip_alpha = 1.0f/alpha;
for (c = 0; c < 3; c++)
{
(*(float *) dst) = (*(unsigned short *) src / 65535.0) * recip_alpha;
(*(float *) dst) = (*(unsigned short *) src / 65535.0f) * recip_alpha;
dst += 4;
src += 2;
}
......@@ -782,7 +782,7 @@ conv_gF_rgbaF (const Babl *conversion,
int c;
for (c = 0; c < 3; c++) {
(*(float *) dst) = *(unsigned char *) src / 255.0;
(*(float *) dst) = *(unsigned char *) src / 255.0f;
dst += 4;
src += 1;
}
......@@ -801,7 +801,7 @@ conv_gF_rgbaF (const Babl *conversion,
int c;
for (c = 0; c < 3; c++) {
(*(float *) dst) = *(unsigned char *) src / 255.0;
(*(float *) dst) = *(unsigned char *) src / 255.0f;
dst += 4;
}
src += 1;
......@@ -903,13 +903,13 @@ conv_rgbA8_rgba8 (const Babl *conversion,
}
else
{
float alpha = src[3]/255.0;
float ralpha = 1.0/alpha;
float alpha = src[3]/255.0f;
float ralpha = 1.0f/alpha;
//unsigned aa = ((255 << 16)) / src[3];
unsigned aa = ((1 << 10)) * ralpha;
*dst++ = (src[0] * aa + .5) / 1024.0 + 0.5;
*dst++ = (src[1] * aa +.5) / 1024.0 + 0.5;
*dst++ = (src[2] * aa +.5) / 1024.0 + 0.5;
*dst++ = (src[0] * aa + .5f) / 1024.0f + 0.5f;
*dst++ = (src[1] * aa +.5f) / 1024.0f + 0.5f;
*dst++ = (src[2] * aa +.5f) / 1024.0f + 0.5f;
*dst++ = src[3];
}
src += 4;
......@@ -1032,9 +1032,9 @@ conv_yuvaF_rgbaF (const Babl *conversion,
U = src_f[1];
V = src_f[2];
R = Y + 1.40200 * (V /*-0.5*/);
G = Y - 0.34414 * (U /*-0.5*/) -0.71414 * (V /*-0.5*/);
B = Y + 1.77200 * (U /*-0.5*/);
R = Y + 1.40200f * (V /*-0.5*/);
G = Y - 0.34414f * (U /*-0.5*/) -0.71414f * (V /*-0.5*/);
B = Y + 1.77200f * (U /*-0.5*/);
dst_f[0] = R;
dst_f[1] = G;
......@@ -1066,9 +1066,9 @@ conv_yuvF_rgbF (const Babl *conversion,
U = src_f[1];
V = src_f[2];
R = Y + 1.40200 * (V /*-0.5*/);
G = Y - 0.34414 * (U /*-0.5*/) -0.71414 * (V /*-0.5*/);
B = Y + 1.77200 * (U /*-0.5*/);
R = Y + 1.40200f * (V /*-0.5*/);
G = Y - 0.34414f * (U /*-0.5*/) -0.71414f * (V /*-0.5*/);
B = Y + 1.77200f * (U /*-0.5*/);
dst_f[0] = R;
dst_f[1] = G;
......
......@@ -366,13 +366,13 @@ conv_rgbaF_linear_rgb8_linear (const Babl *conversion,
while (n--)
{
v = rint (*fsrc++ * 255.0);
v = rint (*fsrc++ * 255.0f);
*dst++ = (v < 0) ? 0 : ((v > 255) ? 255 : v);
v = rint (*fsrc++ * 255.0);
v = rint (*fsrc++ * 255.0f);
*dst++ = (v < 0) ? 0 : ((v > 255) ? 255 : v);
v = rint (*fsrc++ * 255.0);
v = rint (*fsrc++ * 255.0f);
*dst++ = (v < 0) ? 0 : ((v > 255) ? 255 : v);
fsrc++;
......@@ -391,16 +391,16 @@ conv_rgbaF_linear_rgba8_linear (const Babl *conversion,
while (n--)
{
v = rint (*fsrc++ * 255.0);
v = rint (*fsrc++ * 255.0f);
*dst++ = (v < 0) ? 0 : ((v > 255) ? 255 : v);
v = rint (*fsrc++ * 255.0);
v = rint (*fsrc++ * 255.0f);
*dst++ = (v < 0) ? 0 : ((v > 255) ? 255 : v);
v = rint (*fsrc++ * 255.0);
v = rint (*fsrc++ * 255.0f);
*dst++ = (v < 0) ? 0 : ((v > 255) ? 255 : v);
v = rint (*fsrc++ * 255.0);
v = rint (*fsrc++ * 255.0f);
*dst++ = (v < 0) ? 0 : ((v > 255) ? 255 : v);
}
}
......
......@@ -48,7 +48,7 @@ conv_rgbaF_linear_y8_linear (const Babl *conversion,
value += *s++ * RGB_LUMINANCE_BLUE_FLOAT;
s++;
v = rint (value * 255.0);
v = rint (value * 255.0f);
*dst++ = (v < 0) ? 0 : ((v > 255) ? 255 : v);
}
}
......
......@@ -115,4 +115,22 @@ if host_cpu_family == 'x86_64'
)
endforeach
elif host_cpu_family == 'arm'
foreach ext : autosimd_extensions
shared_library(
'arm-neon-' + ext[0],
ext[0] + '.c',
c_args: [ext[1]] + arm_neon_flags,
include_directories: babl_ext_inc,
link_with: babl,
link_args: babl_ext_link_args,
dependencies: babl_ext_dep,
name_prefix: '',
install: true,
install_dir: babl_libdir / lib_name,
)
endforeach
endif
......@@ -190,7 +190,7 @@ float_to_u32_x1 (const Babl *conversion,
long n = samples;
while (n--)
{
double r = src[0];
float r = src[0];
dst[0] = (r >= 1.0f) ? 0xFFFFFFFF : ((r <= 0.0f) ? 0x0 : 0xFFFFFFFF * r + 0.5f);
......
project('babl', 'c',
license: 'LGPL3+',
version: '0.1.90',
version: '0.1.92',
meson_version: '>=0.54.0',
default_options: [
'buildtype=debugoptimized'
......