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);
241 *pixel=(
unsigned int) (quantum & 0xffffffff);
244 quantum=(
unsigned int) (*pixels++ << 24);
245 quantum|=(
unsigned int) (*pixels++ << 16);
246 quantum|=(
unsigned int) (*pixels++ << 8);
247 quantum|=(
unsigned int) (*pixels++);
248 *pixel=(
unsigned int) (quantum & 0xffffffff);
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);
274 #if !defined(MAGICKCORE_HDRI_SUPPORT) 287 #if (MAGICKCORE_QUANTUM_DEPTH == 8) 288 static inline Quantum ScaleCharToQuantum(
const unsigned char value)
293 static inline Quantum ScaleLongToQuantum(
const unsigned int value)
295 #if !defined(MAGICKCORE_HDRI_SUPPORT) 296 return((
Quantum) ((value+8421504UL)/16843009UL));
298 return((
Quantum) (value/16843009.0));
308 #if !defined(MAGICKCORE_HDRI_SUPPORT) 315 static inline unsigned int ScaleQuantumToLong(
const Quantum quantum)
317 #if !defined(MAGICKCORE_HDRI_SUPPORT) 318 return((
unsigned int) (16843009UL*quantum));
322 if ((16843009.0*quantum) >= 4294967295.0)
323 return(4294967295UL);
324 return((
unsigned int) (16843009.0*quantum+0.5));
328 static inline unsigned int ScaleQuantumToMap(
const Quantum quantum)
331 return((
unsigned int) MaxMap);
332 #if !defined(MAGICKCORE_HDRI_SUPPORT) 333 return((
unsigned int) quantum);
337 return((
unsigned int) (quantum+0.5));
341 static inline unsigned short ScaleQuantumToShort(
const Quantum quantum)
343 #if !defined(MAGICKCORE_HDRI_SUPPORT) 344 return((
unsigned short) (257UL*quantum));
348 if ((257.0*quantum) >= 65535.0)
350 return((
unsigned short) (257.0*quantum+0.5));
354 static inline Quantum ScaleShortToQuantum(
const unsigned short value)
356 #if !defined(MAGICKCORE_HDRI_SUPPORT) 357 return((
Quantum) ((value+128U)/257U));
359 return((
Quantum) (value/257.0));
362 #elif (MAGICKCORE_QUANTUM_DEPTH == 16) 363 static inline Quantum ScaleCharToQuantum(
const unsigned char value)
365 #if !defined(MAGICKCORE_HDRI_SUPPORT) 366 return((
Quantum) (257U*value));
368 return((
Quantum) (257.0*value));
372 static inline Quantum ScaleLongToQuantum(
const unsigned int value)
374 #if !defined(MAGICKCORE_HDRI_SUPPORT) 378 return((
Quantum) (value/65537.0));
388 #if !defined(MAGICKCORE_HDRI_SUPPORT) 395 static inline unsigned int ScaleQuantumToLong(
const Quantum quantum)
397 #if !defined(MAGICKCORE_HDRI_SUPPORT) 398 return((
unsigned int) (65537UL*quantum));
402 if ((65537.0*quantum) >= 4294967295.0)
404 return((
unsigned int) (65537.0*quantum+0.5));
408 static inline unsigned int ScaleQuantumToMap(
const Quantum quantum)
411 return((
unsigned int) MaxMap);
412 #if !defined(MAGICKCORE_HDRI_SUPPORT) 413 return((
unsigned int) quantum);
417 return((
unsigned int) (quantum+0.5));
421 static inline unsigned short ScaleQuantumToShort(
const Quantum quantum)
423 #if !defined(MAGICKCORE_HDRI_SUPPORT) 424 return((
unsigned short) quantum);
428 if (quantum >= 65535.0)
430 return((
unsigned short) (quantum+0.5));
434 static inline Quantum ScaleShortToQuantum(
const unsigned short value)
438 #elif (MAGICKCORE_QUANTUM_DEPTH == 32) 439 static inline Quantum ScaleCharToQuantum(
const unsigned char value)
441 #if !defined(MAGICKCORE_HDRI_SUPPORT) 442 return((
Quantum) (16843009UL*value));
444 return((
Quantum) (16843009.0*value));
448 static inline Quantum ScaleLongToQuantum(
const unsigned int value)
459 #if !defined(MAGICKCORE_HDRI_SUPPORT) 460 return((
Quantum) (65537.0*value+0.5));
462 return((
Quantum) (65537.0*value));
466 static inline unsigned int ScaleQuantumToLong(
const Quantum quantum)
468 #if !defined(MAGICKCORE_HDRI_SUPPORT) 469 return((
unsigned int) quantum);
473 if ((quantum) >= 4294967295.0)
475 return((
unsigned int) (quantum+0.5));
479 static inline unsigned int ScaleQuantumToMap(
const Quantum quantum)
484 return((
unsigned int) MaxMap);
485 #if !defined(MAGICKCORE_HDRI_SUPPORT) 489 return((
unsigned int) (quantum/65537.0+0.5));
493 static inline unsigned short ScaleQuantumToShort(
const Quantum quantum)
495 #if !defined(MAGICKCORE_HDRI_SUPPORT) 501 if ((quantum/65537.0) >= 65535.0)
503 return((
unsigned short) (quantum/65537.0+0.5));
507 static inline Quantum ScaleShortToQuantum(
const unsigned short value)
509 #if !defined(MAGICKCORE_HDRI_SUPPORT) 510 return((
Quantum) (65537UL*value));
512 return((
Quantum) (65537.0*value));
515 #elif (MAGICKCORE_QUANTUM_DEPTH == 64) 516 static inline Quantum ScaleCharToQuantum(
const unsigned char value)
518 return((
Quantum) (72340172838076673.0*value));
521 static inline Quantum ScaleLongToQuantum(
const unsigned int value)
523 return((
Quantum) (4294967297.0*value));
532 return((
Quantum) (281479271743489.0*value));
535 static inline unsigned int ScaleQuantumToLong(
const Quantum quantum)
537 return((
unsigned int) (quantum/4294967297.0+0.5));
540 static inline unsigned int ScaleQuantumToMap(
const Quantum quantum)
544 if ((quantum/281479271743489.0) >=
MaxMap)
545 return((
unsigned int)
MaxMap);
546 return((
unsigned int) (quantum/281479271743489.0+0.5));
549 static inline unsigned short ScaleQuantumToShort(
const Quantum quantum)
553 if ((quantum/281479271743489.0) >= 65535.0)
555 return((
unsigned short) (quantum/281479271743489.0+0.5));
558 static inline Quantum ScaleShortToQuantum(
const unsigned short value)
560 return((
Quantum) (281479271743489.0*value));
566 typedef union _SinglePrecision
578 register unsigned int 595 map.single_precision=value;
596 sign_bit=(map.fixed_point >> 16) & 0x00008000;
598 significand=map.fixed_point & 0x007fffff;
605 return((
unsigned short) sign_bit);
606 significand=significand | 0x00800000;
607 shift=(int) (14-exponent);
608 significand=(
unsigned int) ((significand+((1 << (shift-1))-1)+
609 ((significand >> shift) & 0x01)) >> shift);
610 return((
unsigned short) (sign_bit | significand));
615 if (significand == 0)
620 half=(
unsigned short) (sign_bit | significand |
625 significand=significand+((significand >>
SignificandShift) & 0x01)+0x00000fff;
626 if ((significand & 0x00800000) != 0)
643 for (i=0; i < 10; i++)
647 half=(
unsigned short) (sign_bit | (exponent << 10) |
652 #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:39
unsigned char ** pixels
Definition: quantum-private.h:70
MagickPrivate void ResetQuantumState(QuantumInfo *)
Definition: quantum.c:576
float MagickRealType
Definition: magick-type.h:79
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:214
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:159
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:73
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:96
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:564
#define MagickPrivate
Definition: method-attribute.h:99
struct _QuantumState QuantumState
static QuantumAny ScaleQuantumToAny(const Quantum quantum, const QuantumAny range)
Definition: quantum-private.h:281
Definition: quantum-private.h:27
MagickSizeType QuantumAny
Definition: magick-type.h:173
QuantumAlphaType
Definition: quantum.h:37
Definition: semaphore.c:58
#define QuantumRange
Definition: magick-type.h:97