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) 286 #if !defined(MAGICKCORE_HDRI_SUPPORT) 297 #if (MAGICKCORE_QUANTUM_DEPTH == 8) 298 static inline Quantum ScaleCharToQuantum(
const unsigned char value)
303 static inline Quantum ScaleLongToQuantum(
const unsigned int value)
305 #if !defined(MAGICKCORE_HDRI_SUPPORT) 306 return((
Quantum) ((value+8421504UL)/16843009UL));
308 return((
Quantum) (value/16843009.0));
318 #if !defined(MAGICKCORE_HDRI_SUPPORT) 325 static inline unsigned int ScaleQuantumToLong(
const Quantum quantum)
327 #if !defined(MAGICKCORE_HDRI_SUPPORT) 328 return((
unsigned int) (16843009UL*quantum));
332 if ((16843009.0*quantum) >= 4294967295.0)
333 return(4294967295UL);
334 return((
unsigned int) (16843009.0*quantum+0.5));
338 static inline unsigned int ScaleQuantumToMap(
const Quantum quantum)
341 return((
unsigned int) MaxMap);
342 #if !defined(MAGICKCORE_HDRI_SUPPORT) 343 return((
unsigned int) quantum);
347 return((
unsigned int) (quantum+0.5));
351 static inline unsigned short ScaleQuantumToShort(
const Quantum quantum)
353 #if !defined(MAGICKCORE_HDRI_SUPPORT) 354 return((
unsigned short) (257UL*quantum));
358 if ((257.0*quantum) >= 65535.0)
360 return((
unsigned short) (257.0*quantum+0.5));
364 static inline Quantum ScaleShortToQuantum(
const unsigned short value)
366 #if !defined(MAGICKCORE_HDRI_SUPPORT) 367 return((
Quantum) ((value+128U)/257U));
369 return((
Quantum) (value/257.0));
372 #elif (MAGICKCORE_QUANTUM_DEPTH == 16) 373 static inline Quantum ScaleCharToQuantum(
const unsigned char value)
375 #if !defined(MAGICKCORE_HDRI_SUPPORT) 376 return((
Quantum) (257U*value));
378 return((
Quantum) (257.0*value));
382 static inline Quantum ScaleLongToQuantum(
const unsigned int value)
384 #if !defined(MAGICKCORE_HDRI_SUPPORT) 388 return((
Quantum) (value/65537.0));
398 #if !defined(MAGICKCORE_HDRI_SUPPORT) 405 static inline unsigned int ScaleQuantumToLong(
const Quantum quantum)
407 #if !defined(MAGICKCORE_HDRI_SUPPORT) 408 return((
unsigned int) (65537UL*quantum));
412 if ((65537.0*quantum) >= 4294967295.0)
414 return((
unsigned int) (65537.0*quantum+0.5));
418 static inline unsigned int ScaleQuantumToMap(
const Quantum quantum)
421 return((
unsigned int) MaxMap);
422 #if !defined(MAGICKCORE_HDRI_SUPPORT) 423 return((
unsigned int) quantum);
427 return((
unsigned int) (quantum+0.5));
431 static inline unsigned short ScaleQuantumToShort(
const Quantum quantum)
433 #if !defined(MAGICKCORE_HDRI_SUPPORT) 434 return((
unsigned short) quantum);
438 if (quantum >= 65535.0)
440 return((
unsigned short) (quantum+0.5));
444 static inline Quantum ScaleShortToQuantum(
const unsigned short value)
448 #elif (MAGICKCORE_QUANTUM_DEPTH == 32) 449 static inline Quantum ScaleCharToQuantum(
const unsigned char value)
451 #if !defined(MAGICKCORE_HDRI_SUPPORT) 452 return((
Quantum) (16843009UL*value));
454 return((
Quantum) (16843009.0*value));
458 static inline Quantum ScaleLongToQuantum(
const unsigned int value)
469 #if !defined(MAGICKCORE_HDRI_SUPPORT) 470 return((
Quantum) (65537.0*value+0.5));
472 return((
Quantum) (65537.0*value));
476 static inline unsigned int ScaleQuantumToLong(
const Quantum quantum)
478 #if !defined(MAGICKCORE_HDRI_SUPPORT) 479 return((
unsigned int) quantum);
483 if ((quantum) >= 4294967295.0)
485 return((
unsigned int) (quantum+0.5));
489 static inline unsigned int ScaleQuantumToMap(
const Quantum quantum)
494 return((
unsigned int) MaxMap);
495 #if !defined(MAGICKCORE_HDRI_SUPPORT) 499 return((
unsigned int) (quantum/65537.0+0.5));
503 static inline unsigned short ScaleQuantumToShort(
const Quantum quantum)
505 #if !defined(MAGICKCORE_HDRI_SUPPORT) 511 if ((quantum/65537.0) >= 65535.0)
513 return((
unsigned short) (quantum/65537.0+0.5));
517 static inline Quantum ScaleShortToQuantum(
const unsigned short value)
519 #if !defined(MAGICKCORE_HDRI_SUPPORT) 520 return((
Quantum) (65537UL*value));
522 return((
Quantum) (65537.0*value));
525 #elif (MAGICKCORE_QUANTUM_DEPTH == 64) 526 static inline Quantum ScaleCharToQuantum(
const unsigned char value)
528 return((
Quantum) (72340172838076673.0*value));
531 static inline Quantum ScaleLongToQuantum(
const unsigned int value)
533 return((
Quantum) (4294967297.0*value));
542 return((
Quantum) (281479271743489.0*value));
545 static inline unsigned int ScaleQuantumToLong(
const Quantum quantum)
547 return((
unsigned int) (quantum/4294967297.0+0.5));
550 static inline unsigned int ScaleQuantumToMap(
const Quantum quantum)
554 if ((quantum/281479271743489.0) >=
MaxMap)
555 return((
unsigned int)
MaxMap);
556 return((
unsigned int) (quantum/281479271743489.0+0.5));
559 static inline unsigned short ScaleQuantumToShort(
const Quantum quantum)
563 if ((quantum/281479271743489.0) >= 65535.0)
565 return((
unsigned short) (quantum/281479271743489.0+0.5));
568 static inline Quantum ScaleShortToQuantum(
const unsigned short value)
570 return((
Quantum) (281479271743489.0*value));
576 typedef union _SinglePrecision
588 register unsigned int 605 map.single_precision=value;
606 sign_bit=(map.fixed_point >> 16) & 0x00008000;
608 significand=map.fixed_point & 0x007fffff;
615 return((
unsigned short) sign_bit);
616 significand=significand | 0x00800000;
617 shift=(int) (14-exponent);
618 significand=(
unsigned int) ((significand+((1 << (shift-1))-1)+
619 ((significand >> shift) & 0x01)) >> shift);
620 return((
unsigned short) (sign_bit | significand));
625 if (significand == 0)
630 half=(
unsigned short) (sign_bit | significand |
635 significand=significand+((significand >>
SignificandShift) & 0x01)+0x00000fff;
636 if ((significand & 0x00800000) != 0)
653 for (i=0; i < 10; i++)
657 half=(
unsigned short) (sign_bit | (exponent << 10) |
662 #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: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: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
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
#define IsNaN(a)
Definition: magick-type.h:234
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:213
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:574
#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:38
Definition: semaphore.c:58
#define QuantumRange
Definition: magick-type.h:94