/*____________________________________________________________________________
	
	FreeAmp - The Free MP3 Player

        MP3 Decoder originally Copyright (C) 1995-1997 Xing Technology
        Corp.  http://www.xingtech.com

	Portions Copyright (C) 1998 EMusic.com

	This program is free software; you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published by
	the Free Software Foundation; either version 2 of the License, or
	(at your option) any later version.

	This program is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.

	You should have received a copy of the GNU General Public License
	along with this program; if not, write to the Free Software
	Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
	
	$Id: itype.h,v 1.3 2000/10/13 14:29:02 ijr Exp $
____________________________________________________________________________*/

/*---------------------------------------------------------------

mpeg Layer II audio decoder, integer version
variable type control

-----------------------------------------------------------------*/
/*-----------------------------------------------------------------
Variable types can have a large impact on performance.  If the
native type int is 32 bit or better, setting all variables to the
native int is probably the best bet.  Machines with fast floating
point handware will probably run faster with the floating point
version of this decoder.

On 16 bit machines, use the native 16 bit int where possible
with special consideration given to the multiplies used in
the dct and window (see below).


The code uses the type INT32 when 32 or more bits are required.
Use the native int if possible.
Signed types are required for all but DCTCOEF which may be unsigned.

THe major parts of the decoder are: bit stream unpack (iup.c),
dct (cidct.c), and window (iwinq.c).  The compute time relationship
is usually  unpack < dct < window.

-------------------------------------------------------------------*/

/*-------------- dct cidct.c -------------------------------------------
dct input is type SAMPLEINT, output is WININT

DCTCOEF:  dct coefs, 16 or more bits required
DCTBITS:  fractional bits in dct coefs. Coefs are unsigned in
          the range 0.50 to 10.2.  DCTBITS=10 is a compromise
          between precision and the possibility of overflowing
          intermediate results.


DCTSATURATE:  If set, saturates dct output to 16 bit.
              Dct output may overflow if WININT is 16 bit, overflow
              is rare, but very noisy.  Define to 1 for 16 bit WININT.
              Define to 0 otherwise.

The multiply used in the dct (routine forward_bf in cidct.c) requires
the multiplication of a 32 bit variable by a 16 bit unsigned coef
to produce a signed 32 bit result. On 16 bit machines this could be
faster than a full 32x32 multiply.

------------------------------------------------------------------*/
/*-------------- WINDOW iwinq.c ---------------------------------------
window input is type WININT, output is short (16 bit pcm audio)

window coefs WINBITS fractional bits,
        coefs are signed range in -1.15 to 0.96.
        WINBITS=14 is maximum for 16 bit signed representation.
        Some CPU's will multiply faster with fewer bits.
        WINBITS less that 8 may cause noticeable quality loss.

WINMULT defines the multiply used in the window (iwinq.c)
WINMULT must produce a 32 bit (or better) result, although both
multipliers may be 16 bit.  A 16x16-->32 multiply may offer
a performance advantage if the compiler can be coerced into
doing the right thing.
------------------------------------------------------------------*/
/*-- settings for MS C++ 4.0 flat 32 bit (long=int=32bit) --*/
/*-- asm replacement modules must use these settings ---*/
#ifndef ITYPES_H
#define ITYPES_H

#ifdef WIN32
#include <basetsd.h>
#endif

#ifndef WIN32
typedef long INT32;
typedef unsigned long UINT32;
#endif

typedef int SAMPLEINT;

typedef int DCTCOEF;

#define DCTBITS 10
#define DCTSATURATE 0

typedef int WININT;
typedef int WINCOEF;

#define WINBITS 10
#define WINMULT(x,coef)  ((x)*(coef))
#endif