HACKING
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:3k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. ************************************************************************
  2. LAME API
  3. For a general outline of the code, see the file API.  
  4. Also, main.c is a simple front end to libmp3lame.a
  5. The guts of the code are called from lame_encode_buffer().
  6. lame_encode_buffer() handles buffering, resampling, filtering, and
  7. then calls lame_encode_frame() for each frame:
  8. lame_encode_frame():
  9.    l3psycho_anal()        compute masking thresholds
  10.    mdct_sub()             compute MDCT coefficients
  11.    iteration_loop()       choose scalefactors (via iteration)
  12.                           which determine noise shapping, and 
  13.                           choose best huffman tables for lossless compression
  14.    III_formatBitstream    format the bitstream and store in bit_buffer
  15.    copy_buffer()          make a copy of bit_buffer, to return to calling program
  16.    write_buffer()         optionally output bit_buffer to a file
  17.    empty_buffer()   mark bit_buffer as empty
  18. ************************************************************************
  19. We are in the process of switching the whole code to FLOAT or FLOAT8,
  20. which ever is faster (defined in machine.h).  
  21. Avoid using float or double, and instead use:
  22. FLOAT    4 byte floating point.  
  23. FLOAT8   8 byte floating point (only when necessary)
  24. ************************************************************************
  25. Initialization:   LAME can be used as a library, and there are two
  26. kinds of static data:  data that has to be initialized only once
  27. when the library is called, and data that has to be initialized
  28. every time you start encoding a new sample.
  29. These routines should be coded something like:
  30. #include "globalflags"
  31. void subroutine(void)
  32. {
  33.   static int firstcall=1;
  34.   if (firstcall) {
  35.     firstcall=0;
  36.     /* code that needs to be done only once when routine is loaded */
  37.   }
  38.   if (gf.frameNum==0) {
  39.     /* code that needs to be done before encoding each file/stream */
  40.   }
  41. }
  42. The frameNum==0 code only works for routines which are only called
  43. once per frame.  More general code would be:
  44. #include "globalflags"
  45. void subroutine(void)
  46. {
  47.   static int init=0;
  48.   if (gf.frameNum==0 && !init) {
  49.     /* code that needs to be done before encoding each file/stream */
  50.     init=1;
  51.   }
  52.   if (gf.frameNum>0) init=0;
  53. }
  54. ************************************************************************
  55. Global flags
  56. For better or worse, there are many global flags in lame, 
  57. in the 'gf' structure.  
  58. The rules for adding a global flag are:
  59. 1. declair in struct gf in lame.h
  60. 2. default values must be set in lame_init()
  61. 3. include "globalflags.h" in routines that need access to these flags.