summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Hughes <richard@hughsie.com>2013-08-01 15:45:56 +0100
committerRichard Hughes <richard@hughsie.com>2013-08-01 15:51:51 +0100
commit10bfb54d26f0902de5ac1b9f3882dad3bc27cb48 (patch)
treef4002cf687873852ab2379de883291235d9e1732
parentefea2861e9cccce0d8f86c542d513dfb685af0cc (diff)
downloadcolord-10bfb54d26f0902de5ac1b9f3882dad3bc27cb48.tar.gz
libcolord: Add cd_icc_create_default() to use the default sRGB profile
This is sometimes a lot faster than loading the on-disk sRGB profile due to things like transalations and other metadata that is not needed for the transform.
-rw-r--r--lib/colord/cd-icc.c52
-rw-r--r--lib/colord/cd-icc.h3
2 files changed, 55 insertions, 0 deletions
diff --git a/lib/colord/cd-icc.c b/lib/colord/cd-icc.c
index f8ecbc8..1cba0cc 100644
--- a/lib/colord/cd-icc.c
+++ b/lib/colord/cd-icc.c
@@ -3177,6 +3177,58 @@ cd_icc_get_white (CdIcc *icc)
}
/**
+ * cd_icc_create_default:
+ * @icc: A valid #CdIcc
+ * @error: A #GError, or %NULL
+ *
+ * Creates a default sRGB ICC profile.
+ *
+ * Return value: %TRUE for success
+ *
+ * Since: 1.1.2
+ **/
+gboolean
+cd_icc_create_default (CdIcc *icc, GError **error)
+{
+ CdIccPrivate *priv = icc->priv;
+ gboolean ret = TRUE;
+
+ /* setup error handler */
+ cmsSetLogErrorHandler (cd_icc_lcms2_error_cb);
+
+ /* not loaded */
+ if (priv->lcms_profile != NULL) {
+ ret = FALSE;
+ g_set_error_literal (error,
+ CD_ICC_ERROR,
+ CD_ICC_ERROR_FAILED_TO_CREATE,
+ "already loaded or generated");
+ goto out;
+ }
+
+ /* create our generated ICC */
+ priv->lcms_profile = cmsCreate_sRGBProfileTHR (icc);
+ if (priv->lcms_profile == NULL) {
+ ret = FALSE;
+ g_set_error (error,
+ CD_ICC_ERROR,
+ CD_ICC_ERROR_FAILED_TO_CREATE,
+ "failed to create sRGB profile");
+ goto out;
+ }
+
+ /* set any extra profile metadata */
+ cd_icc_add_metadata (icc,
+ CD_PROFILE_METADATA_DATA_SOURCE,
+ CD_PROFILE_METADATA_DATA_SOURCE_STANDARD);
+ cd_icc_add_metadata (icc,
+ CD_PROFILE_METADATA_STANDARD_SPACE,
+ cd_standard_space_to_string (CD_STANDARD_SPACE_SRGB));
+out:
+ return ret;
+}
+
+/**
* cd_icc_create_from_edid:
* @icc: A valid #CdIcc
* @gamma_value: approximate device gamma
diff --git a/lib/colord/cd-icc.h b/lib/colord/cd-icc.h
index 85bd0a3..b3bfec8 100644
--- a/lib/colord/cd-icc.h
+++ b/lib/colord/cd-icc.h
@@ -256,6 +256,9 @@ gboolean cd_icc_create_from_edid (CdIcc *icc,
const CdColorYxy *white,
GError **error)
G_GNUC_WARN_UNUSED_RESULT;
+gboolean cd_icc_create_default (CdIcc *icc,
+ GError **error)
+ G_GNUC_WARN_UNUSED_RESULT;
GPtrArray *cd_icc_get_vcgt (CdIcc *icc,
guint size,
GError **error)