]> granicus.if.org Git - imagemagick/blobdiff - magick/profile.c
(no commit message)
[imagemagick] / magick / profile.c
index e55949f308d6275fc3c390596ec7c39f55bfe7d3..3531890221fbab15563aad0a8314b8f6c05b3d57 100644 (file)
@@ -77,9 +77,7 @@
 /*
   Define declarations.
 */
-#if defined(MAGICKCORE_LCMS_DELEGATE)
-#if defined(LCMS_VERSION) && (LCMS_VERSION < 2000)
-#define cmsUInt32Number  DWORD
+#if !defined(LCMS_VERSION) || (LCMS_VERSION < 2000)
 #define cmsSigCmykData icSigCmykData
 #define cmsSigGrayData icSigGrayData
 #define cmsSigLabData icSigLabData
 #define cmsSigYCbCrData icSigYCbCrData
 #define cmsSigLinkClass icSigLinkClass
 #define cmsColorSpaceSignature icColorSpaceSignature
-#endif
+#define cmsUInt32Number  DWORD
+#define cmsSetLogErrorHandler(handler)  cmsSetErrorHandler(handler)
+#define cmsCreateTransformTHR(context,source_profile,source_type, \
+  target_profile,target_type,intent,flags)  cmsCreateTransform(source_profile, \
+  source_type,target_profile,target_type,intent,flags);
+#define cmsOpenProfileFromMemTHR(context,profile,length) \
+  cmsOpenProfileFromMem(profile,length)
 #endif
 \f
 /*
@@ -390,7 +394,7 @@ static cmsHTRANSFORM *DestroyTransformThreadSet(cmsHTRANSFORM *transform)
   return(transform);
 }
 
-static cmsHTRANSFORM *AcquireTransformThreadSet(
+static cmsHTRANSFORM *AcquireTransformThreadSet(Image *image,
   const cmsHPROFILE source_profile,const cmsUInt32Number source_type,
   const cmsHPROFILE target_profile,const cmsUInt32Number target_type,
   const int intent,const cmsUInt32Number flags)
@@ -412,8 +416,8 @@ static cmsHTRANSFORM *AcquireTransformThreadSet(
   (void) ResetMagickMemory(transform,0,number_threads*sizeof(*transform));
   for (i=0; i < (ssize_t) number_threads; i++)
   {
-    transform[i]=cmsCreateTransform(source_profile,source_type,target_profile,
-      target_type,intent,flags);
+    transform[i]=cmsCreateTransformTHR(image,source_profile,source_type,
+      target_profile,target_type,intent,flags);
     if (transform[i] == (cmsHTRANSFORM) NULL)
       return(DestroyTransformThreadSet(transform));
   }
@@ -807,17 +811,22 @@ static MagickBooleanType SetsRGBImageProfile(Image *image)
 }
 #if defined(MAGICKCORE_LCMS_DELEGATE)
 #if defined(LCMS_VERSION) && (LCMS_VERSION >= 2000)
-static void LCMSErrorHandler(cmsContext context,cmsUInt32Number severity,
+static void LCMSExceptionHandler(cmsContext context,cmsUInt32Number severity,
   const char *message)
 {
-  (void) context;
-  (void) LogMagickEvent(TransformEvent,GetMagickModule(),"lcms: #%d, %s",
+  Image
+    *image;
+
+  (void) LogMagickEvent(TransformEvent,GetMagickModule(),"lcms: #%u, %s",
     severity,message != (char *) NULL ? message : "no message");
+  image=(Image *) context;
+  if (image != (Image *) NULL)
+    (void) ThrowMagickException(&image->exception,GetMagickModule(),
+      ImageWarning,"UnableToTransformColorspace","`%s'",image->filename);
+
 }
-#endif
-#if defined(LCMS_VERSION) && (LCMS_VERSION < 2000)
-#if defined(LCMS_VERSION) && (LCMS_VERSION > 1010)
-static int LCMSErrorHandler(int severity,const char *message)
+#else
+static int LCMSExceptionHandler(int severity,const char *message)
 {
   (void) LogMagickEvent(TransformEvent,GetMagickModule(),"lcms: #%d, %s",
     severity,message != (char *) NULL ? message : "no message");
@@ -825,7 +834,6 @@ static int LCMSErrorHandler(int severity,const char *message)
 }
 #endif
 #endif
-#endif
 
 MagickExport MagickBooleanType ProfileImage(Image *image,const char *name,
   const void *datum,const size_t length,
@@ -876,7 +884,7 @@ MagickExport MagickBooleanType ProfileImage(Image *image,const char *name,
       ResetImageProfileIterator(image);
       for (name=GetNextImageProfile(image); name != (const char *) NULL; )
       {
-        for (i=1; i < number_arguments; i++)
+        for (i=1; i < (ssize_t) number_arguments; i++)
         {
           if ((*arguments[i] == '!') &&
               (LocaleCompare(name,arguments[i]+1) == 0))
@@ -890,7 +898,7 @@ MagickExport MagickBooleanType ProfileImage(Image *image,const char *name,
         }
         name=GetNextImageProfile(image);
       }
-      for (i=0; i < number_arguments; i++)
+      for (i=0; i < (ssize_t) number_arguments; i++)
         arguments[i]=DestroyString(arguments[i]);
       arguments=(char **) RelinquishMagickMemory(arguments);
       return(MagickTrue);
@@ -944,18 +952,10 @@ MagickExport MagickBooleanType ProfileImage(Image *image,const char *name,
         /*
           Transform pixel colors as defined by the color profiles.
         */
