cmsHPROFILE dt_colorspaces_create_output_profile(const int imgid) { char profile[1024]; profile[0] = '\0'; // db lookup colorout params, and dt_conf_() for override gchar *overprofile = dt_conf_get_string("plugins/lighttable/export/iccprofile"); if(!overprofile || !strcmp(overprofile, "image")) { const dt_iop_colorout_params_t *params; // sqlite: sqlite3_stmt *stmt; DT_DEBUG_SQLITE3_PREPARE_V2(dt_database_get(darktable.db), "select op_params from history where imgid=?1 and operation='colorout'", -1, &stmt, NULL); DT_DEBUG_SQLITE3_BIND_INT(stmt, 1, imgid); if(sqlite3_step(stmt) == SQLITE_ROW) { params = sqlite3_column_blob(stmt, 0); g_strlcpy(profile, params->iccprofile, 1024); } sqlite3_finalize(stmt); } if(!overprofile && profile[0] == '\0') { g_strlcpy(profile, "sRGB", 1024); } else if(profile[0] == '\0') { g_strlcpy(profile, overprofile, 1024); } if(overprofile) { g_free(overprofile); } cmsHPROFILE output = NULL; if(!strcmp(profile, "sRGB")) output = dt_colorspaces_create_srgb_profile(); else if(!strcmp(profile, "linear_rgb")) output = dt_colorspaces_create_linear_rgb_profile(); else if(!strcmp(profile, "XYZ")) output = dt_colorspaces_create_xyz_profile(); else if(!strcmp(profile, "adobergb")) output = dt_colorspaces_create_adobergb_profile(); else if(!strcmp(profile, "X profile") && darktable.control->xprofile_data) output = cmsOpenProfileFromMem(darktable.control->xprofile_data, darktable.control->xprofile_size); else { // else: load file name char filename[1024]; dt_colorspaces_find_profile(filename, 1024, profile, "out"); output = cmsOpenProfileFromFile(filename, "r"); } if(!output) output = dt_colorspaces_create_srgb_profile(); return output; }
static cmsHPROFILE _create_profile(gchar *iccprofile) { cmsHPROFILE profile = NULL; if(!strcmp(iccprofile, "sRGB")) { // default: sRGB profile = dt_colorspaces_create_srgb_profile(); } else if(!strcmp(iccprofile, "linear_rec709_rgb") || !strcmp(iccprofile, "linear_rgb")) { profile = dt_colorspaces_create_linear_rec709_rgb_profile(); } else if(!strcmp(iccprofile, "linear_rec2020_rgb")) { profile = dt_colorspaces_create_linear_rec2020_rgb_profile(); } else if(!strcmp(iccprofile, "adobergb")) { profile = dt_colorspaces_create_adobergb_profile(); } else if(!strcmp(iccprofile, "X profile")) { // x default pthread_rwlock_rdlock(&darktable.control->xprofile_lock); if(darktable.control->xprofile_data) profile = cmsOpenProfileFromMem(darktable.control->xprofile_data, darktable.control->xprofile_size); pthread_rwlock_unlock(&darktable.control->xprofile_lock); } else { // else: load file name char filename[PATH_MAX]; dt_colorspaces_find_profile(filename, sizeof(filename), iccprofile, "out"); profile = cmsOpenProfileFromFile(filename, "r"); } /* if no match lets fallback to srgb profile */ if (!profile) profile = dt_colorspaces_create_srgb_profile(); return profile; }
static cmsHPROFILE _create_profile(gchar *iccprofile) { cmsHPROFILE profile = NULL; if(!strcmp(iccprofile, "sRGB")) { // default: sRGB profile = dt_colorspaces_create_srgb_profile(); } else if(!strcmp(iccprofile, "linear_rgb")) { profile = dt_colorspaces_create_linear_rgb_profile(); } else if(!strcmp(iccprofile, "adobergb")) { profile = dt_colorspaces_create_adobergb_profile(); } else if(!strcmp(iccprofile, "X profile")) { // x default if(darktable.control->xprofile_data) profile = cmsOpenProfileFromMem(darktable.control->xprofile_data, darktable.control->xprofile_size); else profile = NULL; } else { // else: load file name char filename[1024]; dt_colorspaces_find_profile(filename, 1024, iccprofile, "out"); profile = cmsOpenProfileFromFile(filename, "r"); } /* if no match lets fallback to srgb profile */ if (!profile) profile = dt_colorspaces_create_srgb_profile(); return profile; }