📄 itype.h
字号:
/*____________________________________________________________________________
MP3 Decoding Libraries
Lanuguages used: C, C++, ASM
As much as I would love to, I cannot take
full credit for writing this code.
Xing Technology made MPEG-Layer 3 for us
to decode. =)
- ULTiMaTuM -
MPEG-Layer 3 (MP3)
Copyright (C) 1995-1997 Xing Technology
NOTE: I only edited the bare-minimum. 90%
of this is original decoding code...
Hmm... that sounds strange =)
____________________________________________________________________________*/
/*---------------------------------------------------------------
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 ---*/
typedef long INT32;
typedef unsigned long UINT32;
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))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -