double x_r = X / D50_WHITE_REF_X;
double y_r = Y / D50_WHITE_REF_Y;
double z_r = Z / D50_WHITE_REF_Z;
-
+
if (x_r > LAB_EPSILON) f_x = pow(x_r, 1.0 / 3.0);
else ( f_x = ((LAB_KAPPA * x_r) + 16) / 116.0 );
-
+
if (y_r > LAB_EPSILON) f_y = pow(y_r, 1.0 / 3.0);
else ( f_y = ((LAB_KAPPA * y_r) + 16) / 116.0 );
-
+
if (z_r > LAB_EPSILON) f_z = pow(z_r, 1.0 / 3.0);
else ( f_z = ((LAB_KAPPA * z_r) + 16) / 116.0 );
-
+
*to_L = (116.0 * f_y) - 16.0;
*to_a = 500.0 * (f_x - f_y);
*to_b = 200.0 * (f_y - f_z);
* matrix looking for the bit-exact inverse of this integer-solution.
*
*/
-static void
+static void
babl_matrix_equalize (double *in_mat)
{
double mat[9];
}
}
-static void
-babl_space_compute_matrices (BablSpace *space,
+static void
+babl_space_compute_matrices (BablSpace *space,
BablSpaceFlags equalize_matrix)
{
#define _ space->
}
Babl *
-_babl_space_for_lcms (const char *icc_data,
+_babl_space_for_lcms (const char *icc_data,
int icc_length)
{
int i=0;
return (Babl*)&space_db[i];
}
-const Babl *
+const Babl *
babl_space_from_chromaticities (const char *name,
double wx, double wy,
double rx, double ry,
}
-void
-babl_space_to_xyz (const Babl *space,
- const double *rgb,
+void
+babl_space_to_xyz (const Babl *space,
+ const double *rgb,
double *xyz)
{
_babl_space_to_xyz (space, rgb, xyz);
}
-void
-babl_space_from_xyz (const Babl *space,
- const double *xyz,
+void
+babl_space_from_xyz (const Babl *space,
+ const double *xyz,
double *rgb)
{
_babl_space_from_xyz (space, xyz, rgb);
///////////////////
-static void
+static void
prep_conversion (const Babl *babl)
{
Babl *conversion = (void*) babl;
static inline void
universal_nonlinear_rgba_converter (const Babl *conversion,
- unsigned char *src_char,
- unsigned char *dst_char,
- long samples,
+ unsigned char *src_char,
+ unsigned char *dst_char,
+ long samples,
void *data)
{
const Babl *source_space = babl_conversion_get_source_space (conversion);
static inline void
universal_nonlinear_rgb_linear_converter (const Babl *conversion,
- unsigned char *src_char,
- unsigned char *dst_char,
- long samples,
+ unsigned char *src_char,
+ unsigned char *dst_char,
+ long samples,
void *data)
{
const Babl *source_space = babl_conversion_get_source_space (conversion);
static inline void
universal_nonlinear_rgba_u8_converter (const Babl *conversion,
- unsigned char *src_char,
- unsigned char *dst_char,
- long samples,
+ unsigned char *src_char,
+ unsigned char *dst_char,
+ long samples,
void *data)
{
const Babl *destination_space = conversion->conversion.destination->format.space;
static inline void
universal_rgba_converter (const Babl *conversion,
- unsigned char *src_char,
- unsigned char *dst_char,
- long samples,
+ unsigned char *src_char,
+ unsigned char *dst_char,
+ long samples,
void *data)
{
float *matrixf = data;
static inline void
universal_rgb_converter (const Babl *conversion,
- unsigned char *src_char,
- unsigned char *dst_char,
- long samples,
+ unsigned char *src_char,
+ unsigned char *dst_char,
+ long samples,
void *data)
{
float *matrixf = data;
static inline void
universal_nonlinear_rgb_u8_converter (const Babl *conversion,
- unsigned char *src_char,
- unsigned char *dst_char,
- long samples,
+ unsigned char *src_char,
+ unsigned char *dst_char,
+ long samples,
void *data)
{
const Babl *destination_space = conversion->conversion.destination->format.space;
static inline void
universal_nonlinear_rgba_converter_sse2 (const Babl *conversion,
- unsigned char *src_char,
- unsigned char *dst_char,
- long samples,
+ unsigned char *src_char,
+ unsigned char *dst_char,
+ long samples,
void *data)
{
const Babl *source_space = babl_conversion_get_source_space (conversion);
static inline void
universal_rgba_converter_sse2 (const Babl *conversion,
- unsigned char *src_char,
- unsigned char *dst_char,
- long samples,
+ unsigned char *src_char,
+ unsigned char *dst_char,
+ long samples,
void *data)
{
float *matrixf = data;
static inline void
universal_nonlinear_rgba_u8_converter_sse2 (const Babl *conversion,
- unsigned char *src_char,
- unsigned char *dst_char,
- long samples,
+ unsigned char *src_char,
+ unsigned char *dst_char,
+ long samples,
void *data)
{
const Babl *destination_space = conversion->conversion.destination->format.space;
static inline void
universal_nonlinear_rgb_u8_converter_sse2 (const Babl *conversion,
- unsigned char *src_char,
- unsigned char *dst_char,
- long samples,
+ unsigned char *src_char,
+ unsigned char *dst_char,
+ long samples,
void *data)
{
const Babl *destination_space = conversion->conversion.destination->format.space;
static inline void
universal_nonlinear_rgb_linear_converter_sse2 (const Babl *conversion,
- unsigned char *src_char,
- unsigned char *dst_char,
- long samples,
+ unsigned char *src_char,
+ unsigned char *dst_char,
+ long samples,
void *data)
{
const Babl *source_space = babl_conversion_get_source_space (conversion);
if ((babl_cpu_accel_get_support () & BABL_CPU_ACCEL_X86_SSE) &&
(babl_cpu_accel_get_support () & BABL_CPU_ACCEL_X86_SSE2))
{
- prep_conversion(babl_conversion_new(babl_format_with_space("RGBA float", space),
+ prep_conversion(babl_conversion_new(
+ babl_format_with_space("RGBA float", space),
babl_format_with_space("RGBA float", babl),
"linear", universal_rgba_converter_sse2,
NULL));
- prep_conversion(babl_conversion_new(babl_format_with_space("RGBA float", babl),
+ prep_conversion(babl_conversion_new(
+ babl_format_with_space("RGBA float", babl),
babl_format_with_space("RGBA float", space),
"linear", universal_rgba_converter_sse2,
NULL));
- prep_conversion(babl_conversion_new(babl_format_with_space("R'G'B'A float", space),
+ prep_conversion(babl_conversion_new(
+ babl_format_with_space("R'G'B'A float", space),
babl_format_with_space("R'G'B'A float", babl),
"linear", universal_nonlinear_rgba_converter_sse2,
NULL));
- prep_conversion(babl_conversion_new(babl_format_with_space("R'G'B'A float", babl),
+ prep_conversion(babl_conversion_new(
+ babl_format_with_space("R'G'B'A float", babl),
babl_format_with_space("R'G'B'A float", space),
"linear", universal_nonlinear_rgba_converter_sse2,
NULL));
- prep_conversion(babl_conversion_new(babl_format_with_space("R'G'B'A u8", space),
+ prep_conversion(babl_conversion_new(
+ babl_format_with_space("R'G'B'A u8", space),
babl_format_with_space("R'G'B'A u8", babl),
"linear", universal_nonlinear_rgba_u8_converter_sse2,
NULL));
- prep_conversion(babl_conversion_new(babl_format_with_space("R'G'B'A u8", babl),
+ prep_conversion(babl_conversion_new(
+ babl_format_with_space("R'G'B'A u8", babl),
babl_format_with_space("R'G'B'A u8", space),
"linear", universal_nonlinear_rgba_u8_converter_sse2,
NULL));
- prep_conversion(babl_conversion_new(babl_format_with_space("R'G'B' u8", space),
+ prep_conversion(babl_conversion_new(
+ babl_format_with_space("R'G'B' u8", space),
babl_format_with_space("R'G'B' u8", babl),
"linear", universal_nonlinear_rgb_u8_converter_sse2,
NULL));
- prep_conversion(babl_conversion_new(babl_format_with_space("R'G'B' u8", babl),
+ prep_conversion(babl_conversion_new(
+ babl_format_with_space("R'G'B' u8", babl),
babl_format_with_space("R'G'B' u8", space),
"linear", universal_nonlinear_rgb_u8_converter_sse2,
NULL));
//else
#endif
{
- prep_conversion(babl_conversion_new(babl_format_with_space("RGBA float", space),
+ prep_conversion(babl_conversion_new(
+ babl_format_with_space("RGBA float", space),
babl_format_with_space("RGBA float", babl),
"linear", universal_rgba_converter,
NULL));
- prep_conversion(babl_conversion_new(babl_format_with_space("RGBA float", babl),
+ prep_conversion(babl_conversion_new(
+ babl_format_with_space("RGBA float", babl),
babl_format_with_space("RGBA float", space),
"linear", universal_rgba_converter,
NULL));
- prep_conversion(babl_conversion_new(babl_format_with_space("R'G'B'A float", space),
+ prep_conversion(babl_conversion_new(
+ babl_format_with_space("R'G'B'A float", space),
babl_format_with_space("R'G'B'A float", babl),
"linear", universal_nonlinear_rgba_converter,
NULL));
- prep_conversion(babl_conversion_new(babl_format_with_space("R'G'B'A float", babl),
+ prep_conversion(babl_conversion_new(
+ babl_format_with_space("R'G'B'A float", babl),
babl_format_with_space("R'G'B'A float", space),
"linear", universal_nonlinear_rgba_converter,
NULL));
- prep_conversion(babl_conversion_new(babl_format_with_space("R'G'B'A u8", space),
+ prep_conversion(babl_conversion_new(
+ babl_format_with_space("R'G'B'A u8", space),
babl_format_with_space("R'G'B'A u8", babl),
"linear", universal_nonlinear_rgba_u8_converter,
NULL));
- prep_conversion(babl_conversion_new(babl_format_with_space("R'G'B'A u8", babl),
+ prep_conversion(babl_conversion_new(
+ babl_format_with_space("R'G'B'A u8", babl),
babl_format_with_space("R'G'B'A u8", space),
"linear", universal_nonlinear_rgba_u8_converter,
NULL));
- prep_conversion(babl_conversion_new(babl_format_with_space("R'G'B' u8", space),
+ prep_conversion(babl_conversion_new(
+ babl_format_with_space("R'G'B' u8", space),
babl_format_with_space("R'G'B' u8", babl),
"linear", universal_nonlinear_rgb_u8_converter,
NULL));
- prep_conversion(babl_conversion_new(babl_format_with_space("R'G'B' u8", babl),
+ prep_conversion(babl_conversion_new(
+ babl_format_with_space("R'G'B' u8", babl),
babl_format_with_space("R'G'B' u8", space),
"linear", universal_nonlinear_rgb_u8_converter,
NULL));
}
- prep_conversion(babl_conversion_new(babl_format_with_space("RGB float", space),
+ prep_conversion(babl_conversion_new(
+ babl_format_with_space("RGB float", space),
babl_format_with_space("RGB float", babl),
"linear", universal_rgb_converter,
NULL));
- prep_conversion(babl_conversion_new(babl_format_with_space("RGB float", babl),
+ prep_conversion(babl_conversion_new(
+ babl_format_with_space("RGB float", babl),
babl_format_with_space("RGB float", space),
"linear", universal_rgb_converter,
NULL));
* with conversions internally as well as for conversions to and from other RGB
* spaces.
*/
-void
+void
_babl_space_add_universal_rgb (const Babl *space)
{
babl_space_class_for_each (add_rgb_adapter, (void*)space);
}
const Babl *
-babl_space_with_trc (const Babl *babl,
+babl_space_with_trc (const Babl *babl,
const Babl *trc)
{
double xw, yw, xr, yr, xg, yg, xb, yb;
}
-void
+void
babl_space_get (const Babl *babl,
double *xw, double *yw,
double *xr, double *yr,
if(blue_trc)*blue_trc = space->trc[2];
}
-int
+int
babl_space_is_cmyk (const Babl *space)
{
return space?space->space.cmyk.is_cmyk:0;