Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 31 additions & 14 deletions src/common/iop_profile.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
#include "common/debug.h"
#include "common/imagebuf.h"
#include "common/matrices.h"
#include "control/control.h"
#include "develop/imageop.h"
#include "develop/imageop_math.h"
#include "develop/pixelpipe.h"
Expand Down Expand Up @@ -672,15 +673,20 @@ static gboolean _ioppr_generate_profile_info(dt_iop_order_iccprofile_info_t *pro
const char *filename,
const int intent)
{
gboolean error = FALSE;
cmsHPROFILE *rgb_profile = NULL;

_mark_as_nonmatrix_profile(profile_info);
_clear_lut_curves(profile_info);

profile_info->nonlinearlut = 0;
profile_info->grey = 0.1842f;

if(type == DT_COLORSPACE_FILE
&& (!filename || !filename[0] || !g_file_test(filename, G_FILE_TEST_IS_REGULAR)))
{
dt_print(DT_DEBUG_PARAMS, "[generate_profile_info] icc profile '%s' not available",
filename ? filename : "???");
return TRUE;
}

profile_info->type = type;
g_strlcpy(profile_info->filename, filename, sizeof(profile_info->filename));
profile_info->intent = intent;
Expand All @@ -690,22 +696,14 @@ static gboolean _ioppr_generate_profile_info(dt_iop_order_iccprofile_info_t *pro

const dt_colorspaces_color_profile_t *profile =
dt_colorspaces_get_profile(type, filename, DT_PROFILE_DIRECTION_ANY);
if(profile)
rgb_profile = profile->profile;

cmsHPROFILE *rgb_profile = profile ? profile->profile : NULL;;

if(type == DT_COLORSPACE_DISPLAY || type == DT_COLORSPACE_DISPLAY2)
pthread_rwlock_unlock(&darktable.color_profiles->xprofile_lock);

cmsColorSpaceSignature rgb_profile_color_space = rgb_profile ? cmsGetColorSpace(rgb_profile) : 0;

if(filename[0])
dt_print(DT_DEBUG_PIPE, "[generate_profile_info] profile `%s': color space `%c%c%c%c'",
filename,
(char)(rgb_profile_color_space>>24),
(char)(rgb_profile_color_space>>16),
(char)(rgb_profile_color_space>>8),
(char)(rgb_profile_color_space));

// get the matrix
if(rgb_profile)
{
Expand Down Expand Up @@ -769,7 +767,17 @@ static gboolean _ioppr_generate_profile_info(dt_iop_order_iccprofile_info_t *pro
profile_info->nonlinearlut);
}

return error;
if(type == DT_COLORSPACE_FILE)
dt_print(DT_DEBUG_PIPE, "[generate_profile_info] profile `%s': color space %c%c%c%c%s%s",
filename,
(char)(rgb_profile_color_space>>24),
(char)(rgb_profile_color_space>>16),
(char)(rgb_profile_color_space>>8),
(char)(rgb_profile_color_space),
dt_is_valid_colormatrix(profile_info->matrix_in[0][0]) ? "" : " NO matrix provided",
profile_info->nonlinearlut ? " nonlinearlut" : "");

return FALSE;
}

dt_iop_order_iccprofile_info_t *
Expand Down Expand Up @@ -871,6 +879,9 @@ dt_ioppr_set_pipe_work_profile_info(struct dt_develop_t *dev,
dt_iop_order_iccprofile_info_t *profile_info =
dt_ioppr_add_profile_info_to_list(dev, type, filename, intent);

if(!profile_info && (pipe->type & DT_DEV_PIXELPIPE_PREVIEW) && (type == DT_COLORSPACE_FILE))
dt_control_log(_("work icc profile '%s' missing"), filename);

if(profile_info == NULL
|| !dt_is_valid_colormatrix(profile_info->matrix_in[0][0])
|| !dt_is_valid_colormatrix(profile_info->matrix_out[0][0]))
Expand Down Expand Up @@ -899,6 +910,9 @@ dt_ioppr_set_pipe_input_profile_info(struct dt_develop_t *dev,

if(profile_info == NULL)
{
if((pipe->type & DT_DEV_PIXELPIPE_PREVIEW) && (type == DT_COLORSPACE_FILE))
dt_control_log(_("input icc profile '%s' missing"), filename);

dt_print(DT_DEBUG_PIPE,
"[dt_ioppr_set_pipe_input_profile_info] profile `%s' in `%s'"
" replaced by linear Rec2020",
Expand Down Expand Up @@ -932,6 +946,9 @@ dt_ioppr_set_pipe_output_profile_info(struct dt_develop_t *dev,
dt_iop_order_iccprofile_info_t *profile_info =
dt_ioppr_add_profile_info_to_list(dev, type, filename, intent);

if(!profile_info && (pipe->type & DT_DEV_PIXELPIPE_PREVIEW) && (type == DT_COLORSPACE_FILE))
dt_control_log(_("output icc profile '%s' missing"), filename);

if(profile_info == NULL
|| !dt_is_valid_colormatrix(profile_info->matrix_in[0][0])
|| !dt_is_valid_colormatrix(profile_info->matrix_out[0][0]))
Expand Down
Loading