[gimp/metadata-browser] Bug 675558 - switch from lcms-1 to lcms-2
- From: Roman Joost <romanofski src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp/metadata-browser] Bug 675558 - switch from lcms-1 to lcms-2
- Date: Thu, 13 Sep 2012 00:39:53 +0000 (UTC)
commit adbcc7f1a807b23edbb9499961b7a1c0a34ee2ec
Author: Michael Natterer <mitch gimp org>
Date: Mon Sep 3 20:03:53 2012 +0200
Bug 675558 - switch from lcms-1 to lcms-2
Applied modified patch from Hartmut Kuhse which ports to lcms-2.
configure.ac | 4 +-
modules/color-selector-cmyk-lcms.c | 51 ++++++++++++++++++---
modules/display-filter-lcms.c | 88 +++++++++++++++++++++++++++++-------
modules/display-filter-proof.c | 38 +++++++++++++---
plug-ins/common/lcms.c | 83 ++++++++++++++++++++++++++-------
plug-ins/file-jpeg/jpeg-load.c | 10 ++--
6 files changed, 219 insertions(+), 55 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index 1ce04a3..8160f1a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -61,7 +61,7 @@ m4_define([libcurl_required_version], [7.15.1])
m4_define([dbus_glib_required_version], [0.70])
m4_define([libgudev_required_version], [167])
m4_define([exif_required_version], [0.6.15])
-m4_define([lcms_required_version], [1.16])
+m4_define([lcms_required_version], [2.2])
m4_define([libpng_required_version], [1.2.37])
m4_define([liblzma_required_version], [5.0.0])
@@ -1569,7 +1569,7 @@ AC_ARG_WITH(lcms, [ --without-lcms build without lcms support])
have_lcms="no (lcms support disabled)"
if test "x$with_lcms" != xno; then
have_lcms=yes
- PKG_CHECK_MODULES(LCMS, lcms >= lcms_required_version,
+ PKG_CHECK_MODULES(LCMS, lcms2 >= lcms_required_version,
AC_DEFINE(HAVE_LCMS, 1, [Define to 1 if lcms is available])
LCMS='lcms$(EXEEXT)',
have_lcms="no (lcms not found or unusable)")
diff --git a/modules/color-selector-cmyk-lcms.c b/modules/color-selector-cmyk-lcms.c
index 45d5177..426fea8 100644
--- a/modules/color-selector-cmyk-lcms.c
+++ b/modules/color-selector-cmyk-lcms.c
@@ -19,7 +19,7 @@
#include <glib.h> /* lcms.h uses the "inline" keyword */
-#include <lcms.h>
+#include <lcms2.h>
#include <gegl.h>
#include <gtk/gtk.h>
@@ -152,8 +152,6 @@ colorsel_cmyk_class_init (ColorselCmykClass *klass)
selector_class->stock_id = GTK_STOCK_PRINT; /* FIXME */
selector_class->set_color = colorsel_cmyk_set_color;
selector_class->set_config = colorsel_cmyk_set_config;
-
- cmsErrorAction (LCMS_ERROR_IGNORE);
}
static void
@@ -392,10 +390,12 @@ colorsel_cmyk_config_changed (ColorselCmyk *module)
{
GimpColorSelector *selector = GIMP_COLOR_SELECTOR (module);
GimpColorConfig *config = module->config;
- DWORD flags = 0;
+ cmsUInt32Number flags = 0;
+ cmsUInt32Number descSize = 0;
cmsHPROFILE rgb_profile;
cmsHPROFILE cmyk_profile;
- const gchar *name;
+ gchar *descData;
+ const gchar *name = NULL;
gchar *text;
if (module->rgb2cmyk)
@@ -420,13 +420,47 @@ colorsel_cmyk_config_changed (ColorselCmyk *module)
! (cmyk_profile = cmsOpenProfileFromFile (config->cmyk_profile, "r")))
goto out;
- name = cmsTakeProductDesc (cmyk_profile);
+ descSize = cmsGetProfileInfoASCII (cmyk_profile, cmsInfoDescription,
+ "en", "US", NULL, 0);
+ if (descSize > 0)
+ {
+ descData = g_new (gchar, descSize + 1);
+ descSize = cmsGetProfileInfoASCII (cmyk_profile, cmsInfoDescription,
+ "en", "US", descData, descSize);
+ if (descSize > 0)
+ {
+ name = descData;
+ }
+ else
+ {
+ g_free (descData);
+ descData = NULL;
+ }
+ }
+
if (name && ! g_utf8_validate (name, -1, NULL))
name = _("(invalid UTF-8 string)");
if (! name)
{
- name = cmsTakeProductName (cmyk_profile);
+ descSize = cmsGetProfileInfoASCII (cmyk_profile, cmsInfoModel,
+ "en", "US", NULL, 0);
+ if (descSize > 0)
+ {
+ descData = g_new (gchar, descSize + 1);
+ descSize = cmsGetProfileInfoASCII (cmyk_profile, cmsInfoModel,
+ "en", "US", descData, descSize);
+ if (descSize > 0)
+ {
+ name = descData;
+ }
+ else
+ {
+ g_free (descData);
+ descData = NULL;
+ }
+ }
+
if (name && ! g_utf8_validate (name, -1, NULL))
name = _("(invalid UTF-8 string)");
}
@@ -436,6 +470,9 @@ colorsel_cmyk_config_changed (ColorselCmyk *module)
gimp_help_set_help_data (module->name_label, text, NULL);
g_free (text);
+ if (descData)
+ g_free (descData);
+
rgb_profile = color_config_get_rgb_profile (config);
if (config->display_intent ==
diff --git a/modules/display-filter-lcms.c b/modules/display-filter-lcms.c
index 2c14072..cf50502 100644
--- a/modules/display-filter-lcms.c
+++ b/modules/display-filter-lcms.c
@@ -19,13 +19,15 @@
#include <glib.h> /* lcms.h uses the "inline" keyword */
+#include <string.h>
+
#ifdef G_OS_WIN32
#define STRICT
#include <windows.h>
#define LCMS_WIN_TYPES_ALREADY_DEFINED
#endif
-#include <lcms.h>
+#include <lcms2.h>
#include <gegl.h>
#include <gtk/gtk.h>
@@ -36,6 +38,7 @@
#include <CoreServices/CoreServices.h>
#endif
+#include "libgimpbase/gimpbase.h"
#include "libgimpcolor/gimpcolor.h"
#include "libgimpconfig/gimpconfig.h"
#include "libgimpmath/gimpmath.h"
@@ -134,8 +137,6 @@ cdisplay_lcms_class_init (CdisplayLcmsClass *klass)
display_class->configure = cdisplay_lcms_configure;
display_class->convert_surface = cdisplay_lcms_convert_surface;
display_class->changed = cdisplay_lcms_changed;
-
- cmsErrorAction (LCMS_ERROR_IGNORE);
}
static void
@@ -165,26 +166,71 @@ cdisplay_lcms_finalize (GObject *object)
static void
cdisplay_lcms_profile_get_info (cmsHPROFILE profile,
- const gchar **name,
- const gchar **info)
+ gchar **name,
+ gchar **info)
{
if (profile)
{
- *name = cmsTakeProductDesc (profile);
+ cmsUInt32Number descSize;
+ gchar *descData;
+
+ descSize = cmsGetProfileInfoASCII (profile, cmsInfoDescription,
+ "en", "US", NULL, 0);
+ if (descSize > 0)
+ {
+ descData = g_new (gchar, descSize + 1);
+ descSize = cmsGetProfileInfoASCII (profile, cmsInfoDescription,
+ "en", "US", descData, descSize);
+ if (descSize > 0)
+ *name = descData;
+ else
+ g_free (descData);
+ }
if (! *name)
- *name = cmsTakeProductName (profile);
+ {
+ descSize = cmsGetProfileInfoASCII (profile, cmsInfoModel,
+ "en", "US", NULL, 0);
+ if (descSize > 0)
+ {
+ descData = g_new (gchar, descSize + 1);
+ descSize = cmsGetProfileInfoASCII(profile, cmsInfoModel,
+ "en", "US", descData, descSize);
+ if (descSize > 0)
+ *name = descData;
+ else
+ g_free (descData);
+ }
+ }
if (*name && ! g_utf8_validate (*name, -1, NULL))
- *name = _("(invalid UTF-8 string)");
+ {
+ g_free (*name);
+ *name = g_strdup (_("(invalid UTF-8 string)"));
+ }
+
+ descSize = cmsGetProfileInfoASCII (profile, cmsInfoManufacturer,
+ "en", "US", NULL, 0);
+ if (descSize > 0)
+ {
+ descData = g_new (gchar, descSize + 1);
+ descSize = cmsGetProfileInfoASCII (profile, cmsInfoManufacturer,
+ "en", "US", descData, descSize);
+ if (descSize > 0)
+ *info = descData;
+ else
+ g_free (descData);
+ }
- *info = cmsTakeProductInfo (profile);
- if (*name && ! g_utf8_validate (*info, -1, NULL))
- *info = NULL;
+ if (*info && ! g_utf8_validate (*info, -1, NULL))
+ {
+ g_free (*info);
+ *info = NULL;
+ }
}
else
{
- *name = _("None");
+ *name = g_strdup (_("None"));
*info = NULL;
}
}
@@ -314,7 +360,8 @@ cdisplay_lcms_changed (GimpColorDisplay *display)
cmsHPROFILE src_profile = NULL;
cmsHPROFILE dest_profile = NULL;
cmsHPROFILE proof_profile = NULL;
- DWORD flags = 0;
+ cmsUInt32Number flags = 0;
+ cmsUInt16Number alarmCodes[cmsMAXCHANNELS] = { 0 };
if (lcms->transform)
{
@@ -364,7 +411,11 @@ cdisplay_lcms_changed (GimpColorDisplay *display)
gimp_rgb_get_uchar (&config->out_of_gamut_color, &r, &g, &b);
- cmsSetAlarmCodes (r, g, b);
+ alarmCodes[0] = (cmsUInt16Number) r;
+ alarmCodes[1] = (cmsUInt16Number) g;
+ alarmCodes[2] = (cmsUInt16Number) b;
+
+ cmsSetAlarmCodes (alarmCodes);
}
lcms->transform = cmsCreateProofingTransform (src_profile, TYPE_ARGB_8,
@@ -399,7 +450,7 @@ cdisplay_lcms_changed (GimpColorDisplay *display)
static gboolean
cdisplay_lcms_profile_is_rgb (cmsHPROFILE profile)
{
- return (cmsGetColorSpace (profile) == icSigRgbData);
+ return (cmsGetColorSpace (profile) == cmsSigRgbData);
}
static cmsHPROFILE
@@ -620,8 +671,8 @@ cdisplay_lcms_update_profile_label (CdisplayLcms *lcms,
{
GtkWidget *label;
cmsHPROFILE profile = NULL;
- const gchar *text;
- const gchar *tooltip;
+ gchar *text = NULL;
+ gchar *tooltip = NULL;
label = g_object_get_data (G_OBJECT (lcms), name);
@@ -650,6 +701,9 @@ cdisplay_lcms_update_profile_label (CdisplayLcms *lcms,
gtk_label_set_text (GTK_LABEL (label), text);
gimp_help_set_help_data (label, tooltip, NULL);
+ g_free (text);
+ g_free (tooltip);
+
if (profile)
cmsCloseProfile (profile);
}
diff --git a/modules/display-filter-proof.c b/modules/display-filter-proof.c
index 3ef4311..0be05a1 100644
--- a/modules/display-filter-proof.c
+++ b/modules/display-filter-proof.c
@@ -19,7 +19,7 @@
#include <glib.h> /* lcms.h uses the "inline" keyword */
-#include <lcms.h>
+#include <lcms2.h>
#include <gegl.h>
#include <gtk/gtk.h>
@@ -146,8 +146,6 @@ cdisplay_proof_class_init (CdisplayProofClass *klass)
display_class->convert_surface = cdisplay_proof_convert_surface;
display_class->configure = cdisplay_proof_configure;
display_class->changed = cdisplay_proof_changed;
-
- cmsErrorAction (LCMS_ERROR_IGNORE);
}
static void
@@ -299,9 +297,37 @@ cdisplay_proof_combo_box_set_active (GimpColorProfileComboBox *combo,
if (profile)
{
- label = gimp_any_to_utf8 (cmsTakeProductDesc (profile), -1, NULL);
+ cmsUInt32Number descSize;
+ gchar *descData;
+
+ descSize = cmsGetProfileInfoASCII(profile, cmsInfoDescription,
+ "en", "US", NULL, 0);
+ if (descSize > 0)
+ {
+ descData = g_new (gchar, descSize + 1);
+ descSize = cmsGetProfileInfoASCII (profile, cmsInfoDescription,
+ "en", "US", descData, descSize);
+ if (descSize > 0)
+ label = gimp_any_to_utf8 (descData, -1, NULL);
+
+ g_free (descData);
+ }
+
if (! label)
- label = gimp_any_to_utf8 (cmsTakeProductName (profile), -1, NULL);
+ {
+ descSize = cmsGetProfileInfoASCII (profile, cmsInfoModel,
+ "en", "US", NULL, 0);
+ if (descSize > 0)
+ {
+ descData = g_new (gchar, descSize + 1);
+ descSize = cmsGetProfileInfoASCII (profile, cmsInfoModel,
+ "en", "US", descData, descSize);
+ if (descSize > 0)
+ label = gimp_any_to_utf8 (descData, -1, NULL);
+
+ g_free (descData);
+ }
+ }
cmsCloseProfile (profile);
}
@@ -466,7 +492,7 @@ cdisplay_proof_changed (GimpColorDisplay *display)
if (proofProfile)
{
- DWORD flags = cmsFLAGS_SOFTPROOFING;
+ cmsUInt32Number flags = cmsFLAGS_SOFTPROOFING;
if (proof->bpc)
flags |= cmsFLAGS_BLACKPOINTCOMPENSATION;
diff --git a/plug-ins/common/lcms.c b/plug-ins/common/lcms.c
index d2661d8..56eb6c1 100644
--- a/plug-ins/common/lcms.c
+++ b/plug-ins/common/lcms.c
@@ -24,7 +24,7 @@
#include <glib.h> /* lcms.h uses the "inline" keyword */
-#include <lcms.h>
+#include <lcms2.h>
#include <libgimp/gimp.h>
#include <libgimp/gimpui.h>
@@ -428,8 +428,6 @@ run (const gchar *name,
}
}
- cmsErrorAction (LCMS_ERROR_SHOW);
-
switch (proc)
{
case PROC_SET:
@@ -459,8 +457,6 @@ run (const gchar *name,
gchar *desc = NULL;
gchar *info = NULL;
- cmsErrorAction (LCMS_ERROR_IGNORE);
-
if (proc == PROC_INFO)
status = lcms_icc_info (config, image, &name, &desc, &info);
else
@@ -496,25 +492,76 @@ run (const gchar *name,
static gchar *
lcms_icc_profile_get_name (cmsHPROFILE profile)
{
- return gimp_any_to_utf8 (cmsTakeProductName (profile), -1, NULL);
+ cmsUInt32Number descSize;
+ gchar *descData;
+ gchar *name = NULL;
+
+ descSize = cmsGetProfileInfoASCII (profile, cmsInfoModel,
+ "en", "US", NULL, 0);
+ if (descSize > 0)
+ {
+ descData = g_new (gchar, descSize + 1);
+ descSize = cmsGetProfileInfoASCII (profile, cmsInfoModel,
+ "en", "US", descData, descSize);
+ if (descSize > 0)
+ name = gimp_any_to_utf8 (descData, -1, NULL);
+
+ g_free (descData);
+ }
+
+ return name;
}
static gchar *
lcms_icc_profile_get_desc (cmsHPROFILE profile)
{
- return gimp_any_to_utf8 (cmsTakeProductDesc (profile), -1, NULL);
+ cmsUInt32Number descSize;
+ gchar *descData;
+ gchar desc = NULL;
+
+ descSize = cmsGetProfileInfoASCII (profile, cmsInfoDescription,
+ "en", "US", NULL, 0);
+ if (descSize > 0)
+ {
+ descData = g_new (gchar, descSize + 1);
+ descSize = cmsGetProfileInfoASCII (profile, cmsInfoDescription,
+ "en", "US", descData, descSize);
+ if (descSize > 0)
+ desc = gimp_any_to_utf8 (descData, -1, NULL);
+
+ g_free (descData);
+ }
+
+ return desc;
}
static gchar *
lcms_icc_profile_get_info (cmsHPROFILE profile)
{
- return gimp_any_to_utf8 (cmsTakeProductInfo (profile), -1, NULL);
+ cmsUInt32Number descSize;
+ gchar *descData;
+ gchar info = NULL;
+
+ descSize = cmsGetProfileInfoASCII (profile, cmsInfoModel,
+ "en", "US", NULL, 0);
+ if (descSize > 0)
+ {
+ descData = g_new (gchar, descSize + 1);
+ descSize = cmsGetProfileInfoASCII (profile, cmsInfoModel,
+ "en", "US", descData, descSize);
+ if (descSize > 0)
+ info = gimp_any_to_utf8 (descData, -1, NULL);
+
+ g_free (descData);
+ }
+
+ return info;
}
static gboolean
lcms_icc_profile_is_rgb (cmsHPROFILE profile)
{
- return (cmsGetColorSpace (profile) == icSigRgbData);
+ return (cmsGetColorSpace (profile) == cmsSigRgbData);
}
static GimpPDBStatusType
@@ -738,8 +785,8 @@ lcms_calculate_checksum (const gchar *data,
GChecksum *md5 = g_checksum_new (G_CHECKSUM_MD5);
g_checksum_update (md5,
- (const guchar *) data + sizeof (icHeader),
- len - sizeof (icHeader));
+ (const guchar *) data + sizeof (cmsICCHeader),
+ len - sizeof (cmsICCHeader));
len = 16;
g_checksum_get_digest (md5, digest, &len);
@@ -934,18 +981,18 @@ lcms_image_transform_rgb (gint32 image,
GimpColorRenderingIntent intent,
gboolean bpc)
{
- cmsHTRANSFORM transform = NULL;
- DWORD last_format = 0;
- gint *layers;
- gint num_layers;
- gint i;
+ cmsHTRANSFORM transform = NULL;
+ cmsUInt32Number last_format = 0;
+ gint *layers;
+ gint num_layers;
+ gint i;
layers = gimp_image_get_layers (image, &num_layers);
for (i = 0; i < num_layers; i++)
{
- GimpDrawable *drawable = gimp_drawable_get (layers[i]);
- DWORD format;
+ GimpDrawable *drawable = gimp_drawable_get (layers[i]);
+ cmsUInt32Number format;
switch (drawable->bpp)
{
diff --git a/plug-ins/file-jpeg/jpeg-load.c b/plug-ins/file-jpeg/jpeg-load.c
index 5ff858b..5a7d5f0 100644
--- a/plug-ins/file-jpeg/jpeg-load.c
+++ b/plug-ins/file-jpeg/jpeg-load.c
@@ -31,7 +31,7 @@
#endif /* HAVE_LIBEXIF */
#ifdef HAVE_LCMS
-#include <lcms.h>
+#include <lcms2.h>
#endif
#include <libgimp/gimp.h>
@@ -969,7 +969,7 @@ jpeg_load_cmyk_transform (guint8 *profile_data,
GimpColorConfig *config = gimp_get_color_configuration ();
cmsHPROFILE cmyk_profile = NULL;
cmsHPROFILE rgb_profile = NULL;
- DWORD flags = 0;
+ cmsUInt32Number flags = 0;
cmsHTRANSFORM transform;
/* try to load the embedded CMYK profile */
@@ -979,7 +979,7 @@ jpeg_load_cmyk_transform (guint8 *profile_data,
if (cmyk_profile)
{
- if (! cmsGetColorSpace (cmyk_profile) == icSigCmykData)
+ if (! cmsGetColorSpace (cmyk_profile) == cmsSigCmykData)
{
cmsCloseProfile (cmyk_profile);
cmyk_profile = NULL;
@@ -992,7 +992,7 @@ jpeg_load_cmyk_transform (guint8 *profile_data,
{
cmyk_profile = cmsOpenProfileFromFile (config->cmyk_profile, "r");
- if (cmyk_profile && ! cmsGetColorSpace (cmyk_profile) == icSigCmykData)
+ if (cmyk_profile && ! cmsGetColorSpace (cmyk_profile) == cmsSigCmykData)
{
cmsCloseProfile (cmyk_profile);
cmyk_profile = NULL;
@@ -1011,7 +1011,7 @@ jpeg_load_cmyk_transform (guint8 *profile_data,
{
rgb_profile = cmsOpenProfileFromFile (config->rgb_profile, "r");
- if (rgb_profile && ! cmsGetColorSpace (rgb_profile) == icSigRgbData)
+ if (rgb_profile && ! cmsGetColorSpace (rgb_profile) == cmsSigRgbData)
{
cmsCloseProfile (rgb_profile);
rgb_profile = NULL;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]