Blame SOURCES/xsane-0.999-lcms2.patch

c83c6d
From 30af0e2edbf061b71bed9536d826894449f0390d Mon Sep 17 00:00:00 2001
c83c6d
From: Nils Philippsen <nils@redhat.com>
c83c6d
Date: Mon, 23 Sep 2013 16:11:31 +0200
c83c6d
Subject: [PATCH] patch: lcms2
c83c6d
c83c6d
Squashed commit of the following:
c83c6d
c83c6d
commit f975accf7e1a08438b63580ea848457d373200f5
c83c6d
Author: Nils Philippsen <nils@redhat.com>
c83c6d
Date:   Mon Sep 23 14:53:45 2013 +0200
c83c6d
c83c6d
    Add support for lcms 2.x.
c83c6d
---
c83c6d
 configure.in        | 22 ++++++++++++++----
c83c6d
 include/config.h.in |  8 ++++++-
c83c6d
 src/xsane-preview.c |  6 +++--
c83c6d
 src/xsane-save.c    | 38 ++++++++++++++++++++++++++-----
c83c6d
 src/xsane-viewer.c  | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++---
c83c6d
 src/xsane.h         |  8 ++++++-
c83c6d
 6 files changed, 130 insertions(+), 17 deletions(-)
c83c6d
c83c6d
diff --git a/configure.in b/configure.in
c83c6d
index df7b114..3659c97 100644
c83c6d
--- a/configure.in
c83c6d
+++ b/configure.in
c83c6d
@@ -130,7 +130,17 @@ if test "${USE_TIFF}" = "yes"; then
c83c6d
 fi
c83c6d
 
c83c6d
 if test "${USE_LCMS}" = "yes"; then
c83c6d
-  AC_CHECK_LIB(lcms, cmsOpenProfileFromFile)
c83c6d
+  AC_SEARCH_LIBS(cmsOpenProfileFromFile, [lcms2 lcms])
c83c6d
+  if test "${ac_cv_search_cmsOpenProfileFromFile}" != "no"; then
c83c6d
+    AC_DEFINE(HAVE_LIBLCMS, 1, [Define if LCMS is to be used.])
c83c6d
+  fi
c83c6d
+  if test "${ac_cv_search_cmsOpenProfileFromFile}" == "-llcms2"; then
c83c6d
+    AC_DEFINE(HAVE_LIBLCMS2, 1, [Define if you have liblcms2.])
c83c6d
+  else
c83c6d
+    if test "${ac_cv_search_cmsOpenProfileFromFile}" == "-llcms"; then
c83c6d
+      AC_DEFINE(HAVE_LIBLCMS1, 1, [Define if you have liblcms.])
c83c6d
+    fi
c83c6d
+  fi
c83c6d
 fi
c83c6d
 
c83c6d
 dnl Checks for library functions.
c83c6d
@@ -294,10 +304,14 @@ else
c83c6d
   echo "* - PNG  support deactivated                                   *"
c83c6d
 fi
c83c6d
 
c83c6d
-if test "${ac_cv_lib_lcms_cmsOpenProfileFromFile}" = "yes"; then
c83c6d
-  echo "* - LCMS (color management) support activated                  *"
c83c6d
+if test "${ac_cv_search_cmsOpenProfileFromFile}" = "-llcms2"; then
c83c6d
+  echo "* - LCMS (color management) support activated (lcms2)          *"
c83c6d
 else
c83c6d
-  echo "* - LCMS (color management) support deactivated                *"
c83c6d
+  if test "${ac_cv_search_cmsOpenProfileFromFile}" = "-llcms"; then
c83c6d
+    echo "* - LCMS (color management) support activated (lcms)           *"
c83c6d
+  else
c83c6d
+    echo "* - LCMS (color management) support deactivated                *"
c83c6d
+  fi
c83c6d
 fi
c83c6d
 
c83c6d
 echo "*                                                              *"
c83c6d
diff --git a/include/config.h.in b/include/config.h.in
c83c6d
index ecc9637..f9a3e40 100755
c83c6d
--- a/include/config.h.in
c83c6d
+++ b/include/config.h.in
c83c6d
@@ -290,9 +290,15 @@
c83c6d
 /* Define if you have libtiff.  */
c83c6d
 #undef HAVE_LIBTIFF
c83c6d
 
c83c6d
-/* Define if you have liblcms.  */
c83c6d
+/* Define if LCMS is to be used. */
c83c6d
 #undef HAVE_LIBLCMS
c83c6d
 
