diff options
author | Richard Hughes <richard@hughsie.com> | 2013-08-01 15:50:53 +0100 |
---|---|---|
committer | Richard Hughes <richard@hughsie.com> | 2013-08-01 15:51:58 +0100 |
commit | fc2d2cad62860efe51f131a443eada1b70925754 (patch) | |
tree | 261a10ac7284e7f5a1a43a2f2ec032fee49900f8 /client | |
parent | 05e5da3657007617bdc03b654a89f199bc4288e1 (diff) | |
download | colord-fc2d2cad62860efe51f131a443eada1b70925754.tar.gz |
Set 'GAMUT_coverage(srgb)' when generating standard space profiles
Although, obviously not for sRGB itself.
Diffstat (limited to 'client')
-rw-r--r-- | client/cd-create-profile.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/client/cd-create-profile.c b/client/cd-create-profile.c index 60c67b4..1f0d20a 100644 --- a/client/cd-create-profile.c +++ b/client/cd-create-profile.c @@ -740,6 +740,44 @@ out: } /** + * cd_util_icc_set_metadata_coverage: + **/ +static gboolean +cd_util_icc_set_metadata_coverage (CdIcc *icc, GError **error) +{ + CdIcc *icc_srgb = NULL; + const gchar *tmp; + gboolean ret = TRUE; + gchar *coverage_tmp = NULL; + gdouble coverage = 0.0f; + + /* is sRGB? */ + tmp = cd_icc_get_metadata_item (icc, CD_PROFILE_METADATA_STANDARD_SPACE); + if (g_strcmp0 (tmp, "srgb") == 0) + goto out; + + /* calculate coverage (quite expensive to calculate, hence metadata) */ + icc_srgb = cd_icc_new (); + ret = cd_icc_create_default (icc_srgb, error); + if (!ret) + goto out; + ret = cd_icc_utils_get_coverage (icc_srgb, icc, &coverage, error); + if (!ret) + goto out; + if (coverage > 0.0) { + coverage_tmp = g_strdup_printf ("%.2f", coverage); + cd_icc_add_metadata (icc, + "GAMUT_coverage(srgb)", + coverage_tmp); + } +out: + g_free (coverage_tmp); + if (icc_srgb != NULL) + g_object_unref (icc_srgb); + return ret; +} + +/** * cd_util_create_from_xml: **/ static gboolean @@ -821,6 +859,9 @@ cd_util_create_from_xml (CdUtilPrivate *priv, cd_icc_add_metadata (priv->icc, CD_PROFILE_METADATA_STANDARD_SPACE, cd_dom_get_node_data (tmp)); + ret = cd_util_icc_set_metadata_coverage (priv->icc, error); + if (!ret) + goto out; } tmp = cd_dom_get_node (dom, profile, "data_source"); if (tmp != NULL) { |