18 #ifndef MAGICKCORE_QUANTUM_PRIVATE_H 19 #define MAGICKCORE_QUANTUM_PRIVATE_H 23 #if defined(__cplusplus) || defined(c_plusplus) 97 return((
MagickSizeType) ((one << (depth-1))+((one << (depth-1))-1)));
102 #define ExponentBias (127-15) 103 #define ExponentMask 0x7c00 104 #define ExponentShift 23 105 #define SignBitShift 31 106 #define SignificandShift 13 107 #define SignificandMask 0x00000400 109 typedef union _SinglePrecision
118 register unsigned int 136 sign_bit=(
unsigned int) ((half >> 15) & 0x00000001);
137 exponent=(
unsigned int) ((half >> 10) & 0x0000001f);
138 significand=(
unsigned int) (half & 0x000003ff);
141 if (significand == 0)
151 significand&=(~SignificandMask);
161 if (significand != 0)
171 map.fixed_point=value;
172 return(map.single_precision);
176 unsigned char *pixels)
183 const unsigned int pixel,
unsigned char *pixels)
185 register unsigned int 188 quantum=(
unsigned int) pixel;
191 *pixels++=(
unsigned char) (quantum);
192 *pixels++=(
unsigned char) (quantum >> 8);
193 *pixels++=(
unsigned char) (quantum >> 16);
194 *pixels++=(
unsigned char) (quantum >> 24);
197 *pixels++=(
unsigned char) (quantum >> 24);
198 *pixels++=(
unsigned char) (quantum >> 16);
199 *pixels++=(
unsigned char) (quantum >> 8);
200 *pixels++=(
unsigned char) (quantum);
205 const unsigned short pixel,
unsigned char *pixels)
207 register unsigned int 213 *pixels++=(
unsigned char) (quantum);
214 *pixels++=(
unsigned char) (quantum >> 8);
217 *pixels++=(
unsigned char) (quantum >> 8);
218 *pixels++=(
unsigned char) (quantum);
222 static inline const unsigned char *
PushCharPixel(
const unsigned char *pixels,
223 unsigned char *
pixel)
230 const unsigned char *pixels,
unsigned int *
pixel)
232 register unsigned int 237 quantum=((
unsigned int) *pixels++);
238 quantum|=((
unsigned int) *pixels++ << 8);
239 quantum|=((
unsigned int) *pixels++ << 16);
240 quantum|=((
unsigned int) *pixels++ << 24);
244 quantum=((
unsigned int) *pixels++ << 24);
245 quantum|=((
unsigned int) *pixels++ << 16);
246 quantum|=((
unsigned int) *pixels++ << 8);
247 quantum|=((
unsigned int) *pixels++);
253 const unsigned char *pixels,
unsigned short *
pixel)
255 register unsigned int 260 quantum=(
unsigned int) *pixels++;
261 quantum|=(
unsigned int) (*pixels++ << 8);
262 *pixel=(
unsigned short) (quantum & 0xffff);
265 quantum=(
unsigned int) (*pixels++ << 8);
266 quantum|=(
unsigned int) *pixels++;
267 *pixel=(
unsigned short) (quantum & 0xffff);
276 #if !defined(MAGICKCORE_HDRI_SUPPORT) 289 #if (MAGICKCORE_QUANTUM_DEPTH == 8) 290 static inline Quantum ScaleCharToQuantum(
const unsigned char value)
295 static inline Quantum ScaleLongToQuantum(
const unsigned int value)
297 #if !defined(MAGICKCORE_HDRI_SUPPORT) 298 return((
Quantum) ((value+8421504UL)/16843009UL));
300 return((
Quantum) (value/16843009.0));
310 #if !defined(MAGICKCORE_HDRI_SUPPORT) 317 static inline unsigned int ScaleQuantumToLong(
const Quantum quantum)
319 #if !defined(MAGICKCORE_HDRI_SUPPORT) 320 return((
unsigned int) (16843009UL*quantum));
324 if ((16843009.0*quantum) >= 4294967295.0)
325 return(4294967295UL);
326 return((
unsigned int) (16843009.0*quantum+0.5));
330 static inline unsigned int ScaleQuantumToMap(
const Quantum quantum)
333 return((
unsigned int) MaxMap);
334 #if !defined(MAGICKCORE_HDRI_SUPPORT) 335 return((
unsigned int) quantum);
339 return((
unsigned int) (quantum+0.5));
343 static inline unsigned short ScaleQuantumToShort(
const Quantum quantum)
345 #if !defined(MAGICKCORE_HDRI_SUPPORT) 346 return((
unsigned short) (257UL*quantum));
350 if ((257.0*quantum) >= 65535.0)
352 return((
unsigned short) (257.0*quantum+0.5));
356 static inline Quantum ScaleShortToQuantum(
const unsigned short value)
358 #if !defined(MAGICKCORE_HDRI_SUPPORT) 359 return((
Quantum) ((value+128U)/257U));
361 return((
Quantum) (value/257.0));
364 #elif (MAGICKCORE_QUANTUM_DEPTH == 16) 365 static inline Quantum ScaleCharToQuantum(
const unsigned char value)
367 #if !defined(MAGICKCORE_HDRI_SUPPORT) 368 return((
Quantum) (257U*value));
370 return((
Quantum) (257.0*value));
374 static inline Quantum ScaleLongToQuantum(
const unsigned int value)
376 #if !defined(MAGICKCORE_HDRI_SUPPORT) 380 return((
Quantum) (value/65537.0));
390 #if !defined(MAGICKCORE_HDRI_SUPPORT) 397 static inline unsigned int ScaleQuantumToLong(
const Quantum quantum)
399 #if !defined(MAGICKCORE_HDRI_SUPPORT) 400 return((
unsigned int) (65537UL*quantum));
404 if ((65537.0*quantum) >= 4294967295.0)
406 return((
unsigned int) (65537.0*quantum+0.5));
410 static inline unsigned int ScaleQuantumToMap(
const Quantum quantum)
413 return((
unsigned int) MaxMap);
414 #if !defined(MAGICKCORE_HDRI_SUPPORT) 415 return((
unsigned int) quantum);
419 return((
unsigned int) (quantum+0.5));
423 static inline unsigned short ScaleQuantumToShort(
const Quantum quantum)
425 #if !defined(MAGICKCORE_HDRI_SUPPORT) 426 return((
unsigned short) quantum);
430 if (quantum >= 65535.0)
432 return((
unsigned short) (quantum+0.5));
436 static inline Quantum ScaleShortToQuantum(
const unsigned short value)
440 #elif (MAGICKCORE_QUANTUM_DEPTH == 32) 441 static inline Quantum ScaleCharToQuantum(
const unsigned char value)
443 #if !defined(MAGICKCORE_HDRI_SUPPORT) 444 return((
Quantum) (16843009UL*value));
446 return((
Quantum) (16843009.0*value));
450 static inline Quantum ScaleLongToQuantum(
const unsigned int value)
461 #if !defined(MAGICKCORE_HDRI_SUPPORT) 462 return((
Quantum) (65537.0*value+0.5));
464 return((
Quantum) (65537.0*value));
468 static inline unsigned int ScaleQuantumToLong(
const Quantum quantum)
470 #if !defined(MAGICKCORE_HDRI_SUPPORT) 471 return((
unsigned int) quantum);
475 if ((quantum) >= 4294967295.0)
477 return((
unsigned int) (quantum+0.5));
481 static inline unsigned int ScaleQuantumToMap(
const Quantum quantum)
486 return((
unsigned int) MaxMap);
487 #if !defined(MAGICKCORE_HDRI_SUPPORT) 491 return((
unsigned int) (quantum/65537.0+0.5));
495 static inline unsigned short ScaleQuantumToShort(
const Quantum quantum)
497 #if !defined(MAGICKCORE_HDRI_SUPPORT) 503 if ((quantum/65537.0) >= 65535.0)
505 return((
unsigned short) (quantum/65537.0+0.5));
509 static inline Quantum ScaleShortToQuantum(
const unsigned short value)
511 #if !defined(MAGICKCORE_HDRI_SUPPORT) 512 return((
Quantum) (65537UL*value));
514 return((
Quantum) (65537.0*value));
517 #elif (MAGICKCORE_QUANTUM_DEPTH == 64) 518 static inline Quantum ScaleCharToQuantum(
const unsigned char value)
520 return((
Quantum) (72340172838076673.0*value));
523 static inline Quantum ScaleLongToQuantum(
const unsigned int value)
525 return((
Quantum) (4294967297.0*value));
534 return((
Quantum) (281479271743489.0*value));
537 static inline unsigned int ScaleQuantumToLong(
const Quantum quantum)
539 return((
unsigned int) (quantum/4294967297.0+0.5));
542 static inline unsigned int ScaleQuantumToMap(
const Quantum quantum)
546 if ((quantum/281479271743489.0) >=
MaxMap)
547 return((
unsigned int)
MaxMap);
548 return((
unsigned int) (quantum/281479271743489.0+0.5));
551 static inline unsigned short ScaleQuantumToShort(
const Quantum quantum)
555 if ((quantum/281479271743489.0) >= 65535.0)
557 return((
unsigned short) (quantum/281479271743489.0+0.5));
560 static inline Quantum ScaleShortToQuantum(
const unsigned short value)
562 return((
Quantum) (281479271743489.0*value));
568 typedef union _SinglePrecision
580 register unsigned int 597 map.single_precision=value;
598 sign_bit=(map.fixed_point >> 16) & 0x00008000;
600 significand=map.fixed_point & 0x007fffff;
607 return((
unsigned short) sign_bit);
608 significand=significand | 0x00800000;
609 shift=(int) (14-exponent);
610 significand=(
unsigned int) ((significand+((1 << (shift-1))-1)+
611 ((significand >> shift) & 0x01)) >> shift);
612 return((
unsigned short) (sign_bit | significand));
617 if (significand == 0)
622 half=(
unsigned short) (sign_bit | significand |
627 significand=significand+((significand >>
SignificandShift) & 0x01)+0x00000fff;
628 if ((significand & 0x00800000) != 0)
645 for (i=0; i < 10; i++)
649 half=(
unsigned short) (sign_bit | (exponent << 10) |
654 #if defined(__cplusplus) || defined(c_plusplus) QuantumFormatType
Definition: quantum.h:44
QuantumFormatType format
Definition: quantum-private.h:49
static MagickSizeType GetQuantumRange(const size_t depth)
Definition: quantum-private.h:91
QuantumAlphaType alpha_type
Definition: quantum-private.h:64
size_t signature
Definition: quantum-private.h:85
#define MagickULLConstant(c)
Definition: magick-type.h:36
unsigned char ** pixels
Definition: quantum-private.h:70
MagickPrivate void ResetQuantumState(QuantumInfo *)
Definition: quantum.c:574
float MagickRealType
Definition: magick-type.h:76
QuantumState state
Definition: quantum-private.h:79
EndianType
Definition: quantum.h:30
size_t quantum
Definition: quantum-private.h:45
EndianType endian
Definition: quantum-private.h:76
static const unsigned char * PushShortPixel(const EndianType endian, const unsigned char *pixels, unsigned short *pixel)
Definition: quantum-private.h:252
MagickBooleanType pack
Definition: quantum-private.h:60
static const unsigned char * PushCharPixel(const unsigned char *pixels, unsigned char *pixel)
Definition: quantum-private.h:222
MagickBooleanType
Definition: magick-type.h:211
static Quantum ScaleAnyToQuantum(const QuantumAny quantum, const QuantumAny range)
Definition: quantum-private.h:271
static unsigned char * PopLongPixel(const EndianType endian, const unsigned int pixel, unsigned char *pixels)
Definition: quantum-private.h:182
unsigned int pixel
Definition: quantum-private.h:33
size_t MagickSizeType
Definition: magick-type.h:156
static const unsigned char * PushLongPixel(const EndianType endian, const unsigned char *pixels, unsigned int *pixel)
Definition: quantum-private.h:229
SemaphoreInfo * semaphore
Definition: quantum-private.h:82
#define MaxMap
Definition: magick-type.h:70
Definition: quantum-private.h:42
size_t pad
Definition: quantum-private.h:57
static float HalfToSinglePrecision(const unsigned short half)
Definition: quantum-private.h:100
size_t number_threads
Definition: quantum-private.h:67
double scale
Definition: quantum-private.h:52
const unsigned int * mask
Definition: quantum-private.h:39
unsigned short Quantum
Definition: magick-type.h:93
size_t bits
Definition: quantum-private.h:36
size_t extent
Definition: quantum-private.h:73
static unsigned char * PopCharPixel(const unsigned char pixel, unsigned char *pixels)
Definition: quantum-private.h:175
static unsigned char * PopShortPixel(const EndianType endian, const unsigned short pixel, unsigned char *pixels)
Definition: quantum-private.h:204
double inverse_scale
Definition: quantum-private.h:30
static unsigned short SinglePrecisionToHalf(const float value)
Definition: quantum-private.h:566
#define MagickPrivate
Definition: method-attribute.h:99
struct _QuantumState QuantumState
static QuantumAny ScaleQuantumToAny(const Quantum quantum, const QuantumAny range)
Definition: quantum-private.h:283
Definition: quantum-private.h:27
MagickSizeType QuantumAny
Definition: magick-type.h:170
QuantumAlphaType
Definition: quantum.h:37
Definition: semaphore.c:58
#define QuantumRange
Definition: magick-type.h:94