c83c6d
+/* Define if you have liblcms. */
c83c6d
+#undef HAVE_LIBLCMS1
c83c6d
+
c83c6d
+/* Define if you have liblcms2. */
c83c6d
+#undef HAVE_LIBLCMS2
c83c6d
+
c83c6d
 #ifndef HAVE_STRNCASECMP
c83c6d
   /* OS/2 needs this */
c83c6d
 # define strncasecmp(a, b, c) strnicmp(a, b, c)
c83c6d
diff --git a/src/xsane-preview.c b/src/xsane-preview.c
c83c6d
index 6327ca7..6eaf687 100644
c83c6d
--- a/src/xsane-preview.c
c83c6d
+++ b/src/xsane-preview.c
c83c6d
@@ -6346,8 +6346,8 @@ int preview_do_color_correction(Preview *p)
c83c6d
  cmsHPROFILE hOutProfile = NULL;
c83c6d
  cmsHPROFILE hProofProfile = NULL;
c83c6d
  cmsHTRANSFORM hTransform = NULL;
c83c6d
- DWORD input_format, output_format;
c83c6d
- DWORD cms_flags = 0;
c83c6d
+ cmsUInt32Number input_format, output_format;
c83c6d
+ cmsUInt32Number cms_flags = 0;
c83c6d
  int proof = 0;
c83c6d
  char *cms_proof_icm_profile = NULL;
c83c6d
  int linesize = 0;
c83c6d
@@ -6355,7 +6355,9 @@ int preview_do_color_correction(Preview *p)
c83c6d
 
c83c6d
   DBG(DBG_proc, "preview_do_color_correction\n");
c83c6d
 
c83c6d
+#ifdef HAVE_LIBLCMS1
c83c6d
   cmsErrorAction(LCMS_ERROR_SHOW);
c83c6d
+#endif
c83c6d
 
c83c6d
   if (preferences.cms_bpc)
