]> granicus.if.org Git - imagemagick/blobdiff - MagickCore/quantum.c
(no commit message)
[imagemagick] / MagickCore / quantum.c
index fda3ce7eab76ba9d589f24b58360c56059a423b1..914e4aefbc2c6a9769ce3bbf103c9a989d00cbcd 100644 (file)
 %             MagicCore Methods to Acquire / Destroy Quantum Pixels           %
 %                                                                             %
 %                             Software Design                                 %
-%                               John Cristy                                   %
+%                                  Cristy                                     %
 %                               October 1998                                  %
 %                                                                             %
 %                                                                             %
-%  Copyright 1999-2008 ImageMagick Studio LLC, a non-profit organization      %
+%  Copyright 1999-2014 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  %
@@ -104,8 +104,7 @@ static void
 %
 */
 
-static inline size_t MagickMax(const size_t x,
-  const size_t y)
+static inline size_t MagickMax(const size_t x,const size_t y)
 {
   if (x > y)
     return(x);
@@ -129,9 +128,9 @@ MagickExport QuantumInfo *AcquireQuantumInfo(const ImageInfo *image_info,
   if (image == (const Image *) NULL)
     return(quantum_info);
   status=SetQuantumDepth(image,quantum_info,image->depth);
+  quantum_info->endian=image->endian;
   if (status == MagickFalse)
     quantum_info=DestroyQuantumInfo(quantum_info);
-  quantum_info->endian=image->endian;
   return(quantum_info);
 }
 \f
@@ -168,14 +167,14 @@ static MagickBooleanType AcquireQuantumPixels(QuantumInfo *quantum_info,
 
   assert(quantum_info != (QuantumInfo *) NULL);
   assert(quantum_info->signature == MagickSignature);
-  quantum_info->number_threads=GetOpenMPMaximumThreads();
+  quantum_info->number_threads=(size_t) GetMagickResourceLimit(ThreadResource);
   quantum_info->pixels=(unsigned char **) AcquireQuantumMemory(
     quantum_info->number_threads,sizeof(*quantum_info->pixels));
   if (quantum_info->pixels == (unsigned char **) NULL)
     return(MagickFalse);
   quantum_info->extent=extent;
-  (void) ResetMagickMemory(quantum_info->pixels,0,
-    quantum_info->number_threads*sizeof(*quantum_info->pixels));
+  (void) ResetMagickMemory(quantum_info->pixels,0,quantum_info->number_threads*
+    sizeof(*quantum_info->pixels));
   for (i=0; i < (ssize_t) quantum_info->number_threads; i++)
   {
     quantum_info->pixels[i]=(unsigned char *) AcquireQuantumMemory(extent+1,
@@ -219,7 +218,7 @@ MagickExport QuantumInfo *DestroyQuantumInfo(QuantumInfo *quantum_info)
   if (quantum_info->pixels != (unsigned char **) NULL)
     DestroyQuantumPixels(quantum_info);
   if (quantum_info->semaphore != (SemaphoreInfo *) NULL)
-    DestroySemaphoreInfo(&quantum_info->semaphore);
+    RelinquishSemaphoreInfo(&quantum_info->semaphore);
   quantum_info->signature=(~MagickSignature);
   quantum_info=(QuantumInfo *) RelinquishMagickMemory(quantum_info);
   return(quantum_info);
@@ -333,6 +332,35 @@ MagickExport size_t GetQuantumExtent(const Image *image,
 %                                                                             %
 %                                                                             %
 %                                                                             %
+%   G e t Q u a n t u m E n d i a n                                           %
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%  GetQuantumEndian() returns the quantum endian of the image.
+%
+%  The endian of the GetQuantumEndian method is:
+%
+%      EndianType GetQuantumEndian(const QuantumInfo *quantum_info)
+%
+%  A description of each parameter follows:
+%
+%    o quantum_info: the quantum info.
+%
+*/
+MagickExport EndianType GetQuantumEndian(const QuantumInfo *quantum_info)
+{
+  assert(quantum_info != (QuantumInfo *) NULL);
+  assert(quantum_info->signature == MagickSignature);
+  return(quantum_info->endian);
+}
+\f
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                                                                             %
+%                                                                             %
+%                                                                             %
 %   G e t Q u a n t u m F o r m a t                                           %
 %                                                                             %
 %                                                                             %
@@ -393,7 +421,7 @@ MagickExport void GetQuantumInfo(const ImageInfo *image_info,
   quantum_info->maximum=1.0;
   quantum_info->scale=QuantumRange;
   quantum_info->pack=MagickTrue;
-  quantum_info->semaphore=AllocateSemaphoreInfo();
+  quantum_info->semaphore=AcquireSemaphoreInfo();
   quantum_info->signature=MagickSignature;
   if (image_info == (const ImageInfo *) NULL)
     return;
@@ -412,11 +440,11 @@ MagickExport void GetQuantumInfo(const ImageInfo *image_info,
   else
     if (quantum_info->minimum == quantum_info->maximum)
       {
-        quantum_info->scale=(MagickRealType) QuantumRange/quantum_info->minimum;
+        quantum_info->scale=(double) QuantumRange/quantum_info->minimum;
         quantum_info->minimum=0.0;
       }
     else
-      quantum_info->scale=(MagickRealType) QuantumRange/(quantum_info->maximum-
+      quantum_info->scale=(double) QuantumRange/(quantum_info->maximum-
         quantum_info->minimum);
   option=GetImageOption(image_info,"quantum:scale");
   if (option != (char *) NULL)
@@ -494,27 +522,26 @@ MagickExport QuantumType GetQuantumType(Image *image,ExceptionInfo *exception)
   if (image->debug != MagickFalse)
     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
   quantum_type=RGBQuantum;
-  if (image->matte != MagickFalse)
+  if (image->alpha_trait == BlendPixelTrait)
     quantum_type=RGBAQuantum;
   if (image->colorspace == CMYKColorspace)
     {
       quantum_type=CMYKQuantum;
-      if (image->matte != MagickFalse)
+      if (image->alpha_trait == BlendPixelTrait)
         quantum_type=CMYKAQuantum;
     }
   if (IsImageGray(image,exception) != MagickFalse)
     {
       quantum_type=GrayQuantum;
-      if (image->matte != MagickFalse)
+      if (image->alpha_trait == BlendPixelTrait)
         quantum_type=GrayAlphaQuantum;
     }
-  else
-    if (image->storage_class == PseudoClass)
-      {
-        quantum_type=IndexQuantum;
-        if (image->matte != MagickFalse)
-          quantum_type=IndexAlphaQuantum;
-      }
+  if (image->storage_class == PseudoClass)
+    {
+      quantum_type=IndexQuantum;
+      if (image->alpha_trait == BlendPixelTrait)
+        quantum_type=IndexAlphaQuantum;
+    }
   return(quantum_type);
 }
 \f
@@ -651,8 +678,8 @@ MagickExport MagickBooleanType SetQuantumDepth(const Image *image,
     }
   if (quantum_info->pixels != (unsigned char **) NULL)
     DestroyQuantumPixels(quantum_info);
-  status=AcquireQuantumPixels(quantum_info,(6+quantum_info->pad)*image->columns*
-    ((quantum_info->depth+7)/8));  /* allow for CMYKA + RLE byte + pad */
+  status=AcquireQuantumPixels(quantum_info,(MaxPixelChannels+quantum_info->pad)*
+    image->columns*((quantum_info->depth+7)/8));
   return(status);
 }
 \f
@@ -661,6 +688,46 @@ MagickExport MagickBooleanType SetQuantumDepth(const Image *image,
 %                                                                             %
 %                                                                             %
 %                                                                             %
+%   S e t Q u a n t u m E n d i a n                                           %
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%  SetQuantumEndian() sets the quantum endian.
+%
+%  The endian of the SetQuantumEndian method is:
+%
+%      MagickBooleanType SetQuantumEndian(const Image *image,
+%        QuantumInfo *quantum_info,const EndianType endian)
+%
+%  A description of each parameter follows:
+%
+%    o image: the image.
+%
+%    o quantum_info: the quantum info.
+%
+%    o endian: the quantum endian.
+%
+*/
+MagickExport MagickBooleanType SetQuantumEndian(const Image *image,
+  QuantumInfo *quantum_info,const EndianType endian)
+{
+  assert(image != (Image *) NULL);
+  assert(image->signature == MagickSignature);
+  if (image->debug != MagickFalse)
+    (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
+  assert(quantum_info != (QuantumInfo *) NULL);
+  assert(quantum_info->signature == MagickSignature);
+  quantum_info->endian=endian;
+  return(SetQuantumDepth(image,quantum_info,quantum_info->depth));
+}
+\f
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                                                                             %
+%                                                                             %
+%                                                                             %
 %   S e t Q u a n t u m F o r m a t                                           %
 %                                                                             %
 %                                                                             %