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) 284 #if !defined(MAGICKCORE_HDRI_SUPPORT) 295 #if (MAGICKCORE_QUANTUM_DEPTH == 8) 296 static inline Quantum ScaleCharToQuantum(
const unsigned char value)
301 static inline Quantum ScaleLongToQuantum(
const unsigned int value)
303 #if !defined(MAGICKCORE_HDRI_SUPPORT) 304 return((
Quantum) ((value+8421504UL)/16843009UL));
306 return((
Quantum) (value/16843009.0));
316 #if !defined(MAGICKCORE_HDRI_SUPPORT) 323 static inline unsigned int ScaleQuantumToLong(
const Quantum quantum)
325 #if !defined(MAGICKCORE_HDRI_SUPPORT) 326 return((
unsigned int) (16843009UL*quantum));
330 if ((16843009.0*quantum) >= 4294967295.0)
331 return(4294967295UL);
332 return((
unsigned int) (16843009.0*quantum+0.5));
336 static inline unsigned int ScaleQuantumToMap(
const Quantum quantum)
339 return((
unsigned int) MaxMap);
340 #if !defined(MAGICKCORE_HDRI_SUPPORT) 341 return((
unsigned int) quantum);
345 return((
unsigned int) (quantum+0.5));
349 static inline unsigned short ScaleQuantumToShort(
const Quantum quantum)
351 #if !defined(MAGICKCORE_HDRI_SUPPORT) 352 return((
unsigned short) (257UL*quantum));
356 if ((257.0*quantum) >= 65535.0)
358 return((
unsigned short) (257.0*quantum+0.5));
362 static inline Quantum ScaleShortToQuantum(
const unsigned short value)
364 #if !defined(MAGICKCORE_HDRI_SUPPORT) 365 return((
Quantum) ((value+128U)/257U));
367 return((
Quantum) (value/257.0));
370 #elif (MAGICKCORE_QUANTUM_DEPTH == 16) 371 static inline Quantum ScaleCharToQuantum(
const unsigned char value)
373 #if !defined(MAGICKCORE_HDRI_SUPPORT) 374 return((
Quantum) (257U*value));
376 return((
Quantum) (257.0*value));
380 static inline Quantum ScaleLongToQuantum(
const unsigned int value)
382 #if !defined(MAGICKCORE_HDRI_SUPPORT) 386 return((
Quantum) (value/65537.0));
396 #if !defined(MAGICKCORE_HDRI_SUPPORT) 403 static inline unsigned int ScaleQuantumToLong(
const Quantum quantum)
405 #if !defined(MAGICKCORE_HDRI_SUPPORT) 406 return((
unsigned int) (65537UL*quantum));
410 if ((65537.0*quantum) >= 4294967295.0)
412 return((
unsigned int) (65537.0*quantum+0.5));
416 static inline unsigned int ScaleQuantumToMap(
const Quantum quantum)
419 return((
unsigned int) MaxMap);
420 #if !defined(MAGICKCORE_HDRI_SUPPORT) 421 return((
unsigned int) quantum);
425 return((
unsigned int) (quantum+0.5));
429 static inline unsigned short ScaleQuantumToShort(
const Quantum quantum)
431 #if !defined(MAGICKCORE_HDRI_SUPPORT) 432 return((
unsigned short) quantum);
436 if (quantum >= 65535.0)
438 return((
unsigned short) (quantum+0.5));
442 static inline Quantum ScaleShortToQuantum(
const unsigned short value)
446 #elif (MAGICKCORE_QUANTUM_DEPTH == 32) 447 static inline Quantum ScaleCharToQuantum(
const unsigned char value)
449 #if !defined(MAGICKCORE_HDRI_SUPPORT) 450 return((
Quantum) (16843009UL*value));
452 return((
Quantum) (16843009.0*value));
456 static inline Quantum ScaleLongToQuantum(
const unsigned int value)
467 #if !defined(MAGICKCORE_HDRI_SUPPORT) 468 return((
Quantum) (65537.0*value+0.5));
470 return((
Quantum) (65537.0*value));
474 static inline unsigned int ScaleQuantumToLong(
const Quantum quantum)
476 #if !defined(MAGICKCORE_HDRI_SUPPORT) 477 return((
unsigned int) quantum);
481 if ((quantum) >= 4294967295.0)
483 return((
unsigned int) (quantum+0.5));
487 static inline unsigned int ScaleQuantumToMap(
const Quantum quantum)
492 return((
unsigned int) MaxMap);
493 #if !defined(MAGICKCORE_HDRI_SUPPORT) 497 return((
unsigned int) (quantum/65537.0+0.5));
501 static inline unsigned short ScaleQuantumToShort(
const Quantum quantum)
503 #if !defined(MAGICKCORE_HDRI_SUPPORT) 509 if ((quantum/65537.0) >= 65535.0)
511 return((
unsigned short) (quantum/65537.0+0.5));
515 static inline Quantum ScaleShortToQuantum(
const unsigned short value)
517 #if !defined(MAGICKCORE_HDRI_SUPPORT) 518 return((
Quantum) (65537UL*value));
520 return((
Quantum) (65537.0*value));
523 #elif (MAGICKCORE_QUANTUM_DEPTH == 64) 524 static inline Quantum ScaleCharToQuantum(
const unsigned char value)
526 return((
Quantum) (72340172838076673.0*value));
529 static inline Quantum ScaleLongToQuantum(
const unsigned int value)
531 return((
Quantum) (4294967297.0*value));
540 return((
Quantum) (281479271743489.0*value));
543 static inline unsigned int ScaleQuantumToLong(
const Quantum quantum)
545 return((
unsigned int) (quantum/4294967297.0+0.5));
548 static inline unsigned int ScaleQuantumToMap(
const Quantum quantum)
552 if ((quantum/281479271743489.0) >=
MaxMap)
553 return((
unsigned int)
MaxMap);
554 return((
unsigned int) (quantum/281479271743489.0+0.5));
557 static inline unsigned short ScaleQuantumToShort(
const Quantum quantum)
561 if ((quantum/281479271743489.0) >= 65535.0)
563 return((
unsigned short) (quantum/281479271743489.0+0.5));
566 static inline Quantum ScaleShortToQuantum(
const unsigned short value)
568 return((
Quantum) (281479271743489.0*value));
574 typedef union _SinglePrecision
586 register unsigned int 603 map.single_precision=value;
604 sign_bit=(map.fixed_point >> 16) & 0x00008000;
606 significand=map.fixed_point & 0x007fffff;
613 return((
unsigned short) sign_bit);
614 significand=significand | 0x00800000;
615 shift=(int) (14-exponent);
616 significand=(
unsigned int) ((significand+((1 << (shift-1))-1)+
617 ((significand >> shift) & 0x01)) >> shift);
618 return((
unsigned short) (sign_bit | significand));
623 if (significand == 0)
628 half=(
unsigned short) (sign_bit | significand |
633 significand=significand+((significand >>
SignificandShift) & 0x01)+0x00000fff;
634 if ((significand & 0x00800000) != 0)
651 for (i=0; i < 10; i++)
655 half=(
unsigned short) (sign_bit | (exponent << 10) |
660 #if defined(__cplusplus) || defined(c_plusplus) QuantumFormatType
Definition: quantum.h:45
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:31
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
#define IsNaN(a)
Definition: image-private.h:25
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
Definition: magick-type.h:216
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:572
#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:38
Definition: semaphore.c:58
#define QuantumRange
Definition: magick-type.h:97