static BablPalette * make_pal (const Babl *pal_space, const Babl *format, const void *data, int count) { BablPalette *pal = NULL; int bpp = babl_format_get_bytes_per_pixel (format); babl_assert (count > 0); pal = babl_malloc (sizeof (BablPalette)); pal->count = count; pal->format = format; pal->data = babl_malloc (bpp * count); pal->data_double = babl_malloc (4 * sizeof(double) * count); pal->data_u8 = babl_malloc (4 * sizeof(char) * count); pal->radii = babl_malloc (sizeof (BablPaletteRadius) * (pal->count - 1) * pal->count); memcpy (pal->data, data, bpp * count); babl_process (babl_fish (format, babl_format_with_space ("RGBA double", pal_space)), data, pal->data_double, count); babl_process (babl_fish (format, babl_format_with_space ("R'G'B'A u8", pal_space)), data, pal->data_u8, count); babl_palette_init_radii (pal); babl_palette_reset_hash (pal); return pal; }
static BablPalette * default_palette (void) { static BablPalette pal; static int inited = 0; babl_mutex_lock (babl_format_mutex); if (inited) { babl_mutex_unlock (babl_format_mutex); return &pal; } init_ceil_sqrt_u8 (); memset (&pal, 0, sizeof (pal)); pal.count = 16; pal.format = babl_format ("R'G'B'A u8"); /* dynamically generated, so the default palette can not be fully static. */ pal.data = defpal_data; pal.data_double = defpal_double; pal.data_u8 = defpal_data; pal.radii = defpal_radii; babl_process (babl_fish (pal.format, babl_format ("RGBA double")), pal.data, pal.data_double, pal.count); babl_palette_init_radii (&pal); babl_palette_reset_hash (&pal); inited = 1; babl_mutex_unlock (babl_format_mutex); return &pal; }
static BablPalette *make_pal (const Babl *format, const void *data, int count) { BablPalette *pal = NULL; int bpp = babl_format_get_bytes_per_pixel (format); pal = babl_malloc (sizeof (BablPalette)); pal->count = count; pal->format = format; pal->data = babl_malloc (bpp * count); pal->data_double = babl_malloc (4 * sizeof(double) * count); pal->data_u8 = babl_malloc (4 * sizeof(char) * count); memcpy (pal->data, data, bpp * count); babl_process (babl_fish (format, babl_format ("RGBA double")), data, pal->data_double, count); babl_process (babl_fish (format, babl_format ("RGBA u8")), data, pal->data_u8, count); babl_palette_reset_hash (pal); return pal; }
static BablPalette *default_palette (void) { static BablPalette pal; static int inited = 0; if (inited) return &pal; memset (&pal, 0, sizeof (pal)); inited = 1; pal.count = 16; pal.format = babl_format ("RGBA u8"); /* dynamically generated, so the default palette can not be fully static. */ pal.data = defpal_data; pal.data_double = defpal_double; pal.data_u8 = defpal_data; babl_process (babl_fish (pal.format, babl_format ("RGBA double")), pal.data, pal.data_double, pal.count); babl_palette_reset_hash (&pal); return &pal; }