]> granicus.if.org Git - imagemagick/commitdiff
(no commit message)
authorcristy <urban-warrior@git.imagemagick.org>
Wed, 28 Dec 2011 21:47:20 +0000 (21:47 +0000)
committercristy <urban-warrior@git.imagemagick.org>
Wed, 28 Dec 2011 21:47:20 +0000 (21:47 +0000)
MagickCore/cache-private.h
MagickCore/cache.c
coders/jp2.c

index b09145b5f119053b74b8150c8cff3c720cbe837a..118a5a5a2726b2f68429b0436b769b71c6353ccc 100644 (file)
@@ -129,6 +129,9 @@ typedef struct _CacheInfo
     metacontent_extent,
     number_channels;
 
+  PixelChannelMap
+    channel_map[MaxPixelChannels];
+
   CacheType
     type;
 
index 026bdaf680a7a8b368c879c832deb616faea556d..2034e3dee6754e7a1262654cb6fb39c44ef97b19 100644 (file)
@@ -1191,13 +1191,22 @@ static MagickBooleanType UnoptimizedPixelCacheClone(CacheInfo *clone_info,
 static MagickBooleanType ClonePixelCachePixels(CacheInfo *clone_info,
   CacheInfo *cache_info,ExceptionInfo *exception)
 {
+  PixelChannelMap
+    *p,
+    *q;
+
   if (cache_info->type == PingCache)
     return(MagickTrue);
+  p=cache_info->channel_map;
+  q=clone_info->channel_map;
   if ((cache_info->columns == clone_info->columns) &&
       (cache_info->rows == clone_info->rows) &&
       (cache_info->number_channels == clone_info->number_channels) &&
+      (memcmp(p,q,cache_info->number_channels*sizeof(*p)) == 0) &&
       (cache_info->metacontent_extent == clone_info->metacontent_extent))
     return(OptimizedPixelCacheClone(clone_info,cache_info,exception));
+  if (memcmp(p,q,cache_info->number_channels*sizeof(*p)) != 0)
+    ;
   return(UnoptimizedPixelCacheClone(clone_info,cache_info,exception));
 }
 \f
@@ -4005,6 +4014,8 @@ static MagickBooleanType OpenPixelCache(Image *image,const MapMode mode,
   cache_info->columns=image->columns;
   InitializePixelChannelMap(image);
   cache_info->number_channels=GetPixelChannels(image);
+  (void) memcpy(cache_info->channel_map,image->channel_map,
+    cache_info->number_channels*sizeof(*image->channel_map));
   cache_info->metacontent_extent=image->metacontent_extent;
   cache_info->mode=mode;
   if (image->ping != MagickFalse)
index de03feb70c4a72fcb9682ef04b0c44d4ae2aca37..fcae3b620b4aebe93165770c0264f0353d6e6813 100644 (file)
@@ -1010,6 +1010,8 @@ static MagickBooleanType WriteJP2Image(const ImageInfo *image_info,Image *image,
     }
   status=jas_image_encode(jp2_image,jp2_stream,format,options) != 0 ?
     MagickTrue : MagickFalse;
+  if (options != (char *) NULL)
+    options=DestroyString(options);
   (void) jas_stream_close(jp2_stream);
   for (i=0; i < (ssize_t) number_components; i++)
     jas_matrix_destroy(pixels[i]);