Ansel 0.0
A darktable fork - bloat + design vision
Loading...
Searching...
No Matches
colorequal_shared.h
Go to the documentation of this file.
1/*
2 This file is part of Ansel,
3 Copyright (C) 2026 Aurélien PIERRE.
4
5 Ansel is free software: you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation, either version 3 of the License, or
8 (at your option) any later version.
9
10 Ansel is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with darktable. If not, see <http://www.gnu.org/licenses/>.
17*/
18
19#pragma once
20
21#include "common/dtpthread.h"
22#include "common/iop_profile.h"
23#include "common/lut3d.h"
24
29#define DT_COLORRINGS_ANGLE_SHIFT +20.f
30
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)
37
44
46{
47 float x;
48 float y;
50
61
63float dt_colorrings_wrap_hue_2pi(float hue);
64float dt_colorrings_wrap_hue_pi(float hue);
66float dt_colorrings_hue_to_curve_x(float hue);
67float dt_colorrings_curve_periodic_distance(float x0, float x1);
69float dt_colorrings_curve_periodic_sample(const dt_colorrings_node_t *curve, int nodes, float x);
70
71gboolean dt_colorrings_apply_rgb_lut(const dt_aligned_pixel_t input_rgb, float white_level,
72 const dt_iop_order_iccprofile_info_t *work_profile,
73 const dt_iop_order_iccprofile_info_t *lut_profile, const float *clut,
74 uint16_t clut_level, dt_pthread_rwlock_t *clut_lock,
75 dt_lut3d_interpolation_t interpolation, dt_aligned_pixel_t output_rgb);
76
80 const dt_iop_order_iccprofile_info_t *display_profile,
83 const dt_iop_order_iccprofile_info_t *profile,
84 const dt_iop_order_iccprofile_info_t *display_profile,
85 dt_aligned_pixel_t display_rgb);
87 const dt_iop_order_iccprofile_info_t *profile,
90 const dt_iop_order_iccprofile_info_t *profile,
94
95void dt_colorrings_compute_reference_saturations(float white, float reference_saturation[DT_COLORRINGS_NUM_RINGS]);
96
97float dt_colorrings_ring_axis_position_from_brightness(float brightness, float white,
98 const dt_iop_order_iccprofile_info_t *profile);
99void dt_colorrings_brightness_to_axis_rgb(float brightness, float white,
103
109 float cos_angle, float sin_angle, dt_aligned_pixel_t output);
110
111void dt_colorrings_rgb_to_gray_cyl(const float rgb[3], float *L, float *rho, float *theta);
112void dt_colorrings_gray_basis_to_rgb(float L, float u, float v, float rgb[3]);
114float dt_colorrings_wendland_c2(float d);
115float dt_colorrings_wrap_pi(float x);
116
118 const float x[3], const float anchor_L[DT_COLORRINGS_LOCAL_FIELD_RINGS][DT_COLORRINGS_HUE_SAMPLES],
123 const float delta_theta[DT_COLORRINGS_LOCAL_FIELD_RINGS][DT_COLORRINGS_HUE_SAMPLES], float inv_sigma_L,
124 float inv_sigma_rho, float inv_sigma_theta, float rho0, float out[3]);
125
127 float *lut, int level, const float anchor_L[DT_COLORRINGS_LOCAL_FIELD_RINGS][DT_COLORRINGS_HUE_SAMPLES],
132 const float delta_theta[DT_COLORRINGS_LOCAL_FIELD_RINGS][DT_COLORRINGS_HUE_SAMPLES], float inv_sigma_L,
133 float inv_sigma_rho, float inv_sigma_theta, float rho0);
134
136 int anchor_count, float inv_sigma_L, float inv_sigma_rho,
137 float inv_sigma_theta, float rho0, float out[3]);
138
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)
Definition colorequal_shared.c:139
float dt_colorrings_wendland_c2(float d)
Definition colorequal_shared.c:492
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)
Definition colorequal_shared.c:225
float dt_colorrings_distance_to_cube_shell(const dt_aligned_pixel_t axis, const dt_aligned_pixel_t direction)
Definition colorequal_shared.c:366
float dt_colorrings_ring_axis_position_from_brightness(float brightness, float white, const dt_iop_order_iccprofile_info_t *profile)
Definition colorequal_shared.c:347
float dt_colorrings_curve_periodic_sample(const dt_colorrings_node_t *curve, int nodes, float x)
Definition colorequal_shared.c:153
void dt_colorrings_brightness_to_axis_rgb(float brightness, float white, const dt_iop_order_iccprofile_info_t *profile, dt_aligned_pixel_t RGB)
Definition colorequal_shared.c:356
float dt_colorrings_curve_periodic_distance(float x0, float x1)
Definition colorequal_shared.c:133
void dt_colorrings_rgb_to_gray_cyl(const float rgb[3], float *L, float *rho, float *theta)
Definition colorequal_shared.c:441
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)
Definition colorequal_shared.c:117
#define DT_COLORRINGS_HUE_SAMPLES
Definition colorequal_shared.h:34
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)
Definition colorequal_shared.c:704
float dt_colorrings_wrap_hue_2pi(float hue)
Definition colorequal_shared.c:110
dt_colorrings_ring_t
Definition colorequal_shared.h:39
@ DT_COLORRINGS_RING_DARK
Definition colorequal_shared.h:40
@ DT_COLORRINGS_RING_MID
Definition colorequal_shared.h:41
@ DT_COLORRINGS_RING_LIGHT
Definition colorequal_shared.h:42
void dt_colorrings_normalize3(dt_aligned_pixel_t vector)
Definition colorequal_shared.c:419
void dt_colorrings_project_to_cube_shell(const dt_aligned_pixel_t axis, dt_aligned_pixel_t RGB)
Definition colorequal_shared.c:382
#define DT_COLORRINGS_NUM_RINGS
Definition colorequal_shared.h:31
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)
Definition colorequal_shared.c:208
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)
Definition colorequal_shared.c:429
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)
Definition colorequal_shared.c:244
void dt_colorrings_cross3(const dt_aligned_pixel_t a, const dt_aligned_pixel_t b, dt_aligned_pixel_t out)
Definition colorequal_shared.c:411
float dt_colorrings_wrap_pi(float x)
Definition colorequal_shared.c:499
float dt_colorrings_vector_norm3(const dt_aligned_pixel_t vector)
Definition colorequal_shared.c:401
float dt_colorrings_hue_to_curve_x(float hue)
Definition colorequal_shared.c:128
#define DT_COLORRINGS_LOCAL_FIELD_RINGS
Definition colorequal_shared.h:36
float dt_colorrings_curve_x_to_hue(float x)
Definition colorequal_shared.c:123
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)
Definition colorequal_shared.c:280
void dt_colorrings_gray_axis_rgb_from_L(float L, dt_aligned_pixel_t RGB)
Definition colorequal_shared.c:483
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)
Definition colorequal_shared.c:175
float dt_colorrings_graph_white(void)
Definition colorequal_shared.c:105
float dt_colorrings_dot3(const dt_aligned_pixel_t a, const dt_aligned_pixel_t b)
Definition colorequal_shared.c:406
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)
Definition colorequal_shared.c:272
void dt_colorrings_gray_basis_to_rgb(float L, float u, float v, float rgb[3])
Definition colorequal_shared.c:464
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)
Definition colorequal_shared.c:218
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])
Definition colorequal_shared.c:623
static dt_aligned_pixel_t rgb
Definition colorspaces_inline_conversions.h:344
const float L
Definition colorspaces_inline_conversions.h:493
const float d
Definition colorspaces_inline_conversions.h:680
const dt_colormatrix_t dt_aligned_pixel_t out
Definition colorspaces_inline_conversions.h:42
static dt_aligned_pixel_t RGB
Definition colorspaces_inline_conversions.h:327
#define dt_pthread_rwlock_t
Definition dtpthread.h:389
static const float x
Definition iop_profile.h:235
const float *const lut
Definition iop_profile.h:240
const float v
Definition iop_profile.h:221
dt_lut3d_interpolation_t
Definition lut3d.h:25
float dt_aligned_pixel_t[4]
Definition noiseprofile.c:28
Definition colorequal_shared.h:46
float y
Definition colorequal_shared.h:48
float x
Definition colorequal_shared.h:47
Definition colorequal_shared.h:52
float delta_theta
Definition colorequal_shared.h:58
float delta_L
Definition colorequal_shared.h:56
float weight
Definition colorequal_shared.h:59
float chroma_scale
Definition colorequal_shared.h:57
float L
Definition colorequal_shared.h:53
float rho
Definition colorequal_shared.h:54
float theta
Definition colorequal_shared.h:55
Definition iop_profile.h:52