]> granicus.if.org Git - imagemagick/blobdiff - magick/shear.c
(no commit message)
[imagemagick] / magick / shear.c
index c646da42ef7be334e12edd36d8da2f21c1d7f8d8..23355c7c61772fade131b8847bdeeddf28f75137 100644 (file)
@@ -17,7 +17,7 @@
 %                                  July 1992                                  %
 %                                                                             %
 %                                                                             %
-%  Copyright 1999-2009 ImageMagick Studio LLC, a non-profit organization      %
+%  Copyright 1999-2010 ImageMagick Studio LLC, a non-profit organization      %
 %  dedicated to making software imaging solutions freely available.           %
 %                                                                             %
 %  You may not use this file except in compliance with the License.  You may  %
@@ -47,6 +47,7 @@
 */
 #include "magick/studio.h"
 #include "magick/artifact.h"
+#include "magick/attribute.h"
 #include "magick/blob-private.h"
 #include "magick/cache-private.h"
 #include "magick/color-private.h"
@@ -71,6 +72,8 @@
 #include "magick/resource_.h"
 #include "magick/shear.h"
 #include "magick/statistic.h"
+#include "magick/string_.h"
+#include "magick/string-private.h"
 #include "magick/threshold.h"
 #include "magick/transform.h"
 \f
@@ -367,7 +370,7 @@ static RadonInfo *AcquireRadonInfo(const Image *image,const unsigned long width,
   RadonInfo
     *radon_info;
 
-  radon_info=(RadonInfo *) AcquireMagickMemory(sizeof(*radon_info));
+  radon_info=(RadonInfo *) AcquireAlignedMemory(1,sizeof(*radon_info));
   if (radon_info == (RadonInfo *) NULL)
     return((RadonInfo *) NULL);
   (void) ResetMagickMemory(radon_info,0,sizeof(*radon_info));
@@ -562,7 +565,7 @@ static inline MagickBooleanType SetRadonCell(const RadonInfo *radon_info,
       return(MagickTrue);
     }
   count=WriteRadonCell(radon_info,i*sizeof(*radon_info->cells),
-    sizeof(*radon_info->cells),(unsigned char *) &value);
+    sizeof(*radon_info->cells),(const unsigned char *) &value);
   if (count != (ssize_t) sizeof(*radon_info->cells))
     return(MagickFalse);
   return(MagickTrue);
@@ -626,7 +629,7 @@ static void RadonProjection(RadonInfo *source_cells,
     q=swap;
   }
 #if defined(MAGICKCORE_OPENMP_SUPPORT)
