]> de.git.xonotic.org Git - xonotic/netradiant.git/blobdiff - libs/jpeg6/jdct.h
eol style
[xonotic/netradiant.git] / libs / jpeg6 / jdct.h
index cebb118e924dbeec3c2644fe6ffdda7aa78c244d..8ad701a355afb038bef4a19bf3bd8526a0c257bd 100644 (file)
-/*\r
-\r
- * jdct.h\r
-\r
- *\r
-\r
- * Copyright (C) 1994, Thomas G. Lane.\r
-\r
- * This file is part of the Independent JPEG Group's software.\r
-\r
- * For conditions of distribution and use, see the accompanying README file.\r
-\r
- *\r
-\r
- * This include file contains common declarations for the forward and\r
-\r
- * inverse DCT modules.  These declarations are private to the DCT managers\r
-\r
- * (jcdctmgr.c, jddctmgr.c) and the individual DCT algorithms.\r
-\r
- * The individual DCT algorithms are kept in separate files to ease \r
-\r
- * machine-dependent tuning (e.g., assembly coding).\r
-\r
- */\r
-\r
-\r
-\r
-\r
-\r
-/*\r
-\r
- * A forward DCT routine is given a pointer to a work area of type DCTELEM[];\r
-\r
- * the DCT is to be performed in-place in that buffer.  Type DCTELEM is int\r
-\r
- * for 8-bit samples, INT32 for 12-bit samples.  (NOTE: Floating-point DCT\r
-\r
- * implementations use an array of type FAST_FLOAT, instead.)\r
-\r
- * The DCT inputs are expected to be signed (range +-CENTERJSAMPLE).\r
-\r
- * The DCT outputs are returned scaled up by a factor of 8; they therefore\r
-\r
- * have a range of +-8K for 8-bit data, +-128K for 12-bit data.  This\r
-\r
- * convention improves accuracy in integer implementations and saves some\r
-\r
- * work in floating-point ones.\r
-\r
- * Quantization of the output coefficients is done by jcdctmgr.c.\r
-\r
- */\r
-\r
-\r
-\r
-#if BITS_IN_JSAMPLE == 8\r
-\r
-typedef int DCTELEM;           /* 16 or 32 bits is fine */\r
-\r
-#else\r
-\r
-typedef INT32 DCTELEM;         /* must have 32 bits */\r
-\r
-#endif\r
-\r
-\r
-\r
-typedef JMETHOD(void, forward_DCT_method_ptr, (DCTELEM * data));\r
-\r
-typedef JMETHOD(void, float_DCT_method_ptr, (FAST_FLOAT * data));\r
-\r
-\r
-\r
-\r
-\r
-/*\r
-\r
- * An inverse DCT routine is given a pointer to the input JBLOCK and a pointer\r
-\r
- * to an output sample array.  The routine must dequantize the input data as\r
-\r
- * well as perform the IDCT; for dequantization, it uses the multiplier table\r
-\r
- * pointed to by compptr->dct_table.  The output data is to be placed into the\r
-\r
- * sample array starting at a specified column.  (Any row offset needed will\r
-\r
- * be applied to the array pointer before it is passed to the IDCT code.)\r
-\r
- * Note that the number of samples emitted by the IDCT routine is\r
-\r
- * DCT_scaled_size * DCT_scaled_size.\r
-\r
- */\r
-\r
-\r
-\r
-/* typedef inverse_DCT_method_ptr is declared in jpegint.h */\r
-\r
-\r
-\r
-/*\r
-\r
- * Each IDCT routine has its own ideas about the best dct_table element type.\r
-\r
- */\r
-\r
-\r
-\r
-typedef MULTIPLIER ISLOW_MULT_TYPE; /* short or int, whichever is faster */\r
-\r
-#if BITS_IN_JSAMPLE == 8\r
-\r
-typedef MULTIPLIER IFAST_MULT_TYPE; /* 16 bits is OK, use short if faster */\r
-\r
-#define IFAST_SCALE_BITS  2    /* fractional bits in scale factors */\r
-\r
-#else\r
-\r
-typedef INT32 IFAST_MULT_TYPE; /* need 32 bits for scaled quantizers */\r
-\r
-#define IFAST_SCALE_BITS  13   /* fractional bits in scale factors */\r
-\r
-#endif\r
-\r
-typedef FAST_FLOAT FLOAT_MULT_TYPE; /* preferred floating type */\r
-\r
-\r
-\r
-\r
-\r
-/*\r
-\r
- * Each IDCT routine is responsible for range-limiting its results and\r
-\r
- * converting them to unsigned form (0..MAXJSAMPLE).  The raw outputs could\r
-\r
- * be quite far out of range if the input data is corrupt, so a bulletproof\r
-\r
- * range-limiting step is required.  We use a mask-and-table-lookup method\r
-\r
- * to do the combined operations quickly.  See the comments with\r
-\r
- * prepare_range_limit_table (in jdmaster.c) for more info.\r
-\r
- */\r
-\r
-\r
-\r
-#define IDCT_range_limit(cinfo)  ((cinfo)->sample_range_limit + CENTERJSAMPLE)\r
-\r
-\r
-\r
-#define RANGE_MASK  (MAXJSAMPLE * 4 + 3) /* 2 bits wider than legal samples */\r
-\r
-\r
-\r
-\r
-\r
-/* Short forms of external names for systems with brain-damaged linkers. */\r
-\r
-\r
-\r
-#ifdef NEED_SHORT_EXTERNAL_NAMES\r
-\r
-#define jpeg_fdct_islow                jFDislow\r
-\r
-#define jpeg_fdct_ifast                jFDifast\r
-\r
-#define jpeg_fdct_float                jFDfloat\r
-\r
-#define jpeg_idct_islow                jRDislow\r
-\r
-#define jpeg_idct_ifast                jRDifast\r
-\r
-#define jpeg_idct_float                jRDfloat\r
-\r
-#define jpeg_idct_4x4          jRD4x4\r
-\r
-#define jpeg_idct_2x2          jRD2x2\r
-\r
-#define jpeg_idct_1x1          jRD1x1\r
-\r
-#endif /* NEED_SHORT_EXTERNAL_NAMES */\r
-\r
-\r
-\r
-/* Extern declarations for the forward and inverse DCT routines. */\r
-\r
-\r
-\r
-EXTERN void jpeg_fdct_islow JPP((DCTELEM * data));\r
-\r
-EXTERN void jpeg_fdct_ifast JPP((DCTELEM * data));\r
-\r
-EXTERN void jpeg_fdct_float JPP((FAST_FLOAT * data));\r
-\r
-\r
-\r
-EXTERN void jpeg_idct_islow\r
-\r
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,\r
-\r
-        JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));\r
-\r
-EXTERN void jpeg_idct_ifast\r
-\r
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,\r
-\r
-        JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));\r
-\r
-EXTERN void jpeg_idct_float\r
-\r
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,\r
-\r
-        JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));\r
-\r
-EXTERN void jpeg_idct_4x4\r
-\r
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,\r
-\r
-        JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));\r
-\r
-EXTERN void jpeg_idct_2x2\r
-\r
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,\r
-\r
-        JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));\r
-\r
-EXTERN void jpeg_idct_1x1\r
-\r
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,\r
-\r
-        JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));\r
-\r
-\r
-\r
-\r
-\r
-/*\r
-\r
- * Macros for handling fixed-point arithmetic; these are used by many\r
-\r
- * but not all of the DCT/IDCT modules.\r
-\r
- *\r
-\r
- * All values are expected to be of type INT32.\r
-\r
- * Fractional constants are scaled left by CONST_BITS bits.\r
-\r
- * CONST_BITS is defined within each module using these macros,\r
-\r
- * and may differ from one module to the next.\r
-\r
- */\r
-\r
-\r
-\r
-#define ONE    ((INT32) 1)\r
-\r
-#define CONST_SCALE (ONE << CONST_BITS)\r
-\r
-\r
-\r
-/* Convert a positive real constant to an integer scaled by CONST_SCALE.\r
-\r
- * Caution: some C compilers fail to reduce "FIX(constant)" at compile time,\r
-\r
- * thus causing a lot of useless floating-point operations at run time.\r
-\r
- */\r
-\r
-\r
-\r
-#define FIX(x) ((INT32) ((x) * CONST_SCALE + 0.5))\r
-\r
-\r
-\r
-/* Descale and correctly round an INT32 value that's scaled by N bits.\r
-\r
- * We assume RIGHT_SHIFT rounds towards minus infinity, so adding\r
-\r
- * the fudge factor is correct for either sign of X.\r
-\r
- */\r
-\r
-\r
-\r
-#define DESCALE(x,n)  RIGHT_SHIFT((x) + (ONE << ((n)-1)), n)\r
-\r
-\r
-\r
-/* Multiply an INT32 variable by an INT32 constant to yield an INT32 result.\r
-\r
- * This macro is used only when the two inputs will actually be no more than\r
-\r
- * 16 bits wide, so that a 16x16->32 bit multiply can be used instead of a\r
-\r
- * full 32x32 multiply.  This provides a useful speedup on many machines.\r
-\r
- * Unfortunately there is no way to specify a 16x16->32 multiply portably\r
-\r
- * in C, but some C compilers will do the right thing if you provide the\r
-\r
- * correct combination of casts.\r
-\r
- */\r
-\r
-\r
-\r
-#ifdef SHORTxSHORT_32          /* may work if 'int' is 32 bits */\r
-\r
-#define MULTIPLY16C16(var,const)  (((INT16) (var)) * ((INT16) (const)))\r
-\r
-#endif\r
-\r
-#ifdef SHORTxLCONST_32         /* known to work with Microsoft C 6.0 */\r
-\r
-#define MULTIPLY16C16(var,const)  (((INT16) (var)) * ((INT32) (const)))\r
-\r
-#endif\r
-\r
-\r
-\r
-#ifndef MULTIPLY16C16          /* default definition */\r
-\r
-#define MULTIPLY16C16(var,const)  ((var) * (const))\r
-\r
-#endif\r
-\r
-\r
-\r
-/* Same except both inputs are variables. */\r
-\r
-\r
-\r
-#ifdef SHORTxSHORT_32          /* may work if 'int' is 32 bits */\r
-\r
-#define MULTIPLY16V16(var1,var2)  (((INT16) (var1)) * ((INT16) (var2)))\r
-\r
-#endif\r
-\r
-\r
-\r
-#ifndef MULTIPLY16V16          /* default definition */\r
-\r
-#define MULTIPLY16V16(var1,var2)  ((var1) * (var2))\r
-\r
-#endif\r
-\r
+/*
+
+ * jdct.h
+
+ *
+
+ * Copyright (C) 1994, Thomas G. Lane.
+
+ * This file is part of the Independent JPEG Group's software.
+
+ * For conditions of distribution and use, see the accompanying README file.
+
+ *
+
+ * This include file contains common declarations for the forward and
+
+ * inverse DCT modules.  These declarations are private to the DCT managers
+
+ * (jcdctmgr.c, jddctmgr.c) and the individual DCT algorithms.
+
+ * The individual DCT algorithms are kept in separate files to ease 
+
+ * machine-dependent tuning (e.g., assembly coding).
+
+ */
+
+
+
+
+
+/*
+
+ * A forward DCT routine is given a pointer to a work area of type DCTELEM[];
+
+ * the DCT is to be performed in-place in that buffer.  Type DCTELEM is int
+
+ * for 8-bit samples, INT32 for 12-bit samples.  (NOTE: Floating-point DCT
+
+ * implementations use an array of type FAST_FLOAT, instead.)
+
+ * The DCT inputs are expected to be signed (range +-CENTERJSAMPLE).
+
+ * The DCT outputs are returned scaled up by a factor of 8; they therefore
+
+ * have a range of +-8K for 8-bit data, +-128K for 12-bit data.  This
+
+ * convention improves accuracy in integer implementations and saves some
+
+ * work in floating-point ones.
+
+ * Quantization of the output coefficients is done by jcdctmgr.c.
+
+ */
+
+
+
+#if BITS_IN_JSAMPLE == 8
+
+typedef int DCTELEM;           /* 16 or 32 bits is fine */
+
+#else
+
+typedef INT32 DCTELEM;         /* must have 32 bits */
+
+#endif
+
+
+
+typedef JMETHOD(void, forward_DCT_method_ptr, (DCTELEM * data));
+
+typedef JMETHOD(void, float_DCT_method_ptr, (FAST_FLOAT * data));
+
+
+
+
+
+/*
+
+ * An inverse DCT routine is given a pointer to the input JBLOCK and a pointer
+
+ * to an output sample array.  The routine must dequantize the input data as
+
+ * well as perform the IDCT; for dequantization, it uses the multiplier table
+
+ * pointed to by compptr->dct_table.  The output data is to be placed into the
+
+ * sample array starting at a specified column.  (Any row offset needed will
+
+ * be applied to the array pointer before it is passed to the IDCT code.)
+
+ * Note that the number of samples emitted by the IDCT routine is
+
+ * DCT_scaled_size * DCT_scaled_size.
+
+ */
+
+
+
+/* typedef inverse_DCT_method_ptr is declared in jpegint.h */
+
+
+
+/*
+
+ * Each IDCT routine has its own ideas about the best dct_table element type.
+
+ */
+
+
+
+typedef MULTIPLIER ISLOW_MULT_TYPE; /* short or int, whichever is faster */
+
+#if BITS_IN_JSAMPLE == 8
+
+typedef MULTIPLIER IFAST_MULT_TYPE; /* 16 bits is OK, use short if faster */
+
+#define IFAST_SCALE_BITS  2    /* fractional bits in scale factors */
+
+#else
+
+typedef INT32 IFAST_MULT_TYPE; /* need 32 bits for scaled quantizers */
+
+#define IFAST_SCALE_BITS  13   /* fractional bits in scale factors */
+
+#endif
+
+typedef FAST_FLOAT FLOAT_MULT_TYPE; /* preferred floating type */
+
+
+
+
+
+/*
+
+ * Each IDCT routine is responsible for range-limiting its results and
+
+ * converting them to unsigned form (0..MAXJSAMPLE).  The raw outputs could
+
+ * be quite far out of range if the input data is corrupt, so a bulletproof
+
+ * range-limiting step is required.  We use a mask-and-table-lookup method
+
+ * to do the combined operations quickly.  See the comments with
+
+ * prepare_range_limit_table (in jdmaster.c) for more info.
+
+ */
+
+
+
+#define IDCT_range_limit(cinfo)  ((cinfo)->sample_range_limit + CENTERJSAMPLE)
+
+
+
+#define RANGE_MASK  (MAXJSAMPLE * 4 + 3) /* 2 bits wider than legal samples */
+
+
+
+
+
+/* Short forms of external names for systems with brain-damaged linkers. */
+
+
+
+#ifdef NEED_SHORT_EXTERNAL_NAMES
+
+#define jpeg_fdct_islow                jFDislow
+
+#define jpeg_fdct_ifast                jFDifast
+
+#define jpeg_fdct_float                jFDfloat
+
+#define jpeg_idct_islow                jRDislow
+
+#define jpeg_idct_ifast                jRDifast
+
+#define jpeg_idct_float                jRDfloat
+
+#define jpeg_idct_4x4          jRD4x4
+
+#define jpeg_idct_2x2          jRD2x2
+
+#define jpeg_idct_1x1          jRD1x1
+
+#endif /* NEED_SHORT_EXTERNAL_NAMES */
+
+
+
+/* Extern declarations for the forward and inverse DCT routines. */
+
+
+
+EXTERN void jpeg_fdct_islow JPP((DCTELEM * data));
+
+EXTERN void jpeg_fdct_ifast JPP((DCTELEM * data));
+
+EXTERN void jpeg_fdct_float JPP((FAST_FLOAT * data));
+
+
+
+EXTERN void jpeg_idct_islow
+
+    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
+
+        JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
+
+EXTERN void jpeg_idct_ifast
+
+    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
+
+        JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
+
+EXTERN void jpeg_idct_float
+
+    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
+
+        JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
+
+EXTERN void jpeg_idct_4x4
+
+    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
+
+        JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
+
+EXTERN void jpeg_idct_2x2
+
+    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
+
+        JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
+
+EXTERN void jpeg_idct_1x1
+
+    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
+
+        JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
+
+
+
+
+
+/*
+
+ * Macros for handling fixed-point arithmetic; these are used by many
+
+ * but not all of the DCT/IDCT modules.
+
+ *
+
+ * All values are expected to be of type INT32.
+
+ * Fractional constants are scaled left by CONST_BITS bits.
+
+ * CONST_BITS is defined within each module using these macros,
+
+ * and may differ from one module to the next.
+
+ */
+
+
+
+#define ONE    ((INT32) 1)
+
+#define CONST_SCALE (ONE << CONST_BITS)
+
+
+
+/* Convert a positive real constant to an integer scaled by CONST_SCALE.
+
+ * Caution: some C compilers fail to reduce "FIX(constant)" at compile time,
+
+ * thus causing a lot of useless floating-point operations at run time.
+
+ */
+
+
+
+#define FIX(x) ((INT32) ((x) * CONST_SCALE + 0.5))
+
+
+
+/* Descale and correctly round an INT32 value that's scaled by N bits.
+
+ * We assume RIGHT_SHIFT rounds towards minus infinity, so adding
+
+ * the fudge factor is correct for either sign of X.
+
+ */
+
+
+
+#define DESCALE(x,n)  RIGHT_SHIFT((x) + (ONE << ((n)-1)), n)
+
+
+
+/* Multiply an INT32 variable by an INT32 constant to yield an INT32 result.
+
+ * This macro is used only when the two inputs will actually be no more than
+
+ * 16 bits wide, so that a 16x16->32 bit multiply can be used instead of a
+
+ * full 32x32 multiply.  This provides a useful speedup on many machines.
+
+ * Unfortunately there is no way to specify a 16x16->32 multiply portably
+
+ * in C, but some C compilers will do the right thing if you provide the
+
+ * correct combination of casts.
+
+ */
+
+
+
+#ifdef SHORTxSHORT_32          /* may work if 'int' is 32 bits */
+
+#define MULTIPLY16C16(var,const)  (((INT16) (var)) * ((INT16) (const)))
+
+#endif
+
+#ifdef SHORTxLCONST_32         /* known to work with Microsoft C 6.0 */
+
+#define MULTIPLY16C16(var,const)  (((INT16) (var)) * ((INT32) (const)))
+
+#endif
+
+
+
+#ifndef MULTIPLY16C16          /* default definition */
+
+#define MULTIPLY16C16(var,const)  ((var) * (const))
+
+#endif
+
+
+
+/* Same except both inputs are variables. */
+
+
+
+#ifdef SHORTxSHORT_32          /* may work if 'int' is 32 bits */
+
+#define MULTIPLY16V16(var1,var2)  (((INT16) (var1)) * ((INT16) (var2)))
+
+#endif
+
+
+
+#ifndef MULTIPLY16V16          /* default definition */
+
+#define MULTIPLY16V16(var1,var2)  ((var1) * (var2))
+
+#endif
+