istereo

diff libs/libjpeg/jdct.h @ 26:862a3329a8f0

wohooo, added a shitload of code from zlib/libpng/libjpeg. When the good lord was raining shared libraries the iphone held a fucking umbrella...
author John Tsiombikas <nuclear@mutantstargoat.com>
date Thu, 08 Sep 2011 06:28:38 +0300
parents
children
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/libs/libjpeg/jdct.h	Thu Sep 08 06:28:38 2011 +0300
     1.3 @@ -0,0 +1,176 @@
     1.4 +/*
     1.5 + * jdct.h
     1.6 + *
     1.7 + * Copyright (C) 1994-1996, Thomas G. Lane.
     1.8 + * This file is part of the Independent JPEG Group's software.
     1.9 + * For conditions of distribution and use, see the accompanying README file.
    1.10 + *
    1.11 + * This include file contains common declarations for the forward and
    1.12 + * inverse DCT modules.  These declarations are private to the DCT managers
    1.13 + * (jcdctmgr.c, jddctmgr.c) and the individual DCT algorithms.
    1.14 + * The individual DCT algorithms are kept in separate files to ease 
    1.15 + * machine-dependent tuning (e.g., assembly coding).
    1.16 + */
    1.17 +
    1.18 +
    1.19 +/*
    1.20 + * A forward DCT routine is given a pointer to a work area of type DCTELEM[];
    1.21 + * the DCT is to be performed in-place in that buffer.  Type DCTELEM is int
    1.22 + * for 8-bit samples, INT32 for 12-bit samples.  (NOTE: Floating-point DCT
    1.23 + * implementations use an array of type FAST_FLOAT, instead.)
    1.24 + * The DCT inputs are expected to be signed (range +-CENTERJSAMPLE).
    1.25 + * The DCT outputs are returned scaled up by a factor of 8; they therefore
    1.26 + * have a range of +-8K for 8-bit data, +-128K for 12-bit data.  This
    1.27 + * convention improves accuracy in integer implementations and saves some
    1.28 + * work in floating-point ones.
    1.29 + * Quantization of the output coefficients is done by jcdctmgr.c.
    1.30 + */
    1.31 +
    1.32 +#if BITS_IN_JSAMPLE == 8
    1.33 +typedef int DCTELEM;		/* 16 or 32 bits is fine */
    1.34 +#else
    1.35 +typedef INT32 DCTELEM;		/* must have 32 bits */
    1.36 +#endif
    1.37 +
    1.38 +typedef JMETHOD(void, forward_DCT_method_ptr, (DCTELEM * data));
    1.39 +typedef JMETHOD(void, float_DCT_method_ptr, (FAST_FLOAT * data));
    1.40 +
    1.41 +
    1.42 +/*
    1.43 + * An inverse DCT routine is given a pointer to the input JBLOCK and a pointer
    1.44 + * to an output sample array.  The routine must dequantize the input data as
    1.45 + * well as perform the IDCT; for dequantization, it uses the multiplier table
    1.46 + * pointed to by compptr->dct_table.  The output data is to be placed into the
    1.47 + * sample array starting at a specified column.  (Any row offset needed will
    1.48 + * be applied to the array pointer before it is passed to the IDCT code.)
    1.49 + * Note that the number of samples emitted by the IDCT routine is
    1.50 + * DCT_scaled_size * DCT_scaled_size.
    1.51 + */
    1.52 +
    1.53 +/* typedef inverse_DCT_method_ptr is declared in jpegint.h */
    1.54 +
    1.55 +/*
    1.56 + * Each IDCT routine has its own ideas about the best dct_table element type.
    1.57 + */
    1.58 +
    1.59 +typedef MULTIPLIER ISLOW_MULT_TYPE; /* short or int, whichever is faster */
    1.60 +#if BITS_IN_JSAMPLE == 8
    1.61 +typedef MULTIPLIER IFAST_MULT_TYPE; /* 16 bits is OK, use short if faster */
    1.62 +#define IFAST_SCALE_BITS  2	/* fractional bits in scale factors */
    1.63 +#else
    1.64 +typedef INT32 IFAST_MULT_TYPE;	/* need 32 bits for scaled quantizers */
    1.65 +#define IFAST_SCALE_BITS  13	/* fractional bits in scale factors */
    1.66 +#endif
    1.67 +typedef FAST_FLOAT FLOAT_MULT_TYPE; /* preferred floating type */
    1.68 +
    1.69 +
    1.70 +/*
    1.71 + * Each IDCT routine is responsible for range-limiting its results and
    1.72 + * converting them to unsigned form (0..MAXJSAMPLE).  The raw outputs could
    1.73 + * be quite far out of range if the input data is corrupt, so a bulletproof
    1.74 + * range-limiting step is required.  We use a mask-and-table-lookup method
    1.75 + * to do the combined operations quickly.  See the comments with
    1.76 + * prepare_range_limit_table (in jdmaster.c) for more info.
    1.77 + */
    1.78 +
    1.79 +#define IDCT_range_limit(cinfo)  ((cinfo)->sample_range_limit + CENTERJSAMPLE)
    1.80 +
    1.81 +#define RANGE_MASK  (MAXJSAMPLE * 4 + 3) /* 2 bits wider than legal samples */
    1.82 +
    1.83 +
    1.84 +/* Short forms of external names for systems with brain-damaged linkers. */
    1.85 +
    1.86 +#ifdef NEED_SHORT_EXTERNAL_NAMES
    1.87 +#define jpeg_fdct_islow		jFDislow
    1.88 +#define jpeg_fdct_ifast		jFDifast
    1.89 +#define jpeg_fdct_float		jFDfloat
    1.90 +#define jpeg_idct_islow		jRDislow
    1.91 +#define jpeg_idct_ifast		jRDifast
    1.92 +#define jpeg_idct_float		jRDfloat
    1.93 +#define jpeg_idct_4x4		jRD4x4
    1.94 +#define jpeg_idct_2x2		jRD2x2
    1.95 +#define jpeg_idct_1x1		jRD1x1
    1.96 +#endif /* NEED_SHORT_EXTERNAL_NAMES */
    1.97 +
    1.98 +/* Extern declarations for the forward and inverse DCT routines. */
    1.99 +
   1.100 +EXTERN(void) jpeg_fdct_islow JPP((DCTELEM * data));
   1.101 +EXTERN(void) jpeg_fdct_ifast JPP((DCTELEM * data));
   1.102 +EXTERN(void) jpeg_fdct_float JPP((FAST_FLOAT * data));
   1.103 +
   1.104 +EXTERN(void) jpeg_idct_islow
   1.105 +    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
   1.106 +	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
   1.107 +EXTERN(void) jpeg_idct_ifast
   1.108 +    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
   1.109 +	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
   1.110 +EXTERN(void) jpeg_idct_float
   1.111 +    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
   1.112 +	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
   1.113 +EXTERN(void) jpeg_idct_4x4
   1.114 +    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
   1.115 +	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
   1.116 +EXTERN(void) jpeg_idct_2x2
   1.117 +    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
   1.118 +	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
   1.119 +EXTERN(void) jpeg_idct_1x1
   1.120 +    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
   1.121 +	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
   1.122 +
   1.123 +
   1.124 +/*
   1.125 + * Macros for handling fixed-point arithmetic; these are used by many
   1.126 + * but not all of the DCT/IDCT modules.
   1.127 + *
   1.128 + * All values are expected to be of type INT32.
   1.129 + * Fractional constants are scaled left by CONST_BITS bits.
   1.130 + * CONST_BITS is defined within each module using these macros,
   1.131 + * and may differ from one module to the next.
   1.132 + */
   1.133 +
   1.134 +#define ONE	((INT32) 1)
   1.135 +#define CONST_SCALE (ONE << CONST_BITS)
   1.136 +
   1.137 +/* Convert a positive real constant to an integer scaled by CONST_SCALE.
   1.138 + * Caution: some C compilers fail to reduce "FIX(constant)" at compile time,
   1.139 + * thus causing a lot of useless floating-point operations at run time.
   1.140 + */
   1.141 +
   1.142 +#define FIX(x)	((INT32) ((x) * CONST_SCALE + 0.5))
   1.143 +
   1.144 +/* Descale and correctly round an INT32 value that's scaled by N bits.
   1.145 + * We assume RIGHT_SHIFT rounds towards minus infinity, so adding
   1.146 + * the fudge factor is correct for either sign of X.
   1.147 + */
   1.148 +
   1.149 +#define DESCALE(x,n)  RIGHT_SHIFT((x) + (ONE << ((n)-1)), n)
   1.150 +
   1.151 +/* Multiply an INT32 variable by an INT32 constant to yield an INT32 result.
   1.152 + * This macro is used only when the two inputs will actually be no more than
   1.153 + * 16 bits wide, so that a 16x16->32 bit multiply can be used instead of a
   1.154 + * full 32x32 multiply.  This provides a useful speedup on many machines.
   1.155 + * Unfortunately there is no way to specify a 16x16->32 multiply portably
   1.156 + * in C, but some C compilers will do the right thing if you provide the
   1.157 + * correct combination of casts.
   1.158 + */
   1.159 +
   1.160 +#ifdef SHORTxSHORT_32		/* may work if 'int' is 32 bits */
   1.161 +#define MULTIPLY16C16(var,const)  (((INT16) (var)) * ((INT16) (const)))
   1.162 +#endif
   1.163 +#ifdef SHORTxLCONST_32		/* known to work with Microsoft C 6.0 */
   1.164 +#define MULTIPLY16C16(var,const)  (((INT16) (var)) * ((INT32) (const)))
   1.165 +#endif
   1.166 +
   1.167 +#ifndef MULTIPLY16C16		/* default definition */
   1.168 +#define MULTIPLY16C16(var,const)  ((var) * (const))
   1.169 +#endif
   1.170 +
   1.171 +/* Same except both inputs are variables. */
   1.172 +
   1.173 +#ifdef SHORTxSHORT_32		/* may work if 'int' is 32 bits */
   1.174 +#define MULTIPLY16V16(var1,var2)  (((INT16) (var1)) * ((INT16) (var2)))
   1.175 +#endif
   1.176 +
   1.177 +#ifndef MULTIPLY16V16		/* default definition */
   1.178 +#define MULTIPLY16V16(var1,var2)  ((var1) * (var2))
   1.179 +#endif