c83c6d
   {
c83c6d
diff --git a/src/xsane-save.c b/src/xsane-save.c
c83c6d
index 75e0a63..2d0e44b 100644
c83c6d
--- a/src/xsane-save.c
c83c6d
+++ b/src/xsane-save.c
c83c6d
@@ -832,9 +832,9 @@ cmsHTRANSFORM xsane_create_cms_transform(Image_info *image_info, int cms_functio
c83c6d
  cmsHPROFILE hInProfile = NULL;
c83c6d
  cmsHPROFILE hOutProfile = NULL;
c83c6d
  cmsHTRANSFORM hTransform = NULL;
c83c6d
- DWORD cms_input_format;
c83c6d
- DWORD cms_output_format;
c83c6d
- DWORD cms_flags = 0;
c83c6d
+ cmsUInt32Number cms_input_format;
c83c6d
+ cmsUInt32Number cms_output_format;
c83c6d
+ cmsUInt32Number cms_flags = 0;
c83c6d
 
c83c6d
   if (cms_function == XSANE_CMS_FUNCTION_EMBED_SCANNER_ICM_PROFILE)
c83c6d
   {
c83c6d
@@ -843,7 +843,9 @@ cmsHTRANSFORM xsane_create_cms_transform(Image_info *image_info, int cms_functio
c83c6d
 
c83c6d
   DBG(DBG_info, "Prepare CMS transform\n");
c83c6d
 
c83c6d
+#ifdef HAVE_LIBLCMS1
c83c6d
   cmsErrorAction(LCMS_ERROR_SHOW);
c83c6d
+#endif
c83c6d
 
c83c6d
   if (cms_bpc)
c83c6d
   {
c83c6d
@@ -890,10 +892,18 @@ cmsHTRANSFORM xsane_create_cms_transform(Image_info *image_info, int cms_functio
c83c6d
     if (image_info->channels == 1) /* == 1 (grayscale) */
c83c6d
     {
c83c6d
 #if 1 /* xxx oli */
c83c6d
+# ifdef HAVE_LIBLCMS2
c83c6d
+     cmsToneCurve *Gamma = cmsBuildGamma(NULL, 2.2);
c83c6d
+# else
c83c6d
      LPGAMMATABLE Gamma = cmsBuildGamma(256, 2.2);
c83c6d
+# endif
c83c6d
 
c83c6d
       hOutProfile = cmsCreateGrayProfile(cmsD50_xyY(), Gamma);
c83c6d
+# ifdef HAVE_LIBLCMS2
c83c6d
+      cmsFreeToneCurve(Gamma);
c83c6d
+# else
c83c6d
       cmsFreeGamma(Gamma);
c83c6d
+# endif
c83c6d
 #endif
c83c6d
     }
c83c6d
     else
c83c6d
@@ -2896,7 +2906,11 @@ static int xsane_write_CSA(FILE *outfile, char *input_profile, int intent)
c83c6d
     return -1;
c83c6d
   }
c83c6d
 
c83c6d
+#ifdef HAVE_LIBLCMS2
c83c6d
+  n = cmsGetPostScriptCSA(NULL, hProfile, intent, 0, NULL, 0);
c83c6d
+#else
c83c6d
   n = cmsGetPostScriptCSA(hProfile, intent, NULL, 0);
c83c6d
+#endif
c83c6d
   if (n == 0)
c83c6d
   {
c83c6d
     return -2;
c83c6d
@@ -2908,7 +2922,11 @@ static int xsane_write_CSA(FILE *outfile, char *input_profile, int intent)
c83c6d
     return -3;
c83c6d
   }
c83c6d
 
c83c6d
+#ifdef HAVE_LIBLCMS2
c83c6d
+  cmsGetPostScriptCSA(NULL, hProfile, intent, 0, buffer, n);
c83c6d
+#else
c83c6d
   cmsGetPostScriptCSA(hProfile, intent, buffer, n);
c83c6d
+#endif
c83c6d
   buffer[n] = 0;
c83c6d
 
c83c6d
   fprintf(outfile, "%s", buffer);
c83c6d
@@ -2927,7 +2945,7 @@ static int xsane_write_CRD(FILE *outfile, char *output_profile, int intent, int
c83c6d
  cmsHPROFILE hProfile;
c83c6d
  size_t n;
c83c6d
  char* buffer;
c83c6d
- DWORD flags = cmsFLAGS_NODEFAULTRESOURCEDEF;
c83c6d
+ cmsUInt32Number flags = cmsFLAGS_NODEFAULTRESOURCEDEF;
c83c6d
 
c83c6d
   hProfile = cmsOpenProfileFromFile(output_profile, "r");
c83c6d
   if (!hProfile)
c83c6d
@@ -2940,7 +2958,11 @@ static int xsane_write_CRD(FILE *outfile, char *output_profile, int intent, int
c83c6d
     flags |= cmsFLAGS_BLACKPOINTCOMPENSATION;
c83c6d
   }
c83c6d
 
c83c6d
+#ifdef HAVE_LIBLCMS2
c83c6d
+  n = cmsGetPostScriptCRD(NULL, hProfile, intent, flags, NULL, 0);
c83c6d
+#else
c83c6d
   n = cmsGetPostScriptCRDEx(hProfile, intent, flags, NULL, 0);
c83c6d
+#endif
c83c6d
   if (n == 0)
c83c6d
   {
c83c6d
     return -2;
c83c6d
@@ -2952,7 +2974,11 @@ static int xsane_write_CRD(FILE *outfile, char *output_profile, int intent, int
c83c6d
     return -3;
c83c6d
   }
c83c6d
 
c83c6d
+#ifdef HAVE_LIBLCMS2
c83c6d
+  cmsGetPostScriptCRD(NULL, hProfile, intent, flags, buffer, n);
c83c6d
+#else
c83c6d
   cmsGetPostScriptCRDEx(hProfile, intent, flags, buffer, n);
c83c6d
+#endif
c83c6d
   buffer[n] = 0;
c83c6d
 
c83c6d
   fprintf(outfile, "%s", buffer);
c83c6d
@@ -4349,7 +4375,7 @@ static void xsane_jpeg_embed_scanner_icm_profile(j_compress_ptr cinfo_ptr, const
c83c6d
 {
c83c6d
  FILE *icm_profile;
c83c6d
  size_t size, embed_len;
c83c6d
- LPBYTE embed_buffer;
c83c6d
+ cmsUInt8Number *embed_buffer;
c83c6d
 
c83c6d
   DBG(DBG_proc, "xsane_jpeg_embed_scanner_icm_profile(%s)\n", icm_filename);
c83c6d
 
c83c6d
@@ -4363,7 +4389,7 @@ static void xsane_jpeg_embed_scanner_icm_profile(j_compress_ptr cinfo_ptr, const
c83c6d
   size = ftell(icm_profile);
c83c6d
   fseek(icm_profile, 0, SEEK_SET);
c83c6d
 
c83c6d
-  embed_buffer = (LPBYTE) malloc(size + 1);
c83c6d
+  embed_buffer = (cmsUInt8Number *) malloc(size + 1);
c83c6d
   if (embed_buffer)
c83c6d
   {
c83c6d
     embed_len = fread(embed_buffer, 1, size, icm_profile);
c83c6d
diff --git a/src/xsane-viewer.c b/src/xsane-viewer.c
c83c6d
index 69a444d..844c077 100644
c83c6d
--- a/src/xsane-viewer.c
c83c6d
+++ b/src/xsane-viewer.c
c83c6d
@@ -1795,6 +1795,9 @@ static void xsane_viewer_set_cms_gamut_alarm_color_callback(GtkWidget *widget, g
c83c6d
 {
c83c6d
  Viewer *v = (Viewer *) data;
c83c6d
  int val;
c83c6d
+#ifdef HAVE_LIBLCMS2
c83c6d
+ cmsUInt16Number alarm_codes[cmsMAXCHANNELS];
c83c6d
+#endif
c83c6d
 
c83c6d
   g_signal_handlers_block_by_func(GTK_OBJECT(v->cms_gamut_alarm_color_widget[0]), (GtkSignalFunc) xsane_viewer_set_cms_gamut_alarm_color_callback, v);
c83c6d
   g_signal_handlers_block_by_func(GTK_OBJECT(v->cms_gamut_alarm_color_widget[1]), (GtkSignalFunc) xsane_viewer_set_cms_gamut_alarm_color_callback, v);
c83c6d
@@ -1811,6 +1814,49 @@ static void xsane_viewer_set_cms_gamut_alarm_color_callback(GtkWidget *widget, g
c83c6d
   v->cms_gamut_alarm_color = val;
c83c6d
   gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(v->cms_gamut_alarm_color_widget[v->cms_gamut_alarm_color]), TRUE);
c83c6d
 
c83c6d
+#ifdef HAVE_LIBLCMS2
c83c6d
+  switch(v->cms_gamut_alarm_color)
c83c6d
+  {
c83c6d
+    default:
c83c6d
+    case 0: /* black */
c83c6d
+      alarm_codes[0] = (cmsUInt16Number) 0;
c83c6d
+      alarm_codes[1] = (cmsUInt16Number) 0;
c83c6d
+      alarm_codes[2] = (cmsUInt16Number) 0;
c83c6d
+     break;
c83c6d
+
c83c6d
+    case 1: /* gray */
c83c6d
+      alarm_codes[0] = (cmsUInt16Number) 128;
c83c6d
+      alarm_codes[1] = (cmsUInt16Number) 128;
c83c6d
+      alarm_codes[2] = (cmsUInt16Number) 128;
c83c6d
+     break;
c83c6d
+
c83c6d
+    case 2: /* white */
c83c6d
+      alarm_codes[0] = (cmsUInt16Number) 255;
c83c6d
+      alarm_codes[1] = (cmsUInt16Number) 255;
c83c6d
+      alarm_codes[2] = (cmsUInt16Number) 255;
c83c6d
+     break;
c83c6d
+
c83c6d
+    case 3: /* red */
c83c6d
+      alarm_codes[0] = (cmsUInt16Number) 255;
c83c6d
+      alarm_codes[1] = (cmsUInt16Number) 0;
c83c6d
+      alarm_codes[2] = (cmsUInt16Number) 0;
c83c6d
+     break;
c83c6d
+
c83c6d
+    case 4: /* green */
c83c6d
+      alarm_codes[0] = (cmsUInt16Number) 0;
c83c6d
+      alarm_codes[1] = (cmsUInt16Number) 255;
c83c6d
+      alarm_codes[2] = (cmsUInt16Number) 0;
c83c6d
+     break;
c83c6d
+
c83c6d
+    case 5: /* blue */
c83c6d
+      alarm_codes[0] = (cmsUInt16Number) 0;
c83c6d
+      alarm_codes[1] = (cmsUInt16Number) 0;
c83c6d
+      alarm_codes[2] = (cmsUInt16Number) 255;
c83c6d
+     break;
c83c6d
+  }
c83c6d
+
c83c6d
+  cmsSetAlarmCodes(alarm_codes);
c83c6d
+#else
c83c6d
   switch(v->cms_gamut_alarm_color)
c83c6d
   {
c83c6d
     default:
c83c6d
@@ -1838,6 +1884,7 @@ static void xsane_viewer_set_cms_gamut_alarm_color_callback(GtkWidget *widget, g
c83c6d
       cmsSetAlarmCodes(0, 0, 255);
c83c6d
      break;
c83c6d
   }
c83c6d
+#endif
c83c6d
 
c83c6d
   g_signal_handlers_unblock_by_func(GTK_OBJECT(v->cms_gamut_alarm_color_widget[0]), (GtkSignalFunc) xsane_viewer_set_cms_gamut_alarm_color_callback, v);
c83c6d
   g_signal_handlers_unblock_by_func(GTK_OBJECT(v->cms_gamut_alarm_color_widget[1]), (GtkSignalFunc) xsane_viewer_set_cms_gamut_alarm_color_callback, v);
c83c6d
@@ -2172,9 +2219,9 @@ static int xsane_viewer_read_image(Viewer *v)
c83c6d
  cmsHTRANSFORM hTransform = NULL;
c83c6d
  int proof = 0;
c83c6d
  char *cms_proof_icm_profile = NULL;
c83c6d
- DWORD cms_input_format;
c83c6d
- DWORD cms_output_format;
c83c6d
- DWORD cms_flags = 0;
c83c6d
+ cmsUInt32Number cms_input_format;
c83c6d
+ cmsUInt32Number cms_output_format;
c83c6d
+ cmsUInt32Number cms_flags = 0;
c83c6d
 #endif
c83c6d
 
c83c6d
   /* open imagefile */
c83c6d
@@ -2203,7 +2250,9 @@ static int xsane_viewer_read_image(Viewer *v)
c83c6d
 
c83c6d
   if ((v->enable_color_management) && (v->cms_enable))
c83c6d
   {
c83c6d
+#ifdef HAVE_LIBLCMS1
c83c6d
     cmsErrorAction(LCMS_ERROR_SHOW);
c83c6d
+#endif
c83c6d
 
c83c6d
     if (v->cms_bpc)
c83c6d
     {
c83c6d
@@ -2801,6 +2850,9 @@ Viewer *xsane_viewer_new(char *filename, char *selection_filetype, int allow_red
c83c6d
  GtkWidget *scrolled_window;
c83c6d
  GtkWidget *zoom_option_menu, *zoom_menu, *zoom_menu_item;
c83c6d
  int i, selection;
c83c6d
+#ifdef HAVE_LIBLCMS2
c83c6d
+ cmsUInt16Number alarm_codes[cmsMAXCHANNELS];
c83c6d
+#endif
c83c6d
 
c83c6d
   DBG(DBG_proc, "viewer_new(%s)\n", filename);
c83c6d
 
c83c6d
@@ -2830,8 +2882,15 @@ Viewer *xsane_viewer_new(char *filename, char *selection_filetype, int allow_red
c83c6d
   v->cms_proofing_intent = INTENT_ABSOLUTE_COLORIMETRIC;
c83c6d
   v->cms_gamut_check = 0;
c83c6d
   v->cms_gamut_alarm_color = 3; /* red */
c83c6d
+#ifdef HAVE_LIBLCMS2
c83c6d
+  alarm_codes[0] = (cmsUInt16Number) 255;
c83c6d
+  alarm_codes[1] = (cmsUInt16Number) 0;
c83c6d
+  alarm_codes[2] = (cmsUInt16Number) 0;
c83c6d
+  cmsSetAlarmCodes(alarm_codes);
c83c6d
+#else
c83c6d
   cmsSetAlarmCodes(255, 0, 0);
c83c6d
 #endif
c83c6d
+#endif
c83c6d
   if (selection_filetype)
c83c6d
   {
c83c6d
     v->selection_filetype = strdup(selection_filetype);
c83c6d
diff --git a/src/xsane.h b/src/xsane.h
c83c6d
index 4067d61..adcc0ed 100644
c83c6d
--- a/src/xsane.h
c83c6d
+++ b/src/xsane.h
c83c6d
@@ -70,7 +70,13 @@
c83c6d
 #include <gtk/gtk.h>
c83c6d
 
c83c6d
 #ifdef HAVE_LIBLCMS
c83c6d
-# include "lcms.h"
c83c6d
+# ifdef HAVE_LIBLCMS2
c83c6d
+#  include "lcms2.h"
c83c6d
+# else
c83c6d
+#  include "lcms.h"
c83c6d
+typedef BYTE cmsUInt8Number;
c83c6d
+typedef DWORD cmsUInt32Number;
c83c6d
+# endif
c83c6d
 #else
c83c6d
 # define cmsHTRANSFORM void *
c83c6d
 #endif
c83c6d
-- 
c83c6d
1.8.3.1
c83c6d