[gnome-color-manager] trivial: only run the profile through the RGB matrix if it is an RGB profile



commit db97d8ad65415af15cf3bf9bd91ce4ccf656fd03
Author: Richard Hughes <richard hughsie com>
Date:   Fri Dec 11 12:19:20 2009 +0000

    trivial: only run the profile through the RGB matrix if it is an RGB profile

 src/gcm-profile.c |  136 ++++++++++++++++++++++++++--------------------------
 1 files changed, 68 insertions(+), 68 deletions(-)
---
diff --git a/src/gcm-profile.c b/src/gcm-profile.c
index ddd314e..a6abf96 100644
--- a/src/gcm-profile.c
+++ b/src/gcm-profile.c
@@ -545,6 +545,8 @@ gcm_profile_parse_data (GcmProfile *profile, const guint8 *data, gsize length, G
 	cmsCIEXYZ cie_xyz;
 	cmsCIEXYZTRIPLE cie_illum;
 	struct tm created;
+	cmsHPROFILE xyz_profile;
+	cmsHTRANSFORM transform;
 
 	g_return_val_if_fail (GCM_IS_PROFILE (profile), FALSE);
 	g_return_val_if_fail (data != NULL, FALSE);
@@ -585,13 +587,76 @@ gcm_profile_parse_data (GcmProfile *profile, const guint8 *data, gsize length, G
 		egg_warning ("failed to get black point");
 	}
 
+	/* get the profile type */
+	profile_class = cmsGetDeviceClass (priv->lcms_profile);
+	switch (profile_class) {
+	case icSigInputClass:
+		priv->profile_type = GCM_PROFILE_TYPE_INPUT_DEVICE;
+		break;
+	case icSigDisplayClass:
+		priv->profile_type = GCM_PROFILE_TYPE_DISPLAY_DEVICE;
+		break;
+	case icSigOutputClass:
+		priv->profile_type = GCM_PROFILE_TYPE_OUTPUT_DEVICE;
+		break;
+	case icSigLinkClass:
+		priv->profile_type = GCM_PROFILE_TYPE_DEVICELINK;
+		break;
+	case icSigColorSpaceClass:
+		priv->profile_type = GCM_PROFILE_TYPE_COLORSPACE_CONVERSION;
+		break;
+	case icSigAbstractClass:
+		priv->profile_type = GCM_PROFILE_TYPE_ABSTRACT;
+		break;
+	case icSigNamedColorClass:
+		priv->profile_type = GCM_PROFILE_TYPE_NAMED_COLOR;
+		break;
+	default:
+		priv->profile_type = GCM_PROFILE_TYPE_UNKNOWN;
+	}
+
+	/* get colorspace */
+	color_space = cmsGetColorSpace (priv->lcms_profile);
+	switch (color_space) {
+	case icSigXYZData:
+		priv->colorspace = GCM_PROFILE_COLORSPACE_XYZ;
+		break;
+	case icSigLabData:
+		priv->colorspace = GCM_PROFILE_COLORSPACE_LAB;
+		break;
+	case icSigLuvData:
+		priv->colorspace = GCM_PROFILE_COLORSPACE_LUV;
+		break;
+	case icSigYCbCrData:
+		priv->colorspace = GCM_PROFILE_COLORSPACE_YCBCR;
+		break;
+	case icSigYxyData:
+		priv->colorspace = GCM_PROFILE_COLORSPACE_YXY;
+		break;
+	case icSigRgbData:
+		priv->colorspace = GCM_PROFILE_COLORSPACE_RGB;
+		break;
+	case icSigGrayData:
+		priv->colorspace = GCM_PROFILE_COLORSPACE_GRAY;
+		break;
+	case icSigHsvData:
+		priv->colorspace = GCM_PROFILE_COLORSPACE_HSV;
+		break;
+	case icSigCmykData:
+		priv->colorspace = GCM_PROFILE_COLORSPACE_CMYK;
+		break;
+	case icSigCmyData:
+		priv->colorspace = GCM_PROFILE_COLORSPACE_CMY;
+		break;
+	default:
+		priv->colorspace = GCM_PROFILE_COLORSPACE_UNKNOWN;
+	}
+
 	/* get primary illuminants */
 	ret = cmsTakeColorants (&cie_illum, priv->lcms_profile);
 
 	/* geting the illuminants failed, try running it through the profile */
-	if (!ret) {
-		cmsHPROFILE xyz_profile;
-		cmsHTRANSFORM transform;
+	if (!ret && color_space == icSigRgbData) {
 		gdouble rgb_values[3];
 
 		/* create a transform from profile to XYZ */
@@ -655,71 +720,6 @@ gcm_profile_parse_data (GcmProfile *profile, const guint8 *data, gsize length, G
 	if (ret)
 		priv->datetime = gcm_utils_format_date_time (1900+created.tm_year, created.tm_mon+1, created.tm_mday, created.tm_hour, created.tm_min, created.tm_sec);
 
-	/* get the profile type */
-	profile_class = cmsGetDeviceClass (priv->lcms_profile);
-	switch (profile_class) {
-	case icSigInputClass:
-		priv->profile_type = GCM_PROFILE_TYPE_INPUT_DEVICE;
-		break;
-	case icSigDisplayClass:
-		priv->profile_type = GCM_PROFILE_TYPE_DISPLAY_DEVICE;
-		break;
-	case icSigOutputClass:
-		priv->profile_type = GCM_PROFILE_TYPE_OUTPUT_DEVICE;
-		break;
-	case icSigLinkClass:
-		priv->profile_type = GCM_PROFILE_TYPE_DEVICELINK;
-		break;
-	case icSigColorSpaceClass:
-		priv->profile_type = GCM_PROFILE_TYPE_COLORSPACE_CONVERSION;
-		break;
-	case icSigAbstractClass:
-		priv->profile_type = GCM_PROFILE_TYPE_ABSTRACT;
-		break;
-	case icSigNamedColorClass:
-		priv->profile_type = GCM_PROFILE_TYPE_NAMED_COLOR;
-		break;
-	default:
-		priv->profile_type = GCM_PROFILE_TYPE_UNKNOWN;
-	}
-
-	/* get colorspace */
-	color_space = cmsGetColorSpace (priv->lcms_profile);
-	switch (color_space) {
-	case icSigXYZData:
-		priv->colorspace = GCM_PROFILE_COLORSPACE_XYZ;
-		break;
-	case icSigLabData:
-		priv->colorspace = GCM_PROFILE_COLORSPACE_LAB;
-		break;
-	case icSigLuvData:
-		priv->colorspace = GCM_PROFILE_COLORSPACE_LUV;
-		break;
-	case icSigYCbCrData:
-		priv->colorspace = GCM_PROFILE_COLORSPACE_YCBCR;
-		break;
-	case icSigYxyData:
-		priv->colorspace = GCM_PROFILE_COLORSPACE_YXY;
-		break;
-	case icSigRgbData:
-		priv->colorspace = GCM_PROFILE_COLORSPACE_RGB;
-		break;
-	case icSigGrayData:
-		priv->colorspace = GCM_PROFILE_COLORSPACE_GRAY;
-		break;
-	case icSigHsvData:
-		priv->colorspace = GCM_PROFILE_COLORSPACE_HSV;
-		break;
-	case icSigCmykData:
-		priv->colorspace = GCM_PROFILE_COLORSPACE_CMYK;
-		break;
-	case icSigCmyData:
-		priv->colorspace = GCM_PROFILE_COLORSPACE_CMY;
-		break;
-	default:
-		priv->colorspace = GCM_PROFILE_COLORSPACE_UNKNOWN;
-	}
-
 	/* get the number of tags in the file */
 	num_tags = gcm_parser_decode_32 (data + GCM_NUMTAGS);
 	egg_debug ("number of tags: %i", num_tags);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]