29#define DT_COLORRINGS_ANGLE_SHIFT +20.f
31#define DT_COLORRINGS_NUM_RINGS 3
32#define DT_COLORRINGS_MAXNODES 20
33#define DT_COLORRINGS_DEFAULT_NODES 8
34#define DT_COLORRINGS_HUE_SAMPLES 64
35#define DT_COLORRINGS_CLUT_LEVEL 64
36#define DT_COLORRINGS_LOCAL_FIELD_RINGS (DT_COLORRINGS_NUM_RINGS + 1)
124 float inv_sigma_rho,
float inv_sigma_theta,
float rho0,
float out[3]);
133 float inv_sigma_rho,
float inv_sigma_theta,
float rho0);
136 int anchor_count,
float inv_sigma_L,
float inv_sigma_rho,
137 float inv_sigma_theta,
float rho0,
float out[3]);
140 int anchor_count,
float inv_sigma_L,
float inv_sigma_rho,
141 float inv_sigma_theta,
float rho0);
float dt_colorrings_ring_brightness(dt_colorrings_ring_t ring)
float dt_colorrings_wendland_c2(float d)
void dt_colorrings_profile_rgb_to_display_rgb(const dt_aligned_pixel_t RGB, const dt_iop_order_iccprofile_info_t *profile, const dt_iop_order_iccprofile_info_t *display_profile, dt_aligned_pixel_t display_rgb)
float dt_colorrings_distance_to_cube_shell(const dt_aligned_pixel_t axis, const dt_aligned_pixel_t direction)
float dt_colorrings_ring_axis_position_from_brightness(float brightness, float white, const dt_iop_order_iccprofile_info_t *profile)
float dt_colorrings_curve_periodic_sample(const dt_colorrings_node_t *curve, int nodes, float x)
void dt_colorrings_brightness_to_axis_rgb(float brightness, float white, const dt_iop_order_iccprofile_info_t *profile, dt_aligned_pixel_t RGB)
float dt_colorrings_curve_periodic_distance(float x0, float x1)
void dt_colorrings_rgb_to_gray_cyl(const float rgb[3], float *L, float *rho, float *theta)
void dt_colorrings_fill_lut_local_field(float *lut, int level, const float anchor_L[(3+1)][64], const float anchor_rho[(3+1)][64], const float anchor_theta[(3+1)][64], const float delta_L[(3+1)][64], const float chroma_scale[(3+1)][64], const float delta_theta[(3+1)][64], float inv_sigma_L, float inv_sigma_rho, float inv_sigma_theta, float rho0)
float dt_colorrings_wrap_hue_pi(float hue)
#define DT_COLORRINGS_HUE_SAMPLES
void dt_colorrings_compute_reference_saturations(float white, float reference_saturation[3])
void dt_colorrings_fill_lut_sparse_local_field(float *lut, int level, const dt_colorrings_sparse_anchor_t *anchors, int anchor_count, float inv_sigma_L, float inv_sigma_rho, float inv_sigma_theta, float rho0)
float dt_colorrings_wrap_hue_2pi(float hue)
@ DT_COLORRINGS_RING_DARK
@ DT_COLORRINGS_RING_LIGHT
void dt_colorrings_normalize3(dt_aligned_pixel_t vector)
void dt_colorrings_project_to_cube_shell(const dt_aligned_pixel_t axis, dt_aligned_pixel_t RGB)
#define DT_COLORRINGS_NUM_RINGS
void dt_colorrings_hsb_to_profile_rgb(const dt_aligned_pixel_t HSB, float white, const dt_iop_order_iccprofile_info_t *profile, dt_aligned_pixel_t RGB)
void dt_colorrings_rotate_around_axis(const dt_aligned_pixel_t input, const dt_aligned_pixel_t axis, float cos_angle, float sin_angle, dt_aligned_pixel_t output)
void dt_colorrings_eval_local_field(const float x[3], const float anchor_L[(3+1)][64], const float anchor_rho[(3+1)][64], const float anchor_theta[(3+1)][64], const float delta_L[(3+1)][64], const float chroma_scale[(3+1)][64], const float delta_theta[(3+1)][64], float inv_sigma_L, float inv_sigma_rho, float inv_sigma_theta, float rho0, float out[3])
void dt_colorrings_profile_rgb_to_dt_ucs_jch(const dt_aligned_pixel_t RGB, float white, const dt_iop_order_iccprofile_info_t *profile, dt_aligned_pixel_t JCH)
void dt_colorrings_cross3(const dt_aligned_pixel_t a, const dt_aligned_pixel_t b, dt_aligned_pixel_t out)
float dt_colorrings_wrap_pi(float x)
float dt_colorrings_vector_norm3(const dt_aligned_pixel_t vector)
float dt_colorrings_hue_to_curve_x(float hue)
#define DT_COLORRINGS_LOCAL_FIELD_RINGS
float dt_colorrings_curve_x_to_hue(float x)
void dt_colorrings_profile_rgb_to_Ych(const dt_aligned_pixel_t RGB, const dt_iop_order_iccprofile_info_t *profile, dt_aligned_pixel_t Ych)
void dt_colorrings_gray_axis_rgb_from_L(float L, dt_aligned_pixel_t RGB)
gboolean dt_colorrings_apply_rgb_lut(const dt_aligned_pixel_t input_rgb, float white_level, const dt_iop_order_iccprofile_info_t *work_profile, const dt_iop_order_iccprofile_info_t *lut_profile, const float *clut, uint16_t clut_level, dt_pthread_rwlock_t *clut_lock, dt_lut3d_interpolation_t interpolation, dt_aligned_pixel_t output_rgb)
float dt_colorrings_graph_white(void)
float dt_colorrings_dot3(const dt_aligned_pixel_t a, const dt_aligned_pixel_t b)
void dt_colorrings_profile_rgb_to_dt_ucs_hsb(const dt_aligned_pixel_t RGB, float white, const dt_iop_order_iccprofile_info_t *profile, dt_aligned_pixel_t HSB)
void dt_colorrings_gray_basis_to_rgb(float L, float u, float v, float rgb[3])
void dt_colorrings_hsb_to_display_rgb(const dt_aligned_pixel_t HSB, float white, const dt_iop_order_iccprofile_info_t *display_profile, dt_aligned_pixel_t RGB)
void dt_colorrings_eval_sparse_local_field(const float x[3], const dt_colorrings_sparse_anchor_t *anchors, int anchor_count, float inv_sigma_L, float inv_sigma_rho, float inv_sigma_theta, float rho0, float out[3])
static dt_aligned_pixel_t rgb
const dt_colormatrix_t dt_aligned_pixel_t out
static dt_aligned_pixel_t RGB
#define dt_pthread_rwlock_t
float dt_aligned_pixel_t[4]