18 #ifndef MAGICKCORE_QUANTUM_PRIVATE_H 19 #define MAGICKCORE_QUANTUM_PRIVATE_H 24 #if defined(__cplusplus) || defined(c_plusplus) 98 return((
MagickSizeType) ((one << (depth-1))+((one << (depth-1))-1)));
103 #define ExponentBias (127-15) 104 #define ExponentMask 0x7c00 105 #define ExponentShift 23 106 #define SignBitShift 31 107 #define SignificandShift 13 108 #define SignificandMask 0x00000400 110 typedef union _SinglePrecision
119 register unsigned int 137 sign_bit=(
unsigned int) ((half >> 15) & 0x00000001);
138 exponent=(
unsigned int) ((half >> 10) & 0x0000001f);
139 significand=(
unsigned int) (half & 0x000003ff);
142 if (significand == 0)
152 significand&=(~SignificandMask);
162 if (significand != 0)
172 map.fixed_point=value;
173 return(map.single_precision);
177 unsigned char *pixels)
184 const unsigned int pixel,
unsigned char *pixels)
186 register unsigned int 189 quantum=(
unsigned int) pixel;
192 *pixels++=(
unsigned char) (quantum);
193 *pixels++=(
unsigned char) (quantum >> 8);
194 *pixels++=(
unsigned char) (quantum >> 16);
195 *pixels++=(
unsigned char) (quantum >> 24);
198 *pixels++=(
unsigned char) (quantum >> 24);
199 *pixels++=(
unsigned char) (quantum >> 16);
200 *pixels++=(
unsigned char) (quantum >> 8);
201 *pixels++=(
unsigned char) (quantum);
206 const unsigned short pixel,
unsigned char *pixels)
208 register unsigned int 214 *pixels++=(
unsigned char) (quantum);
215 *pixels++=(
unsigned char) (quantum >> 8);
218 *pixels++=(
unsigned char) (quantum >> 8);
219 *pixels++=(
unsigned char) (quantum);
223 static inline const unsigned char *
PushCharPixel(
const unsigned char *pixels,
224 unsigned char *
pixel)
231 const unsigned char *pixels,
unsigned int *
pixel)
233 register unsigned int 238 quantum=((
unsigned int) *pixels++);
239 quantum|=((
unsigned int) *pixels++ << 8);
240 quantum|=((
unsigned int) *pixels++ << 16);
241 quantum|=((
unsigned int) *pixels++ << 24);
245 quantum=((
unsigned int) *pixels++ << 24);
246 quantum|=((
unsigned int) *pixels++ << 16);
247 quantum|=((
unsigned int) *pixels++ << 8);
248 quantum|=((
unsigned int) *pixels++);
254 const unsigned char *pixels,
unsigned short *
pixel)
256 register unsigned int 261 quantum=(
unsigned int) *pixels++;
262 quantum|=(
unsigned int) (*pixels++ << 8);
263 *pixel=(
unsigned short) (quantum & 0xffff);
266 quantum=(
unsigned int) (*pixels++ << 8);
267 quantum|=(
unsigned int) *pixels++;
268 *pixel=(
unsigned short) (quantum & 0xffff);
277 #if !defined(MAGICKCORE_HDRI_SUPPORT) 290 #if (MAGICKCORE_QUANTUM_DEPTH == 8) 291 static inline Quantum ScaleCharToQuantum(
const unsigned char value)
296 static inline Quantum ScaleLongToQuantum(
const unsigned int value)
298 #if !defined(MAGICKCORE_HDRI_SUPPORT) 299 return((
Quantum) ((value+8421504UL)/16843009UL));
301 return((
Quantum) (value/16843009.0));
311 #if !defined(MAGICKCORE_HDRI_SUPPORT) 318 static inline unsigned int ScaleQuantumToLong(
const Quantum quantum)
320 #if !defined(MAGICKCORE_HDRI_SUPPORT) 321 return((
unsigned int) (16843009UL*quantum));
325 if ((16843009.0*quantum) >= 4294967295.0)
326 return(4294967295UL);
327 return((
unsigned int) (16843009.0*quantum+0.5));
331 static inline unsigned int ScaleQuantumToMap(
const Quantum quantum)
334 return((
unsigned int) MaxMap);
335 #if !defined(MAGICKCORE_HDRI_SUPPORT) 336 return((
unsigned int) quantum);
340 return((
unsigned int) (quantum+0.5));
344 static inline unsigned short ScaleQuantumToShort(
const Quantum quantum)
346 #if !defined(MAGICKCORE_HDRI_SUPPORT) 347 return((
unsigned short) (257UL*quantum));
351 if ((257.0*quantum) >= 65535.0)
353 return((
unsigned short) (257.0*quantum+0.5));
357 static inline Quantum ScaleShortToQuantum(
const unsigned short value)
359 #if !defined(MAGICKCORE_HDRI_SUPPORT) 360 return((
Quantum) ((value+128U)/257U));
362 return((
Quantum) (value/257.0));
365 #elif (MAGICKCORE_QUANTUM_DEPTH == 16) 366 static inline Quantum ScaleCharToQuantum(
const unsigned char value)
368 #if !defined(MAGICKCORE_HDRI_SUPPORT) 369 return((
Quantum) (257U*value));
371 return((
Quantum) (257.0*value));
375 static inline Quantum ScaleLongToQuantum(
const unsigned int value)
377 #if !defined(MAGICKCORE_HDRI_SUPPORT) 381 return((
Quantum) (value/65537.0));
391 #if !defined(MAGICKCORE_HDRI_SUPPORT) 398 static inline unsigned int ScaleQuantumToLong(
const Quantum quantum)
400 #if !defined(MAGICKCORE_HDRI_SUPPORT) 401 return((
unsigned int) (65537UL*quantum));
405 if ((65537.0*quantum) >= 4294967295.0)
407 return((
unsigned int) (65537.0*quantum+0.5));
411 static inline unsigned int ScaleQuantumToMap(
const Quantum quantum)
414 return((
unsigned int) MaxMap);
415 #if !defined(MAGICKCORE_HDRI_SUPPORT) 416 return((
unsigned int) quantum);
420 return((
unsigned int) (quantum+0.5));
424 static inline unsigned short ScaleQuantumToShort(
const Quantum quantum)
426 #if !defined(MAGICKCORE_HDRI_SUPPORT) 427 return((
unsigned short) quantum);
431 if (quantum >= 65535.0)
433 return((
unsigned short) (quantum+0.5));
437 static inline Quantum ScaleShortToQuantum(
const unsigned short value)
441 #elif (MAGICKCORE_QUANTUM_DEPTH == 32) 442 static inline Quantum ScaleCharToQuantum(
const unsigned char value)
444 #if !defined(MAGICKCORE_HDRI_SUPPORT) 445 return((
Quantum) (16843009UL*value));
447 return((
Quantum) (16843009.0*value));
451 static inline Quantum ScaleLongToQuantum(
const unsigned int value)
462 #if !defined(MAGICKCORE_HDRI_SUPPORT) 463 return((
Quantum) (65537.0*value+0.5));
465 return((
Quantum) (65537.0*value));
469 static inline unsigned int ScaleQuantumToLong(
const Quantum quantum)
471 #if !defined(MAGICKCORE_HDRI_SUPPORT) 472 return((
unsigned int) quantum);
476 if ((quantum) >= 4294967295.0)
478 return((
unsigned int) (quantum+0.5));
482 static inline unsigned int ScaleQuantumToMap(
const Quantum quantum)
487 return((
unsigned int) MaxMap);
488 #if !defined(MAGICKCORE_HDRI_SUPPORT) 492 return((
unsigned int) (quantum/65537.0+0.5));
496 static inline unsigned short ScaleQuantumToShort(
const Quantum quantum)
498 #if !defined(MAGICKCORE_HDRI_SUPPORT) 504 if ((quantum/65537.0) >= 65535.0)
506 return((
unsigned short) (quantum/65537.0+0.5));
510 static inline Quantum ScaleShortToQuantum(
const unsigned short value)
512 #if !defined(MAGICKCORE_HDRI_SUPPORT) 513 return((
Quantum) (65537UL*value));
515 return((
Quantum) (65537.0*value));
518 #elif (MAGICKCORE_QUANTUM_DEPTH == 64) 519 static inline Quantum ScaleCharToQuantum(
const unsigned char value)
521 return((
Quantum) (72340172838076673.0*value));
524 static inline Quantum ScaleLongToQuantum(
const unsigned int value)
526 return((
Quantum) (4294967297.0*value));
535 return((
Quantum) (281479271743489.0*value));
538 static inline unsigned int ScaleQuantumToLong(
const Quantum quantum)
540 return((
unsigned int) (quantum/4294967297.0+0.5));
543 static inline unsigned int ScaleQuantumToMap(
const Quantum quantum)
547 if ((quantum/281479271743489.0) >=
MaxMap)
548 return((
unsigned int)
MaxMap);
549 return((
unsigned int) (quantum/281479271743489.0+0.5));
552 static inline unsigned short ScaleQuantumToShort(
const Quantum quantum)
556 if ((quantum/281479271743489.0) >= 65535.0)
558 return((
unsigned short) (quantum/281479271743489.0+0.5));
561 static inline Quantum ScaleShortToQuantum(
const unsigned short value)
563 return((
Quantum) (281479271743489.0*value));
569 typedef union _SinglePrecision
581 register unsigned int 598 map.single_precision=value;
599 sign_bit=(map.fixed_point >> 16) & 0x00008000;
601 significand=map.fixed_point & 0x007fffff;
608 return((
unsigned short) sign_bit);
609 significand=significand | 0x00800000;
610 shift=(int) (14-exponent);
611 significand=(
unsigned int) ((significand+((1 << (shift-1))-1)+
612 ((significand >> shift) & 0x01)) >> shift);
613 return((
unsigned short) (sign_bit | significand));
618 if (significand == 0)
623 half=(
unsigned short) (sign_bit | significand |
628 significand=significand+((significand >>
SignificandShift) & 0x01)+0x00000fff;
629 if ((significand & 0x00800000) != 0)
646 for (i=0; i < 10; i++)
650 half=(
unsigned short) (sign_bit | (exponent << 10) |
655 #if defined(__cplusplus) || defined(c_plusplus) MagickDoubleType MagickRealType
Definition: magick-type.h:123
QuantumFormatType
Definition: quantum.h:44
QuantumFormatType format
Definition: quantum-private.h:50
static MagickSizeType GetQuantumRange(const size_t depth)
Definition: quantum-private.h:92
MemoryInfo ** pixels
Definition: quantum-private.h:71
QuantumAlphaType alpha_type
Definition: quantum-private.h:65
size_t signature
Definition: quantum-private.h:86
#define MagickULLConstant(c)
Definition: magick-type.h:39
MagickPrivate void ResetQuantumState(QuantumInfo *)
Definition: quantum.c:578
QuantumState state
Definition: quantum-private.h:80
EndianType
Definition: quantum.h:30
size_t quantum
Definition: quantum-private.h:46
EndianType endian
Definition: quantum-private.h:77
static const unsigned char * PushShortPixel(const EndianType endian, const unsigned char *pixels, unsigned short *pixel)
Definition: quantum-private.h:253
MagickBooleanType pack
Definition: quantum-private.h:61
static const unsigned char * PushCharPixel(const unsigned char *pixels, unsigned char *pixel)
Definition: quantum-private.h:223
MagickBooleanType
Definition: magick-type.h:189
static Quantum ScaleAnyToQuantum(const QuantumAny quantum, const QuantumAny range)
Definition: quantum-private.h:272
static unsigned char * PopLongPixel(const EndianType endian, const unsigned int pixel, unsigned char *pixels)
Definition: quantum-private.h:183
unsigned int pixel
Definition: quantum-private.h:34
size_t MagickSizeType
Definition: magick-type.h:134
static const unsigned char * PushLongPixel(const EndianType endian, const unsigned char *pixels, unsigned int *pixel)
Definition: quantum-private.h:230
SemaphoreInfo * semaphore
Definition: quantum-private.h:83
#define MaxMap
Definition: magick-type.h:78
Definition: quantum-private.h:43
size_t pad
Definition: quantum-private.h:58
static float HalfToSinglePrecision(const unsigned short half)
Definition: quantum-private.h:101
size_t number_threads
Definition: quantum-private.h:68
double scale
Definition: quantum-private.h:53
const unsigned int * mask
Definition: quantum-private.h:40
unsigned short Quantum
Definition: magick-type.h:85
size_t bits
Definition: quantum-private.h:37
size_t extent
Definition: quantum-private.h:74
static unsigned char * PopCharPixel(const unsigned char pixel, unsigned char *pixels)
Definition: quantum-private.h:176
static unsigned char * PopShortPixel(const EndianType endian, const unsigned short pixel, unsigned char *pixels)
Definition: quantum-private.h:205
double inverse_scale
Definition: quantum-private.h:31
static unsigned short SinglePrecisionToHalf(const float value)
Definition: quantum-private.h:567
#define MagickPrivate
Definition: method-attribute.h:99
struct _QuantumState QuantumState
static QuantumAny ScaleQuantumToAny(const Quantum quantum, const QuantumAny range)
Definition: quantum-private.h:284
Definition: quantum-private.h:28
MagickSizeType QuantumAny
Definition: magick-type.h:148
QuantumAlphaType
Definition: quantum.h:37
Definition: semaphore.c:59
#define QuantumRange
Definition: magick-type.h:86