-  #pragma omp parallel for
+  #pragma omp parallel for schedule(dynamic,4)
 #endif
   for (x=0; x < (long) p->width; x++)
   {
@@ -711,7 +714,7 @@ static MagickBooleanType RadonTransform(const Image *image,
   for (y=0; y < (long) image->rows; y++)
   {
     register const PixelPacket
-      *__restrict p;
+      *restrict p;
 
     register long
       i,
@@ -762,7 +765,7 @@ static MagickBooleanType RadonTransform(const Image *image,
   for (y=0; y < (long) image->rows; y++)
   {
     register const PixelPacket
-      *__restrict p;
+      *restrict p;
 
     register long
       i,
@@ -838,7 +841,7 @@ static void GetImageBackgroundColor(Image *image,const long offset,
   for (y=0; y < (long) image->rows; y++)
   {
     register const PixelPacket
-      *__restrict p;
+      *restrict p;
 
     register long
       x;
@@ -958,7 +961,7 @@ MagickExport Image *DeskewImage(const Image *image,const double threshold,
   /*
     Auto-crop image.
   */
-  GetImageBackgroundColor(clone_image,atol(artifact),exception);
+  GetImageBackgroundColor(clone_image,StringToLong(artifact),exception);
   deskew_image=AffineTransformImage(clone_image,&affine_matrix,exception);
   clone_image=DestroyImage(clone_image);
   if (deskew_image == (Image *) NULL)
@@ -1073,6 +1076,9 @@ static Image *IntegralRotateImage(const Image *image,unsigned long rotations,
         Rotate 90 degrees.
       */
       GetPixelCacheTileSize(image,&tile_width,&tile_height);
+#if defined(MAGICKCORE_OPENMP_SUPPORT)
+  #pragma omp parallel for schedule(dynamic,4) shared(progress, status)
+#endif
       for (tile_y=0; tile_y < (long) image->rows; tile_y+=tile_height)
       {
         register long
@@ -1086,19 +1092,19 @@ static Image *IntegralRotateImage(const Image *image,unsigned long rotations,
             sync;
 
           register const IndexPacket
-            *__restrict indexes;
+            *restrict indexes;
 
           register const PixelPacket
-            *__restrict p;
+            *restrict p;
 
           register IndexPacket
-            *__restrict rotate_indexes;
+            *restrict rotate_indexes;
 
           register long
             y;
 
           register PixelPacket
-            *__restrict q;
+            *restrict q;
 
           unsigned long
             height,
@@ -1112,8 +1118,8 @@ static Image *IntegralRotateImage(const Image *image,unsigned long rotations,
           if ((tile_y+(long) tile_height) > (long) image->rows)
             height=(unsigned long) (tile_height-(tile_y+tile_height-
               image->rows));
-          p=GetCacheViewVirtualPixels(image_view,tile_x,tile_y,width,
-            height,exception);
+          p=GetCacheViewVirtualPixels(image_view,tile_x,tile_y,width,height,
+            exception);
           if (p == (const PixelPacket *) NULL)
             {
               status=MagickFalse;
@@ -1123,7 +1129,7 @@ static Image *IntegralRotateImage(const Image *image,unsigned long rotations,
           for (y=0; y < (long) width; y++)
           {
             register const PixelPacket
-              *__restrict tile_pixels;
+              *restrict tile_pixels;
 
             register long
               x;
@@ -1147,7 +1153,7 @@ static Image *IntegralRotateImage(const Image *image,unsigned long rotations,
                 (rotate_indexes != (IndexPacket *) NULL))
               {
                 register const IndexPacket
-                  *__restrict tile_indexes;
+                  *restrict tile_indexes;
 
                 tile_indexes=indexes+(height-1)*width+y;
                 for (x=0; x < (long) height; x++)
@@ -1184,25 +1190,28 @@ static Image *IntegralRotateImage(const Image *image,unsigned long rotations,
       /*
         Rotate 180 degrees.
       */
+#if defined(MAGICKCORE_OPENMP_SUPPORT)
+  #pragma omp parallel for schedule(dynamic,4) shared(progress, status)
+#endif
       for (y=0; y < (long) image->rows; y++)
       {
         MagickBooleanType
           sync;
 
         register const IndexPacket
-          *__restrict indexes;
+          *restrict indexes;
 
         register const PixelPacket
-          *__restrict p;
+          *restrict p;
 
         register IndexPacket
-          *__restrict rotate_indexes;
+          *restrict rotate_indexes;
 
         register long
           x;
 
         register PixelPacket
-          *__restrict q;
+          *restrict q;
 
         if (status == MagickFalse)
           continue;
@@ -1257,6 +1266,9 @@ static Image *IntegralRotateImage(const Image *image,unsigned long rotations,
         Rotate 270 degrees.
       */
       GetPixelCacheTileSize(image,&tile_width,&tile_height);
+#if defined(MAGICKCORE_OPENMP_SUPPORT)
+  #pragma omp parallel for schedule(dynamic,4) shared(progress, status)
+#endif
       for (tile_y=0; tile_y < (long) image->rows; tile_y+=tile_height)
       {
         register long
@@ -1270,19 +1282,19 @@ static Image *IntegralRotateImage(const Image *image,unsigned long rotations,
             sync;
 
           register const IndexPacket
-            *__restrict indexes;
+            *restrict indexes;
 
           register const PixelPacket
-            *__restrict p;
+            *restrict p;
 
           register IndexPacket
-            *__restrict rotate_indexes;
+            *restrict rotate_indexes;
 
           register long
             y;
 
           register PixelPacket
-            *__restrict q;
+            *restrict q;
 
           unsigned long
             height,
@@ -1307,7 +1319,7 @@ static Image *IntegralRotateImage(const Image *image,unsigned long rotations,
           for (y=0; y < (long) width; y++)
           {
             register const PixelPacket
-              *__restrict tile_pixels;
+              *restrict tile_pixels;
 
             register long
               x;
@@ -1330,7 +1342,7 @@ static Image *IntegralRotateImage(const Image *image,unsigned long rotations,
                 (rotate_indexes != (IndexPacket *) NULL))
               {
                 register const IndexPacket
-                  *__restrict tile_indexes;
+                  *restrict tile_indexes;
 
                 tile_indexes=indexes+(width-1)-y;
                 for (x=0; x < (long) height; x++)
@@ -1451,7 +1463,7 @@ static MagickBooleanType XShearImage(Image *image,const MagickRealType degrees,
   exception=(&image->exception);
   image_view=AcquireCacheView(image);
 #if defined(MAGICKCORE_OPENMP_SUPPORT)
-  #pragma omp parallel for schedule(dynamic,8) shared(progress, status)
+  #pragma omp parallel for schedule(dynamic,4) shared(progress, status)
 #endif
   for (y=0; y < (long) height; y++)
   {
@@ -1471,12 +1483,12 @@ static MagickBooleanType XShearImage(Image *image,const MagickRealType degrees,
       i;
 
     register IndexPacket
-      *__restrict indexes,
-      *__restrict shear_indexes;
+      *restrict indexes,
+      *restrict shear_indexes;
 
     register PixelPacket
-      *__restrict p,
-      *__restrict q;
+      *restrict p,
+      *restrict q;
 
     ShearDirection
       direction;
@@ -1671,7 +1683,7 @@ static MagickBooleanType YShearImage(Image *image,const MagickRealType degrees,
   exception=(&image->exception);
   image_view=AcquireCacheView(image);
 #if defined(MAGICKCORE_OPENMP_SUPPORT)
-  #pragma omp parallel for schedule(dynamic,8) shared(progress, status)
+  #pragma omp parallel for schedule(dynamic,4) shared(progress, status)
 #endif
   for (x=0; x < (long) width; x++)
   {
@@ -1688,15 +1700,15 @@ static MagickBooleanType YShearImage(Image *image,const MagickRealType degrees,
       displacement;
 
     register IndexPacket
-      *__restrict indexes,
-      *__restrict shear_indexes;
+      *restrict indexes,
+      *restrict shear_indexes;
 
     register long
       i;
 
     register PixelPacket
-      *__restrict p,
-      *__restrict q;
+      *restrict p,
+      *restrict q;
 
     ShearDirection
       direction;