📄 hacking
字号:
************************************************************************
LAME API
For a general outline of the code, see the file API.
Also, main.c is a simple front end to libmp3lame.a
The guts of the code are called from lame_encode_buffer().
lame_encode_buffer() handles buffering, resampling, filtering, and
then calls lame_encode_frame() for each frame:
lame_encode_frame():
l3psycho_anal() compute masking thresholds
mdct_sub() compute MDCT coefficients
iteration_loop() choose scalefactors (via iteration)
which determine noise shapping, and
choose best huffman tables for lossless compression
III_formatBitstream format the bitstream and store in bit_buffer
copy_buffer() make a copy of bit_buffer, to return to calling program
write_buffer() optionally output bit_buffer to a file
empty_buffer() mark bit_buffer as empty
************************************************************************
We are in the process of switching the whole code to FLOAT or FLOAT8,
which ever is faster (defined in machine.h).
Avoid using float or double, and instead use:
FLOAT 4 byte floating point.
FLOAT8 8 byte floating point (only when necessary)
************************************************************************
Initialization: LAME can be used as a library, and there are two
kinds of static data: data that has to be initialized only once
when the library is called, and data that has to be initialized
every time you start encoding a new sample.
These routines should be coded something like:
#include "globalflags"
void subroutine(void)
{
static int firstcall=1;
if (firstcall) {
firstcall=0;
/* code that needs to be done only once when routine is loaded */
}
if (gf.frameNum==0) {
/* code that needs to be done before encoding each file/stream */
}
}
The frameNum==0 code only works for routines which are only called
once per frame. More general code would be:
#include "globalflags"
void subroutine(void)
{
static int init=0;
if (gf.frameNum==0 && !init) {
/* code that needs to be done before encoding each file/stream */
init=1;
}
if (gf.frameNum>0) init=0;
}
************************************************************************
Global flags
For better or worse, there are many global flags in lame,
in the 'gf' structure.
The rules for adding a global flag are:
1. declair in struct gf in lame.h
2. default values must be set in lame_init()
3. include "globalflags.h" in routines that need access to these flags.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -