static void conversions (void) { babl_conversion_new ( babl_model ("RGBA"), babl_model ("Y'CbCr709"), "linear", rgba_to_ycbcr709, NULL ); babl_conversion_new ( babl_model ("RGBA"), babl_model ("Y'CbCrA709"), "linear", rgba_to_ycbcra709, NULL ); babl_conversion_new ( babl_model ("Y'CbCrA709"), babl_model ("RGBA"), "linear", ycbcra709_to_rgba, NULL ); babl_conversion_new ( babl_model ("Y'CbCr709"), babl_model ("RGBA"), "linear", ycbcr709_to_rgba, NULL ); }
static void conversions (void) { babl_conversion_new ( babl_model ("RGBA"), babl_model ("HSVA"), "linear", rgba_to_hsva, NULL ); babl_conversion_new ( babl_model ("RGBA"), babl_model ("HSV"), "linear", rgba_to_hsv, NULL ); babl_conversion_new ( babl_model ("HSVA"), babl_model ("RGBA"), "linear", hsva_to_rgba, NULL ); babl_conversion_new ( babl_model ("HSV"), babl_model ("RGBA"), "linear", hsv_to_rgba, NULL ); }
static void types_u16 (void) { babl_type_new ( "CIE u16 L", "integer", "unsigned", "bits", 16, "min_val", 0.0, "max_val", 100.0, NULL ); babl_type_new ( "CIE u16 ab", "id", "CIE u8 ab", "integer", "unsigned", "bits", 16, "min_val", -128.0, "max_val", 127.0, NULL ); babl_conversion_new ( babl_type ("CIE u16 L"), babl_type ("double"), "plane", convert_u16_l_double, NULL ); babl_conversion_new ( babl_type ("double"), babl_type ("CIE u16 L"), "plane", convert_double_u16_l, NULL ); babl_conversion_new ( babl_type ("CIE u16 ab"), babl_type ("double"), "plane", convert_u16_ab_double, NULL ); babl_conversion_new ( babl_type ("double"), babl_type ("CIE u16 ab"), "plane", convert_double_u16_ab, NULL ); }
int init (void) { int testint = 23; char *testchar = (char*) &testint; int littleendian = (testchar[0] == 23); if (littleendian) { const Babl *f24 = babl_format_new ( "name", "cairo-RGB24", babl_model ("R'G'B'"), babl_type ("u8"), babl_component ("B'"), babl_component ("G'"), babl_component ("R'"), babl_component ("PAD"), NULL ); babl_conversion_new (babl_format ("RGB float"), f24, "linear", conv_rgbfloat_linear_cairo24_le, NULL); babl_conversion_new (babl_format ("RGBA float"), f24, "linear", conv_rgbafloat_linear_cairo24_le, NULL); } babl_conversion_new (babl_format ("RGBA float"), babl_format ("R'G'B' u8"), "linear", conv_rgbafloat_linear_rgbu8_gamma, NULL); babl_conversion_new (babl_format ("RGB float"), babl_format ("R'G'B' u8"), "linear", conv_rgbfloat_linear_rgbu8_gamma, NULL); babl_conversion_new (babl_format ("Y float"), babl_format ("Y' u8"), "linear", conv_yfloat_linear_yu8_gamma, NULL); babl_conversion_new (babl_format ("YA float"), babl_format ("Y'A u8"), "linear", conv_yafloat_linear_yau8_gamma, NULL); return 0; }
void babl_base_type_u32 (void) { babl_type_new ( "u32", "id", BABL_U32, "bits", 32, NULL); babl_conversion_new ( babl_type_from_id (BABL_U32), babl_type_from_id (BABL_DOUBLE), "plane", convert_u32_double, NULL ); babl_conversion_new ( babl_type_from_id (BABL_DOUBLE), babl_type_from_id (BABL_U32), "plane", convert_double_u32, NULL ); babl_conversion_new ( babl_type_from_id (BABL_U32), babl_type_from_id (BABL_FLOAT), "plane", convert_u32_float, NULL ); babl_conversion_new ( babl_type_from_id (BABL_FLOAT), babl_type_from_id (BABL_U32), "plane", convert_float_u32, NULL ); }
const Babl * babl_new_palette_with_space (const char *name, const Babl *space, const Babl **format_u8, const Babl **format_u8_with_alpha) { const Babl *model; const Babl *model_no_alpha; Babl *f_pal_u8; Babl *f_pal_a_u8; const Babl *component; const Babl *alpha; BablPalette **palptr; char cname[64]; if (!space) space = babl_space ("sRGB"); if (!name) { static int cnt = 0; snprintf (cname, sizeof (cname), "_babl-int-%i", cnt++); name = cname; } else { snprintf (cname, sizeof (cname), "%s-%p", name, space); name = cname; if ((model = babl_db_exist_by_name (babl_model_db (), name))) { cname[0] = ')'; if (format_u8) *format_u8 = babl_db_exist_by_name (babl_format_db (), name); cname[0] = '\\'; if (format_u8_with_alpha) *format_u8_with_alpha = babl_db_exist_by_name (babl_format_db (), name); return model; } } /* re-registering is a no-op */ component = babl_component_new ( "I", "luma", "chroma", NULL); alpha = babl_component ("A"); model = babl_model_new ("name", name, component, alpha, NULL); palptr = malloc (sizeof (void*)); *palptr = default_palette ();; cname[0] = 'v'; model_no_alpha = babl_model_new ("name", name, component, NULL); cname[0] = '\\'; f_pal_a_u8 = (void*) babl_format_new ("name", name, model, space, babl_type ("u8"), component, alpha, NULL); cname[0] = ')'; f_pal_u8 = (void*) babl_format_new ("name", name, model_no_alpha, space, babl_type ("u8"), component, NULL); f_pal_a_u8->format.palette = 1; f_pal_u8->format.palette = 1; babl_conversion_new ( model, babl_model ("RGBA"), "linear", pala_to_rgba, "data", palptr, NULL ); babl_conversion_new ( babl_model ("RGBA"), model, "linear", rgba_to_pala, "data", palptr, NULL ); babl_conversion_new ( model_no_alpha, babl_model ("RGBA"), "linear", pal_to_rgba, "data", palptr, NULL ); babl_conversion_new ( babl_model ("RGBA"), model_no_alpha, "linear", rgba_to_pal, "data", palptr, NULL ); babl_conversion_new ( f_pal_u8, f_pal_a_u8, "linear", conv_pal8_pala8, NULL ); babl_conversion_new ( f_pal_a_u8, f_pal_u8, "linear", conv_pala8_pal8, NULL ); babl_conversion_new ( f_pal_u8, babl_format ("R'G'B'A u8"), "linear", pal_u8_to_rgba_u8, "data", palptr, NULL); babl_conversion_new ( f_pal_a_u8, babl_format ("R'G'B'A u8"), "linear", pala_u8_to_rgba_u8, "data", palptr, NULL); babl_conversion_new ( babl_format ("R'G'B'A u8"), f_pal_a_u8, "linear", rgba_u8_to_pal_a, "data", palptr, NULL); babl_conversion_new ( babl_format ("R'G'B'A u8"), f_pal_u8, "linear", rgba_u8_to_pal, "data", palptr, NULL); babl_conversion_new ( babl_format ("RGBA float"), f_pal_a_u8, "linear", rgba_float_to_pal_a, "data", palptr, NULL); babl_conversion_new ( babl_format ("RGBA float"), f_pal_u8, "linear", rgba_float_to_pal, "data", palptr, NULL); babl_set_user_data (model, palptr); babl_set_user_data (model_no_alpha, palptr); if (format_u8) *format_u8 = f_pal_u8; if (format_u8_with_alpha) *format_u8_with_alpha = f_pal_a_u8; babl_sanity (); return model; }
static void conversions (void) { babl_conversion_new ( babl_model ("RGBA"), babl_model ("CIE Lab"), "linear", rgba_to_lab, NULL ); babl_conversion_new ( babl_model ("CIE Lab"), babl_model ("RGBA"), "linear", lab_to_rgba, NULL ); babl_conversion_new ( babl_model ("RGBA"), babl_model ("CIE Lab alpha"), "linear", rgba_to_laba, NULL ); babl_conversion_new ( babl_model ("CIE Lab alpha"), babl_model ("RGBA"), "linear", laba_to_rgba, NULL ); babl_conversion_new ( babl_format ("RGBA float"), babl_format ("CIE Lab alpha float"), "linear", rgbaf_to_Labaf, NULL ); babl_conversion_new ( babl_format ("CIE Lab alpha float"), babl_format ("RGBA float"), "linear", Labaf_to_rgbaf, NULL ); babl_conversion_new ( babl_format ("YA float"), babl_format ("CIE L alpha float"), "linear", Yaf_to_Laf, NULL ); babl_conversion_new ( babl_model ("RGBA"), babl_model ("CIE LCH(ab)"), "linear", rgba_to_lchab, NULL ); babl_conversion_new ( babl_model ("CIE LCH(ab)"), babl_model ("RGBA"), "linear", lchab_to_rgba, NULL ); babl_conversion_new ( babl_model ("RGBA"), babl_model ("CIE LCH(ab) alpha"), "linear", rgba_to_lchaba, NULL ); babl_conversion_new ( babl_model ("CIE LCH(ab) alpha"), babl_model ("RGBA"), "linear", lchaba_to_rgba, NULL ); /*babl_conversion_new ( babl_model ("RGBA"), babl_model ("CIE XYZ"), "linear", RGB_to_XYZ, NULL ); babl_conversion_new ( babl_model ("CIE XYZ"), babl_model ("RGBA"), "linear", XYZ_to_RGB, NULL );*/ rgbcie_init (); }
void babl_base_type_u8 (void) { babl_type_new ( "u8", "id", BABL_U8, "bits", 8, NULL); babl_type_new ( "u8-luma", "id", BABL_U8_LUMA, "bits", 8, NULL ); babl_type_new ( "u8-chroma", "id", BABL_U8_CHROMA, "integer", "unsigned", "bits", 8, "min", (long) 16, "max", (long) 240, "min_val", -0.5, "max_val", 0.5, NULL ); babl_conversion_new ( babl_type_from_id (BABL_U8), babl_type_from_id (BABL_DOUBLE), "plane", convert_u8_double, NULL ); babl_conversion_new ( babl_type_from_id (BABL_DOUBLE), babl_type_from_id (BABL_U8), "plane", convert_double_u8, NULL ); babl_conversion_new ( babl_type_from_id (BABL_U8_LUMA), babl_type_from_id (BABL_DOUBLE), "plane", convert_u8_luma_double, NULL ); babl_conversion_new ( babl_type_from_id (BABL_DOUBLE), babl_type_from_id (BABL_U8_LUMA), "plane", convert_double_u8_luma, NULL ); babl_conversion_new ( babl_type_from_id (BABL_U8_CHROMA), babl_type_from_id (BABL_DOUBLE), "plane", convert_u8_chroma_double, NULL ); babl_conversion_new ( babl_type_from_id (BABL_DOUBLE), babl_type_from_id (BABL_U8_CHROMA), "plane", convert_double_u8_chroma, NULL ); }
int init (void) { #if defined(USE_SSE2) const Babl *rgbaF_linear = babl_format_new ( babl_model ("RGBA"), babl_type ("float"), babl_component ("R"), babl_component ("G"), babl_component ("B"), babl_component ("A"), NULL); const Babl *rgbAF_linear = babl_format_new ( babl_model ("RaGaBaA"), babl_type ("float"), babl_component ("Ra"), babl_component ("Ga"), babl_component ("Ba"), babl_component ("A"), NULL); const Babl *rgbAF_gamma = babl_format_new ( babl_model ("R'aG'aB'aA"), babl_type ("float"), babl_component ("R'a"), babl_component ("G'a"), babl_component ("B'a"), babl_component ("A"), NULL); const Babl *rgbaF_gamma = babl_format_new ( babl_model ("R'G'B'A"), babl_type ("float"), babl_component ("R'"), babl_component ("G'"), babl_component ("B'"), babl_component ("A"), NULL); const Babl *rgbF_linear = babl_format_new ( babl_model ("RGB"), babl_type ("float"), babl_component ("R"), babl_component ("G"), babl_component ("B"), NULL); const Babl *rgbF_gamma = babl_format_new ( babl_model ("R'G'B'"), babl_type ("float"), babl_component ("R'"), babl_component ("G'"), babl_component ("B'"), NULL); const Babl *yaF_linear = babl_format_new ( babl_model ("YA"), babl_type ("float"), babl_component ("Y"), babl_component ("A"), NULL); const Babl *yaF_gamma = babl_format_new ( babl_model ("Y'A"), babl_type ("float"), babl_component ("Y'"), babl_component ("A"), NULL); const Babl *yF_linear = babl_format_new ( babl_model ("Y"), babl_type ("float"), babl_component ("Y"), NULL); const Babl *yF_gamma = babl_format_new ( babl_model ("Y'"), babl_type ("float"), babl_component ("Y'"), NULL); if ((babl_cpu_accel_get_support () & BABL_CPU_ACCEL_X86_SSE) && (babl_cpu_accel_get_support () & BABL_CPU_ACCEL_X86_SSE2)) { babl_conversion_new(rgbaF_linear, rgbAF_linear, "linear", conv_rgbaF_linear_rgbAF_linear, NULL); babl_conversion_new(rgbaF_gamma, rgbAF_gamma, "linear", conv_rgbaF_linear_rgbAF_linear, NULL); babl_conversion_new(rgbaF_linear, rgbAF_gamma, "linear", conv_rgbaF_linear_rgbAF_gamma, NULL); /* Which of these is faster varies by CPU, and the difference * is big enough that it's worthwhile to include both and * let them fight it out in the babl benchmarks. */ babl_conversion_new(rgbAF_linear, rgbaF_linear, "linear", conv_rgbAF_linear_rgbaF_linear_shuffle, NULL); babl_conversion_new(rgbAF_gamma, rgbaF_gamma, "linear", conv_rgbAF_linear_rgbaF_linear_shuffle, NULL); babl_conversion_new(rgbAF_linear, rgbaF_linear, "linear", conv_rgbAF_linear_rgbaF_linear_spin, NULL); o (yF_linear, yF_gamma); o (yF_gamma, yF_linear); o (yaF_linear, yaF_gamma); o (yaF_gamma, yaF_linear); o (rgbF_linear, rgbF_gamma); o (rgbF_gamma, rgbF_linear); o (rgbaF_linear, rgbaF_gamma); o (rgbaF_gamma, rgbaF_linear); } #endif /* defined(USE_SSE2) */ return 0; }