diff options
author | Richard Hughes <richard@hughsie.com> | 2013-08-01 15:45:56 +0100 |
---|---|---|
committer | Richard Hughes <richard@hughsie.com> | 2013-08-01 15:51:51 +0100 |
commit | 10bfb54d26f0902de5ac1b9f3882dad3bc27cb48 (patch) | |
tree | f4002cf687873852ab2379de883291235d9e1732 | |
parent | efea2861e9cccce0d8f86c542d513dfb685af0cc (diff) | |
download | colord-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.c | 52 | ||||
-rw-r--r-- | lib/colord/cd-icc.h | 3 |
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) |