Newer
Older
monitord / lame-3.97 / mpglib / .svn / text-base / common.c.svn-base
  1. /* $Id: common.c,v 1.31 2004/04/14 22:15:43 robert Exp $ */
  2.  
  3. #ifdef HAVE_CONFIG_H
  4. #include <config.h>
  5. #endif
  6.  
  7. #include <ctype.h>
  8. #include <stdlib.h>
  9. #include <signal.h>
  10.  
  11. #ifdef HAVE_FCNTL_H
  12. #include <fcntl.h>
  13. #endif
  14.  
  15. #ifdef macintosh
  16. #include <types.h>
  17. #include <stat.h>
  18. #else
  19. #include <sys/types.h>
  20. #include <sys/stat.h>
  21. #endif
  22.  
  23. #include "common.h"
  24.  
  25. #ifdef WITH_DMALLOC
  26. #include <dmalloc.h>
  27. #endif
  28.  
  29. /* In C++ the array first must be prototyped, why ? */
  30.  
  31. extern const int tabsel_123 [2] [3] [16];
  32.  
  33. const int tabsel_123 [2] [3] [16] = {
  34. { {0,32,64,96,128,160,192,224,256,288,320,352,384,416,448,},
  35. {0,32,48,56, 64, 80, 96,112,128,160,192,224,256,320,384,},
  36. {0,32,40,48, 56, 64, 80, 96,112,128,160,192,224,256,320,} },
  37.  
  38. { {0,32,48,56,64,80,96,112,128,144,160,176,192,224,256,},
  39. {0,8,16,24,32,40,48,56,64,80,96,112,128,144,160,},
  40. {0,8,16,24,32,40,48,56,64,80,96,112,128,144,160,} }
  41. };
  42.  
  43. const long freqs[9] = { 44100, 48000, 32000,
  44. 22050, 24000, 16000,
  45. 11025, 12000, 8000 };
  46.  
  47.  
  48.  
  49. #if defined( USE_LAYER_1 ) || defined ( USE_LAYER_2 )
  50. real muls[27][64];
  51. #endif
  52.  
  53. #if 0
  54. static void get_II_stuff(struct frame *fr)
  55. {
  56. static const int translate [3] [2] [16] = /* char ? */
  57. { { { 0,2,2,2,2,2,2,0,0,0,1,1,1,1,1,0 } ,
  58. { 0,2,2,0,0,0,1,1,1,1,1,1,1,1,1,0 } } ,
  59. { { 0,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0 } ,
  60. { 0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0 } } ,
  61. { { 0,3,3,3,3,3,3,0,0,0,1,1,1,1,1,0 } ,
  62. { 0,3,3,0,0,0,1,1,1,1,1,1,1,1,1,0 } } };
  63.  
  64. int table,sblim;
  65. static const struct al_table2 *tables[5] =
  66. { alloc_0, alloc_1, alloc_2, alloc_3 , alloc_4 };
  67. static int sblims[5] = { 27 , 30 , 8, 12 , 30 };
  68.  
  69. if(fr->lsf)
  70. table = 4;
  71. else
  72. table = translate[fr->sampling_frequency][2-fr->stereo][fr->bitrate_index];
  73. sblim = sblims[table];
  74.  
  75. fr->alloc = tables[table];
  76. fr->II_sblimit = sblim;
  77. }
  78. #endif
  79.  
  80. #define HDRCMPMASK 0xfffffd00
  81.  
  82.  
  83. int head_check(unsigned long head,int check_layer)
  84. {
  85. /*
  86. look for a valid header.
  87. if check_layer > 0, then require that
  88. nLayer = check_layer.
  89. */
  90.  
  91. /* bits 13-14 = layer 3 */
  92. int nLayer=4-((head>>17)&3);
  93.  
  94. if( (head & 0xffe00000) != 0xffe00000) {
  95. /* syncword */
  96. return FALSE;
  97. }
  98.  
  99. #ifndef USE_LAYER_1
  100. if (nLayer == 1)
  101. return FALSE;
  102. #endif
  103. #ifndef USE_LAYER_2
  104. if (nLayer == 2)
  105. return FALSE;
  106. #endif
  107. if (nLayer == 4)
  108. return FALSE;
  109.  
  110. if (check_layer > 0 && nLayer != check_layer)
  111. return FALSE;
  112.  
  113. if( ((head>>12)&0xf) == 0xf) {
  114. /* bits 16,17,18,19 = 1111 invalid bitrate */
  115. return FALSE;
  116. }
  117. if( ((head>>10)&0x3) == 0x3 ) {
  118. /* bits 20,21 = 11 invalid sampling freq */
  119. return FALSE;
  120. }
  121. if ((head&0x3) == 0x2 )
  122. /* invalid emphasis */
  123. return FALSE;
  124. return TRUE;
  125. }
  126.  
  127.  
  128. /*
  129. * the code a header and write the information
  130. * into the frame structure
  131. */
  132. int decode_header(struct frame *fr,unsigned long newhead)
  133. {
  134.  
  135.  
  136. if( newhead & (1<<20) ) {
  137. fr->lsf = (newhead & (1<<19)) ? 0x0 : 0x1;
  138. fr->mpeg25 = 0;
  139. }
  140. else {
  141. fr->lsf = 1;
  142. fr->mpeg25 = 1;
  143. }
  144.  
  145. fr->lay = 4-((newhead>>17)&3);
  146. if( ((newhead>>10)&0x3) == 0x3) {
  147. fprintf(stderr,"Stream error\n");
  148. exit(1);
  149. }
  150. if(fr->mpeg25) {
  151. fr->sampling_frequency = 6 + ((newhead>>10)&0x3);
  152. }
  153. else
  154. fr->sampling_frequency = ((newhead>>10)&0x3) + (fr->lsf*3);
  155.  
  156. fr->error_protection = ((newhead>>16)&0x1)^0x1;
  157.  
  158. if(fr->mpeg25) /* allow Bitrate change for 2.5 ... */
  159. fr->bitrate_index = ((newhead>>12)&0xf);
  160.  
  161. fr->bitrate_index = ((newhead>>12)&0xf);
  162. fr->padding = ((newhead>>9)&0x1);
  163. fr->extension = ((newhead>>8)&0x1);
  164. fr->mode = ((newhead>>6)&0x3);
  165. fr->mode_ext = ((newhead>>4)&0x3);
  166. fr->copyright = ((newhead>>3)&0x1);
  167. fr->original = ((newhead>>2)&0x1);
  168. fr->emphasis = newhead & 0x3;
  169.  
  170. fr->stereo = (fr->mode == MPG_MD_MONO) ? 1 : 2;
  171.  
  172. switch(fr->lay)
  173. {
  174. #ifdef USE_LAYER_1
  175. case 1:
  176. fr->framesize = (long) tabsel_123[fr->lsf][0][fr->bitrate_index] * 12000;
  177. fr->framesize /= freqs[fr->sampling_frequency];
  178. fr->framesize = ((fr->framesize+fr->padding)<<2)-4;
  179. fr->down_sample=0;
  180. fr->down_sample_sblimit = SBLIMIT>>(fr->down_sample);
  181. break;
  182. #endif
  183. #ifdef USE_LAYER_2
  184. case 2:
  185. fr->framesize = (long) tabsel_123[fr->lsf][1][fr->bitrate_index] * 144000;
  186. fr->framesize /= freqs[fr->sampling_frequency];
  187. fr->framesize += fr->padding - 4;
  188. fr->down_sample=0;
  189. fr->down_sample_sblimit = SBLIMIT>>(fr->down_sample);
  190. break;
  191. #endif
  192. case 3:
  193. #if 0
  194. fr->do_layer = do_layer3;
  195. if(fr->lsf)
  196. ssize = (fr->stereo == 1) ? 9 : 17;
  197. else
  198. ssize = (fr->stereo == 1) ? 17 : 32;
  199. #endif
  200.  
  201. #if 0
  202. if(fr->error_protection)
  203. ssize += 2;
  204. #endif
  205. if (fr->bitrate_index==0)
  206. fr->framesize=0;
  207. else{
  208. fr->framesize = (long) tabsel_123[fr->lsf][2][fr->bitrate_index] * 144000;
  209. fr->framesize /= freqs[fr->sampling_frequency]<<(fr->lsf);
  210. fr->framesize = fr->framesize + fr->padding - 4;
  211. }
  212. break;
  213. default:
  214. fprintf(stderr,"Sorry, layer %d not supported\n",fr->lay);
  215. return (0);
  216. }
  217. /* print_header(fr); */
  218.  
  219. return 1;
  220. }
  221.  
  222.  
  223. #if 1
  224. void print_header(struct frame *fr)
  225. {
  226. static const char *modes[4] = { "Stereo", "Joint-Stereo", "Dual-Channel", "Single-Channel" };
  227. static const char *layers[4] = { "Unknown" , "I", "II", "III" };
  228.  
  229. fprintf(stderr,"MPEG %s, Layer: %s, Freq: %ld, mode: %s, modext: %d, BPF : %d\n",
  230. fr->mpeg25 ? "2.5" : (fr->lsf ? "2.0" : "1.0"),
  231. layers[fr->lay],freqs[fr->sampling_frequency],
  232. modes[fr->mode],fr->mode_ext,fr->framesize+4);
  233. fprintf(stderr,"Channels: %d, copyright: %s, original: %s, CRC: %s, emphasis: %d.\n",
  234. fr->stereo,fr->copyright?"Yes":"No",
  235. fr->original?"Yes":"No",fr->error_protection?"Yes":"No",
  236. fr->emphasis);
  237. fprintf(stderr,"Bitrate: %d Kbits/s, Extension value: %d\n",
  238. tabsel_123[fr->lsf][fr->lay-1][fr->bitrate_index],fr->extension);
  239. }
  240.  
  241. void print_header_compact(struct frame *fr)
  242. {
  243. static const char *modes[4] = { "stereo", "joint-stereo", "dual-channel", "mono" };
  244. static const char *layers[4] = { "Unknown" , "I", "II", "III" };
  245. fprintf(stderr,"MPEG %s layer %s, %d kbit/s, %ld Hz %s\n",
  246. fr->mpeg25 ? "2.5" : (fr->lsf ? "2.0" : "1.0"),
  247. layers[fr->lay],
  248. tabsel_123[fr->lsf][fr->lay-1][fr->bitrate_index],
  249. freqs[fr->sampling_frequency], modes[fr->mode]);
  250. }
  251.  
  252. #endif
  253.  
  254. unsigned int getbits(PMPSTR mp, int number_of_bits)
  255. {
  256. unsigned long rval;
  257.  
  258. if (number_of_bits <= 0 || !mp->wordpointer)
  259. return 0;
  260.  
  261. {
  262. rval = mp->wordpointer[0];
  263. rval <<= 8;
  264. rval |= mp->wordpointer[1];
  265. rval <<= 8;
  266. rval |= mp->wordpointer[2];
  267. rval <<= mp->bitindex;
  268. rval &= 0xffffff;
  269.  
  270. mp->bitindex += number_of_bits;
  271.  
  272. rval >>= (24-number_of_bits);
  273.  
  274. mp->wordpointer += (mp->bitindex>>3);
  275. mp->bitindex &= 7;
  276. }
  277. return rval;
  278. }
  279.  
  280. unsigned int getbits_fast(PMPSTR mp, int number_of_bits)
  281. {
  282. unsigned long rval;
  283.  
  284. {
  285. rval = mp->wordpointer[0];
  286. rval <<= 8;
  287. rval |= mp->wordpointer[1];
  288. rval <<= mp->bitindex;
  289. rval &= 0xffff;
  290. mp->bitindex += number_of_bits;
  291.  
  292. rval >>= (16-number_of_bits);
  293.  
  294. mp->wordpointer += (mp->bitindex>>3);
  295. mp->bitindex &= 7;
  296. }
  297. return rval;
  298. }
  299.  
  300.  
  301. int set_pointer( PMPSTR mp, long backstep)
  302. {
  303. unsigned char *bsbufold;
  304.  
  305. if(mp->fsizeold < 0 && backstep > 0) {
  306. fprintf(stderr,"Can't step back %ld!\n",backstep);
  307. return MP3_ERR;
  308. }
  309. bsbufold = mp->bsspace[1-mp->bsnum] + 512;
  310. mp->wordpointer -= backstep;
  311. if (backstep)
  312. memcpy(mp->wordpointer,bsbufold+mp->fsizeold-backstep,(size_t)backstep);
  313. mp->bitindex = 0;
  314. return MP3_OK;
  315. }
  316.