30#ifndef DT_IOP_PROFILE_H
31#define DT_IOP_PROFILE_H
79 const char *profile_filename);
87 const char *profile_filename,
107 const char *filename,
114 const char *filename,
121 const char *filename,
141 const char **profile_filename);
145 const char **profile_filename);
149 const char **profile_filename);
153 float *
const image_out,
const int width,
const int height,
154 const int cst_from,
const int cst_to,
int *converted_cst,
161 const char *message);
164typedef struct dt_colorspaces_cl_global_t
166 int kernel_colorspaces_transform_lab_to_rgb_matrix;
167 int kernel_colorspaces_transform_rgb_matrix_to_lab;
168 int kernel_colorspaces_transform_rgb_matrix_to_rgb;
169} dt_colorspaces_cl_global_t;
183dt_colorspaces_cl_global_t *dt_colorspaces_init_cl_global(
void);
184void dt_colorspaces_free_cl_global(dt_colorspaces_cl_global_t *
g);
198 cl_float **_profile_lut_cl, cl_mem *_dev_profile_info,
199 cl_mem *_dev_profile_lut);
202 cl_float **_profile_lut_cl, cl_mem *_dev_profile_info,
203 cl_mem *_dev_profile_lut);
206int dt_ioppr_transform_image_colorspace_cl(
struct dt_iop_module_t *self,
const int devid, cl_mem dev_img_in,
207 cl_mem dev_img_out,
const int width,
const int height,
208 const int cst_from,
const int cst_to,
int *converted_cst,
211int dt_ioppr_transform_image_colorspace_rgb_cl(
const int devid, cl_mem dev_img_in, cl_mem dev_img_out,
215 const char *message);
221#pragma omp declare simd aligned(lut:64) uniform(lut)
228 const float f = ft -
t;
231 return l1 * (1.0f -
f) +
l2 *
f;
236#pragma omp declare simd uniform(coeff)
244#pragma omp declare simd aligned(lut:64) uniform(lut, coeff)
253#pragma omp declare simd \
254 aligned(rgb_in, rgb_out, unbounded_coeffs:16) \
256 uniform(rgb_in, rgb_out, unbounded_coeffs, lut)
258static inline void _apply_trc(
const dt_aligned_pixel_t rgb_in, dt_aligned_pixel_t rgb_out,
260 const float unbounded_coeffs[3][3],
263 for(
int c = 0;
c < 3;
c++)
265 rgb_out[
c] = (
lut[
c][0] >= 0.0f) ? dt_ioppr_eval_trc(rgb_in[
c],
lut[
c], unbounded_coeffs[
c],
lutsize)
271#pragma omp declare simd \
272 aligned(rgb, matrix_in, unbounded_coeffs_in:16) \
274 uniform(rgb, matrix_in, lut_in, unbounded_coeffs_in)
278 const float unbounded_coeffs_in[3][3],
279 const int lutsize,
const int nonlinearlut)
281 float luminance = 0.f;
285 dt_aligned_pixel_t linear_rgb;
287 luminance = matrix_in[1][0] * linear_rgb[0] + matrix_in[1][1] * linear_rgb[1] + matrix_in[1][2] * linear_rgb[2];
290 luminance = matrix_in[1][0] *
rgb[0] + matrix_in[1][1] *
rgb[1] + matrix_in[1][2] *
rgb[2];
297#pragma omp declare simd \
298 aligned(unbounded_coeffs_in:16) \
300 uniform(lut_in, unbounded_coeffs_in)
304 const float unbounded_coeffs_in[3][3],
305 const int lutsize,
const int nonlinearlut)
309 dt_aligned_pixel_t linear_rgb;
318#pragma omp declare simd \
319 aligned(unbounded_coeffs_out:16) \
320 aligned(lut_out:64) \
321 uniform(lut_out, unbounded_coeffs_out)
325 const float unbounded_coeffs_out[3][3],
326 const int lutsize,
const int nonlinearlut)
328 dt_aligned_pixel_t xyz;
333 dt_aligned_pixel_t linear_rgb;
344#pragma omp declare simd \
345 aligned(unbounded_coeffs_in:16) \
347 uniform(lut_in, unbounded_coeffs_in)
351 const float unbounded_coeffs_in[3][3],
352 const int lutsize,
const int nonlinearlut)
354 dt_aligned_pixel_t xyz = { 0.f };
361 return profile_info->
grey;
365#pragma omp declare simd
370 dt_aligned_pixel_t lab = { 0.0f };
371 const dt_aligned_pixel_t
rgb = {
x,
x,
x };
374 return lab[0] * .01f;
378#pragma omp declare simd
383 const dt_aligned_pixel_t lab = {
x * 100.f, 0.0f, 0.0f };
384 dt_aligned_pixel_t
rgb = { 0.0f };
int width
Definition bilateral.h:1
int height
Definition bilateral.h:1
dt_iop_color_intent_t
Definition colorspaces.h:63
#define DT_IOP_COLOR_ICC_LEN
Definition colorspaces.h:57
dt_colorspaces_color_profile_type_t
Definition colorspaces.h:81
const float c
Definition colorspaces_inline_conversions.h:1365
const float g
Definition colorspaces_inline_conversions.h:925
dt_apply_transposed_color_matrix(XYZ, xyz_to_srgb_matrix_transposed, sRGB)
static dt_aligned_pixel_t rgb
Definition colorspaces_inline_conversions.h:530
float dt_aligned_pixel_simd_t __attribute__((vector_size(16), aligned(16)))
Multi-tap smudge source sample with directional jitter.
Definition darktable.h:448
static const float x
Definition iop_profile.h:239
const float l2
Definition iop_profile.h:230
dt_iop_order_iccprofile_info_t * dt_ioppr_get_pipe_output_profile_info(const struct dt_dev_pixelpipe_t *pipe)
Definition iop_profile.c:924
dt_iop_order_iccprofile_info_t * dt_ioppr_add_profile_info_to_list(struct dt_develop_t *dev, const dt_colorspaces_color_profile_type_t profile_type, const char *profile_filename, const int intent)
Definition iop_profile.c:768
void dt_ioppr_transform_image_colorspace(struct dt_iop_module_t *self, const float *const image_in, float *const image_out, const int width, const int height, const int cst_from, const int cst_to, int *converted_cst, const dt_iop_order_iccprofile_info_t *const profile_info)
Definition iop_profile.c:1044
void dt_ioppr_get_work_profile_type(struct dt_develop_t *dev, dt_colorspaces_color_profile_type_t *profile_type, const char **profile_filename)
Definition iop_profile.c:950
dt_iop_order_iccprofile_info_t * dt_ioppr_get_pipe_work_profile_info(const struct dt_dev_pixelpipe_t *pipe)
Definition iop_profile.c:914
dt_iop_order_iccprofile_info_t * dt_ioppr_set_pipe_work_profile_info(struct dt_develop_t *dev, struct dt_dev_pixelpipe_t *pipe, const dt_colorspaces_color_profile_type_t type, const char *filename, const int intent)
Definition iop_profile.c:835
void dt_ioppr_transform_image_colorspace_rgb(const float *const image_in, float *const image_out, const int width, const int height, const dt_iop_order_iccprofile_info_t *const profile_info_from, const dt_iop_order_iccprofile_info_t *const profile_info_to, const char *message)
const float f
Definition iop_profile.h:228
dt_iop_order_iccprofile_info_t * dt_ioppr_set_pipe_output_profile_info(struct dt_develop_t *dev, struct dt_dev_pixelpipe_t *pipe, const dt_colorspaces_color_profile_type_t type, const char *filename, const int intent)
Definition iop_profile.c:888
static const float *const lut
Definition iop_profile.h:246
static const float *const const float coeff[3]
Definition iop_profile.h:246
static float dt_ioppr_compensate_middle_grey(const float x, const dt_iop_order_iccprofile_info_t *const profile_info)
Definition iop_profile.h:367
dt_iop_order_iccprofile_info_t * dt_ioppr_get_iop_input_profile_info(struct dt_iop_module_t *module, GList *iop_list)
dt_iop_order_iccprofile_info_t * dt_ioppr_get_histogram_profile_info(struct dt_develop_t *dev)
static void _apply_trc(const dt_aligned_pixel_t rgb_in, dt_aligned_pixel_t rgb_out, float *const lut[3], const float unbounded_coeffs[3][3], const int lutsize)
Definition iop_profile.h:258
dt_iop_order_iccprofile_info_t * dt_ioppr_get_pipe_input_profile_info(const struct dt_dev_pixelpipe_t *pipe)
Definition iop_profile.c:919
dt_iop_order_iccprofile_info_t * dt_ioppr_get_profile_info_from_list(struct dt_develop_t *dev, dt_colorspaces_color_profile_type_t profile_type, const char *profile_filename)
Definition iop_profile.c:748
void dt_ioppr_get_input_profile_type(struct dt_develop_t *dev, dt_colorspaces_color_profile_type_t *profile_type, const char **profile_filename)
const int t
Definition iop_profile.h:227
static void dt_ioppr_rgb_matrix_to_lab(const dt_aligned_pixel_t rgb, dt_aligned_pixel_t lab, const dt_colormatrix_t matrix_in_transposed, float *const lut_in[3], const float unbounded_coeffs_in[3][3], const int lutsize, const int nonlinearlut)
Definition iop_profile.h:349
dt_iop_order_iccprofile_info_t * dt_ioppr_get_iop_work_profile_info(struct dt_iop_module_t *module, GList *iop_list)
Definition iop_profile.c:792
static float dt_ioppr_get_rgb_matrix_luminance(const dt_aligned_pixel_t rgb, const dt_colormatrix_t matrix_in, float *const lut_in[3], const float unbounded_coeffs_in[3][3], const int lutsize, const int nonlinearlut)
Definition iop_profile.h:276
const float l1
Definition iop_profile.h:229
static float dt_ioppr_uncompensate_middle_grey(const float x, const dt_iop_order_iccprofile_info_t *const profile_info)
Definition iop_profile.h:380
static float dt_ioppr_get_profile_info_middle_grey(const dt_iop_order_iccprofile_info_t *const profile_info)
Definition iop_profile.h:359
static void dt_ioppr_lab_to_rgb_matrix(const dt_aligned_pixel_t lab, dt_aligned_pixel_t rgb, const dt_colormatrix_t matrix_out_transposed, float *const lut_out[3], const float unbounded_coeffs_out[3][3], const int lutsize, const int nonlinearlut)
Definition iop_profile.h:323
static const float v
Definition iop_profile.h:223
void dt_ioppr_cleanup_profile_info(dt_iop_order_iccprofile_info_t *profile_info)
Definition iop_profile.c:646
static void dt_ioppr_rgb_matrix_to_xyz(const dt_aligned_pixel_t rgb, dt_aligned_pixel_t xyz, const dt_colormatrix_t matrix_in_transposed, float *const lut_in[3], const float unbounded_coeffs_in[3][3], const int lutsize, const int nonlinearlut)
Definition iop_profile.h:302
dt_iop_order_iccprofile_info_t * dt_ioppr_set_pipe_input_profile_info(struct dt_develop_t *dev, struct dt_dev_pixelpipe_t *pipe, const dt_colorspaces_color_profile_type_t type, const char *filename, const int intent, const dt_colormatrix_t matrix_in)
Definition iop_profile.c:854
void dt_ioppr_get_export_profile_type(struct dt_develop_t *dev, dt_colorspaces_color_profile_type_t *profile_type, const char **profile_filename)
Definition iop_profile.c:997
static const float const int lutsize
Definition iop_profile.h:224
void dt_ioppr_init_profile_info(dt_iop_order_iccprofile_info_t *profile_info, const int lutsize)
Definition iop_profile.c:624
dt_iop_order_iccprofile_info_t * dt_ioppr_get_pipe_current_profile_info(struct dt_iop_module_t *module, const struct dt_dev_pixelpipe_t *pipe)
Definition iop_profile.c:929
#define CLAMPS(A, L, H)
Definition math.h:76
float DT_ALIGNED_ARRAY dt_colormatrix_t[4][4]
Definition matrices.h:33
Definition color_conversion.h:42
int lutsize
Definition color_conversion.h:45
float grey
Definition color_conversion.h:49
int nonlinearlut
Definition color_conversion.h:48
float unbounded_coeffs_out[3][3]
Definition color_conversion.h:47
float matrix_out[9]
Definition color_conversion.h:44
float unbounded_coeffs_in[3][3]
Definition color_conversion.h:46
float matrix_in[9]
Definition color_conversion.h:43
Definition pixelpipe_hb.h:95
Definition pixelpipe_hb.h:216
Definition iop_profile.h:52
int nonlinearlut
Definition iop_profile.h:63
int lutsize
Definition iop_profile.h:58
dt_iop_color_intent_t intent
Definition iop_profile.h:55
dt_colormatrix_t matrix_out_transposed
Definition iop_profile.h:66
float grey
Definition iop_profile.h:64
dt_colorspaces_color_profile_type_t type
Definition iop_profile.h:53
float * lut_out[3]
Definition iop_profile.h:60
dt_colormatrix_t matrix_out
Definition iop_profile.h:57
float * lut_in[3]
Definition iop_profile.h:59
char filename[DT_IOP_COLOR_ICC_LEN]
Definition iop_profile.h:54
float unbounded_coeffs_in[3][3] DT_ALIGNED_PIXEL
Definition iop_profile.h:61
dt_colormatrix_t matrix_in_transposed
Definition iop_profile.h:65
dt_colormatrix_t matrix_in
Definition iop_profile.h:56
float unbounded_coeffs_out[3][3] DT_ALIGNED_PIXEL
Definition iop_profile.h:62