-#if defined(LCMS_VERSION) && (LCMS_VERSION >= 2000)
-        cmsSetLogErrorHandler(LCMSErrorHandler);
-#endif
-#if defined(LCMS_VERSION) && (LCMS_VERSION < 2000)
-#if defined(LCMS_VERSION) && (LCMS_VERSION > 1010)
-        cmsSetErrorHandler(LCMSErrorHandler);
-#else
-        (void) cmsErrorAction(LCMS_ERROR_SHOW);
-#endif
-#endif
-        source_profile=cmsOpenProfileFromMem(GetStringInfoDatum(profile),
-          (cmsUInt32Number) GetStringInfoLength(profile));
+        cmsSetLogErrorHandler(LCMSExceptionHandler);
+        source_profile=cmsOpenProfileFromMemTHR(image,
+          GetStringInfoDatum(profile),(cmsUInt32Number)
+          GetStringInfoLength(profile));
         if (source_profile == (cmsHPROFILE) NULL)
           ThrowBinaryException(ResourceLimitError,
             "ColorspaceColorProfileMismatch",name);
@@ -991,18 +991,20 @@ MagickExport MagickBooleanType ProfileImage(Image *image,const char *name,
             int
               intent;
 
-            ssize_t
-              progress,
-              y;
-
             MagickBooleanType
               status;
 
+            MagickOffsetType
+              progress;
+
             size_t
               length,
               source_channels,
               target_channels;
 
+            ssize_t
+              y;
+
             unsigned short
               **restrict source_pixels,
               **restrict target_pixels;
@@ -1012,7 +1014,7 @@ MagickExport MagickBooleanType ProfileImage(Image *image,const char *name,
             if (icc_profile != (StringInfo *) NULL)
               {
                 target_profile=source_profile;
-                source_profile=cmsOpenProfileFromMem(
+                source_profile=cmsOpenProfileFromMemTHR(image,
                   GetStringInfoDatum(icc_profile),(cmsUInt32Number)
                   GetStringInfoLength(icc_profile));
                 if (source_profile == (cmsHPROFILE) NULL)
@@ -1181,8 +1183,8 @@ MagickExport MagickBooleanType ProfileImage(Image *image,const char *name,
             if (image->black_point_compensation != MagickFalse)
               flags|=cmsFLAGS_BLACKPOINTCOMPENSATION;
 #endif
-            transform=AcquireTransformThreadSet(source_profile,source_type,
-              target_profile,target_type,intent,flags);
+            transform=AcquireTransformThreadSet(image,source_profile,
+              source_type,target_profile,target_type,intent,flags);
             if (transform == (cmsHTRANSFORM *) NULL)
               ThrowProfileException(ImageError,"UnableToCreateColorTransform",
                 name);
@@ -1220,6 +1222,9 @@ MagickExport MagickBooleanType ProfileImage(Image *image,const char *name,
 #endif
             for (y=0; y < (ssize_t) image->rows; y++)
             {
+              int
+                id;
+
               MagickBooleanType
                 sync;
 
@@ -1227,7 +1232,6 @@ MagickExport MagickBooleanType ProfileImage(Image *image,const char *name,
                 *restrict indexes;
 
               register ssize_t
-                id,
                 x;
 
               register PixelPacket
@@ -1874,7 +1878,7 @@ MagickExport MagickBooleanType SyncImageProfiles(Image *image)
   }
   if (length < 16)
     return(MagickFalse);
-  id=(int) ReadProfileShort(LSBEndian,exif);
+  id=(ssize_t) ReadProfileShort(LSBEndian,exif);
   endian=LSBEndian;
   if (id == 0x4949)
     endian=LSBEndian;