]> granicus.if.org Git - imagemagick/commitdiff
(no commit message)
authorcristy <urban-warrior@git.imagemagick.org>
Tue, 22 Jan 2013 00:36:18 +0000 (00:36 +0000)
committercristy <urban-warrior@git.imagemagick.org>
Tue, 22 Jan 2013 00:36:18 +0000 (00:36 +0000)
MagickCore/cache.c

index a60322488ee95c30c2f84b1d80a45f9e4f553403..1b983d10380fe20c6e62837d9a49c1be018f77da 100644 (file)
@@ -521,14 +521,36 @@ static MagickBooleanType ClonePixelCacheRepository(CacheInfo *clone_info,
   ssize_t
     y;
 
-  /*
-    Clone pixels.
-  */
   assert(cache_info != (CacheInfo *) NULL);
   assert(clone_info != (CacheInfo *) NULL);
   assert(exception != (ExceptionInfo *) NULL);
   if (cache_info->type == PingCache)
     return(MagickTrue);
+  length=cache_info->number_channels*sizeof(*cache_info->channel_map);
+  if (((cache_info->type == MemoryCache) || (cache_info->type == MapCache)) &&
+      ((clone_info->type == MemoryCache) || (clone_info->type == MapCache)) &&
+       (cache_info->columns == clone_info->columns) &&
+       (cache_info->rows == clone_info->rows) &&
+       (cache_info->number_channels == clone_info->number_channels) &&
+       (memcmp(cache_info->channel_map,clone_info->channel_map,length) == 0))
+    {
+      /*
+        Identical pixel cache morphology.
+      */
+      (void) memcpy(clone_info->pixels,cache_info->pixels,cache_info->columns*
+        cache_info->number_channels*cache_info->rows*
+        sizeof(*cache_info->pixels));
+      if ((cache_info->metacontent_extent != 0) &&
+          (clone_info->metacontent_extent != 0) &&
+          (cache_info->metacontent_extent == clone_info->metacontent_extent))
+        (void) memcpy(clone_info->metacontent,cache_info->metacontent,
+          cache_info->columns*cache_info->rows*
+          clone_info->metacontent_extent*sizeof(*cache_info->metacontent));
+      return(MagickTrue);
+    }
+  /*
+    Irregular pixel cache morphology.
+  */
   cache_nexus=AcquirePixelCacheNexus(1);
   clone_nexus=AcquirePixelCacheNexus(1);
   if ((cache_nexus == (NexusInfo **) NULL) ||