/* babl - dynamically extendable universal pixel conversion library.
- * Copyright (C) 2005, 2014 Øyvind Kolås.
+ * Copyright (C) 2005, 2014, 2019 Øyvind Kolås.
* Copyright (C) 2009, Martin Nordholts
- * Copyright (C) 2014, Elle Stone
+ * Copyright (C) 2014, 2019 Elle Stone
* Copyright (C) 2017, 2018 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
#define D50_WHITE_REF_Z 0.824905400f
#define NEAR_ZERO 0.0000000001f
+#define near_zero(a) ((a) < NEAR_ZERO && (a) > -NEAR_ZERO)
+
#define D50_WHITE_REF_x 0.345702921222f
#define D50_WHITE_REF_y 0.358537532290f
double *to_Y)
{
double sum = X + Y + Z;
- if (sum < NEAR_ZERO)
+ if (near_zero (sum))
{ *to_Y = 0.0;
*to_x = D50_WHITE_REF_x;
*to_y = D50_WHITE_REF_y;
double *to_Y,
double *to_Z)
{
- if ( Y < NEAR_ZERO )
+ if (near_zero (Y))
{
*to_X = 0.0;
*to_Y = 0.0;
double *to_v)
{
double sum = X + (15.0 * Y) + (3.0 * Z);
- if (sum < NEAR_ZERO)
- {
- *to_Y = 0.0;
- *to_u = 4.0/19.0;
- *to_v = 9.0/19.0;
- }
- else
- {
- *to_Y = Y;
- *to_u = (4.0 * X) / sum;
- *to_v = (9.0 * Y) / sum;
+ if (near_zero (sum))
+ {
+ *to_Y = 0.0;
+ *to_u = 4.0/19.0;
+ *to_v = 9.0/19.0;
+ }
+ else
+ {
+ *to_Y = Y;
+ *to_u = (4.0 * X) / sum;
+ *to_v = (9.0 * Y) / sum;
}
}
double *to_Y,
double *to_Z)
{
- if ( v < NEAR_ZERO )
+ if (near_zero (v))
{
*to_X = 0.0;
*to_Y = 0.0;
b = src[2];
a = src[3];
- if ( r < NEAR_ZERO && g < NEAR_ZERO && b < NEAR_ZERO )
+ if (near_zero(r) && near_zero(g) && near_zero(b))
{
Y = 0.0f;
x = D50_WHITE_REF_x;
g = src[1];
b = src[2];
- if ( r < NEAR_ZERO && g < NEAR_ZERO && b < NEAR_ZERO )
+ if (near_zero(r) && near_zero(g) && near_zero(b))
{
Y = 0.0f;
x = D50_WHITE_REF_x;
g = src[1];
b = src[2];
- if ( r < NEAR_ZERO && g < NEAR_ZERO && b < NEAR_ZERO )
+ if (near_zero(r) && near_zero(g) && near_zero(b))
{
Y = 0.0f;
x = D50_WHITE_REF_x;
b = src[2];
a = src[3];
- if ( r < NEAR_ZERO && g < NEAR_ZERO && b < NEAR_ZERO )
+ if (near_zero(r) && near_zero(g) && near_zero(b))
{
Y = 0.0f;
u = 4.0/19.0;
g = src[1];
b = src[2];
- if ( r < NEAR_ZERO && g < NEAR_ZERO && b < NEAR_ZERO )
+ if (near_zero(r) && near_zero(g) && near_zero(b))
{
Y = 0.0f;
u = 4.0/19.0;
g = src[1];
b = src[2];
- if ( r < NEAR_ZERO && g < NEAR_ZERO && b < NEAR_ZERO )
+ if (near_zero(r) && near_zero(g) && near_zero(b))
{
Y = 0.0f;
u = 4.0/19.0;
float y = src[1];
float Y = src[2];
- if ( Y < NEAR_ZERO )
+ if (near_zero (y))
{
X = 0.0f;
Y = 0.0f;
float Y = src[2];
- if ( Y < NEAR_ZERO )
+ if (near_zero (Y))
{
X = 0.0f;
Y = 0.0f;
float Y = src[2];
float a = src[3];
- if ( Y < NEAR_ZERO )
+ if (near_zero (Y))
{
X = 0.0f;
Y = 0.0f;
float u = src[1];
float v = src[2];
- if ( v < NEAR_ZERO )
+ if (near_zero (v))
{
X = 0.0f;
Y = 0.0f;
float u = src[1];
float v = src[2];
- if ( v < NEAR_ZERO )
+ if (near_zero (v))
{
X = 0.0f;
Y = 0.0f;
float v = src[2];
float a = src[3];
- if ( v < NEAR_ZERO )
+ if (near_zero (v))
{
X = 0.0f;
Y = 0.0f;