huffman.c
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:31k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /*
  2.  * FAAC - Freeware Advanced Audio Coder
  3.  * Copyright (C) 2001 Menno Bakker
  4.  *
  5.  * This library is free software; you can redistribute it and/or
  6.  * modify it under the terms of the GNU Lesser General Public
  7.  * License as published by the Free Software Foundation; either
  8.  * version 2.1 of the License, or (at your option) any later version.
  9.  *
  10.  * This library is distributed in the hope that it will be useful,
  11.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13.  * Lesser General Public License for more details.
  14.  * You should have received a copy of the GNU Lesser General Public
  15.  * License along with this library; if not, write to the Free Software
  16.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  17.  *
  18.  * $Id: huffman.c,v 1.5 2001/06/04 23:02:24 wmay Exp $
  19.  */
  20. #include <math.h>
  21. #include <stdlib.h>
  22. #include "huffman.h"
  23. #include "coder.h"
  24. #include "bitstream.h"
  25. #include "util.h"
  26. #include "hufftab.h"
  27. void HuffmanInit(CoderInfo *coderInfo, unsigned int numChannels)
  28. {
  29. unsigned int channel;
  30. for (channel = 0; channel < numChannels; channel++) {
  31. coderInfo[channel].data = (int*)AllocMemory(5*FRAME_LEN*sizeof(int));
  32. coderInfo[channel].len = (int*)AllocMemory(5*FRAME_LEN*sizeof(int));
  33. }
  34. }
  35. void HuffmanEnd(CoderInfo *coderInfo, unsigned int numChannels)
  36. {
  37. unsigned int channel;
  38. for (channel = 0; channel < numChannels; channel++) {
  39. if (coderInfo[channel].data) FreeMemory(coderInfo[channel].data);
  40. if (coderInfo[channel].len) FreeMemory(coderInfo[channel].len);
  41. }
  42. }
  43. int BitSearch(CoderInfo *coderInfo,
  44.   int *quant)  /* Quantized spectral values */
  45.   /*
  46.   This function inputs a vector of quantized spectral data, quant[][], and returns a vector,
  47.   'book_vector[]' that describes how to group together the scalefactor bands into a smaller
  48.   number of sections.  There are MAX_SCFAC_BANDS elements in book_vector (equal to 49 in the
  49.   case of long blocks and 112 for short blocks), and each element has a huffman codebook 
  50.   number assigned to it.
  51.   For a quick and simple algorithm, this function performs a binary
  52.   search across the sfb's (scale factor bands).  On the first approach, it calculates the 
  53.   needed amount of bits if every sfb were its own section and transmitted its own huffman 
  54.   codebook value side information (equal to 9 bits for a long block, 7 for a short).  The 
  55.   next iteration combines adjacent sfb's, and calculates the bit rate for length two sfb 
  56.   sections.  If any wider two-sfb section requires fewer bits than the sum of the two 
  57.   single-sfb sections (below it in the binary tree), then the wider section will be chosen.
  58.   This process occurs until the sections are split into three uniform parts, each with an
  59.   equal amount of sfb's contained.  
  60.   The binary tree is stored as a two-dimensional array.  Since this tree is not full, (there
  61.   are only 49 nodes, not 2^6 = 64), the numbering is a little complicated.  If the tree were
  62.   full, the top node would be 1.  It's children would be 2 and 3.  But, since this tree
  63.   is not full, the top row of three nodes are numbered {4,5,6}.  The row below it is
  64.   {8,9,10,11,12,13}, and so on.  
  65.   The binary tree is called bit_stats[112][3].  There are 112 total nodes (some are not
  66.   used since it's not full).  bit_stats[x][0] holds the bit totals needed for the sfb sectioning
  67.   strategy represented by the node x in the tree.  bit_stats[x][1] holds the optimal huffman
  68.   codebook table that minimizes the bit rate, given the sectioning boundaries dictated by node x.
  69. */
  70. {
  71. int i,j,k,n;
  72. int hop;
  73. int min_book_choice[112][3];
  74. int bit_stats[240][3];
  75. int total_bit_count;
  76. int levels;
  77. double fraction;
  78. /* Set local pointer to coderInfo book_vector */
  79. int* book_vector = coderInfo -> book_vector;
  80. levels = (int) ((log((double)coderInfo->nr_of_sfb)/log((double)2.0))+1);
  81. fraction = (pow(2,levels)+coderInfo->nr_of_sfb)/(double)(pow(2,levels));
  82. /* #define SLOW */
  83. #ifdef SLOW
  84. for(i = 0; i < 5; i++) {
  85. #else
  86. i = 0;
  87. #endif
  88. hop = 1 << i;
  89. NoiselessBitCount(coderInfo, quant, hop, min_book_choice);
  90. /* load up the (not-full) binary search tree with the min_book_choice values */
  91. k=0;
  92. total_bit_count = 0;
  93. for (j=(int)(pow(2,levels-i)); j<(int)(fraction*pow(2,levels-i)); j++)
  94. {
  95. bit_stats[j][0] = min_book_choice[k][0]; /* the minimum bit cost for this section */
  96. bit_stats[j][1] = min_book_choice[k][1]; /* used with this huffman book number */
  97. if (i>0){  /* not on the lowest level, grouping more than one signle scalefactor band per section*/
  98. if  (bit_stats[j][0] < bit_stats[2*j][0] + bit_stats[2*j+1][0]){
  99. /* it is cheaper to combine surrounding sfb secionts into one larger huffman book section */
  100. for(n=k;n<k+hop;n++) { /* write the optimal huffman book value for the new larger section */
  101. if ( (book_vector[n]!=INTENSITY_HCB)&&(book_vector[n]!=INTENSITY_HCB2) ) { /* Don't merge with IS bands */
  102. book_vector[n] = bit_stats[j][1];
  103. }
  104. }
  105. } else {  /* it was cheaper to transmit the smaller huffman table sections */
  106. bit_stats[j][0] = bit_stats[2*j][0] + bit_stats[2*j+1][0];
  107. }
  108. } else {  /* during the first stage of the iteration, all sfb's are individual sections */
  109. if ( (book_vector[k]!=INTENSITY_HCB)&&(book_vector[k]!=INTENSITY_HCB2) ) {
  110. book_vector[k] = bit_stats[j][1];  /* initially, set all sfb's to their own optimal section table values */
  111. }
  112. }
  113. total_bit_count = total_bit_count +  bit_stats[j][0];
  114. k=k+hop;
  115. }
  116. #ifdef SLOW
  117. }
  118. #endif
  119. /*   book_vector[k] = book_vector[k-1]; */
  120. return(total_bit_count);
  121. }
  122. int NoiselessBitCount(CoderInfo *coderInfo,
  123.   int *quant,
  124.   int hop,
  125.   int min_book_choice[112][3])
  126. {
  127.   int i,j,k;
  128.   /*
  129.      This function inputs:
  130.      - the quantized spectral data, 'quant[]';
  131.      - all of the huffman codebooks, 'huff[][]';
  132.      - the size of the sections, in scalefactor bands (SFB's), 'hop';
  133.      - an empty matrix, min_book_choice[][] passed to it;
  134.      This function outputs:
  135.      - the matrix, min_book_choice.  It is a two dimensional matrix, with its
  136.      rows corresponding to spectral sections.  The 0th column corresponds to
  137.      the bits needed to code a section with 'hop' scalefactors bands wide, all using
  138.      the same huffman codebook.  The 1st column contains the huffman codebook number
  139.      that allows the minimum number of bits to be used.
  140.      Other notes:
  141.      - Initally, the dynamic range is calculated for each spectral section.  The section
  142.      can only be entropy coded with books that have an equal or greater dynamic range
  143.      than the section's spectral data.  The exception to this is for the 11th ESC codebook.
  144.      If the dynamic range is larger than 16, then an escape code is appended after the
  145.      table 11 codeword which encodes the larger value explicity in a pseudo-non-uniform
  146.      quantization method.
  147.      */
  148. int max_sb_coeff;
  149. int book_choice[12][2];
  150. int total_bits_cost = 0;
  151. int offset, length, end;
  152. int q;
  153. /* set local pointer to sfb_offset */
  154. int *sfb_offset = coderInfo->sfb_offset;
  155. int nr_of_sfb = coderInfo->nr_of_sfb;
  156. /* each section is 'hop' scalefactor bands wide */
  157. for (i=0; i < nr_of_sfb; i=i+hop){ 
  158. if ((i+hop) > nr_of_sfb)
  159. q = nr_of_sfb;
  160. else
  161. q = i+hop;
  162. {
  163. /* find the maximum absolute value in the current spectral section, to see what tables are available to use */
  164. max_sb_coeff = 0;
  165. for (j=sfb_offset[i]; j<sfb_offset[q]; j++){  /* snl */
  166. if (ABS(quant[j]) > max_sb_coeff)
  167. max_sb_coeff = ABS(quant[j]);
  168. }
  169. j = 0;
  170. offset = sfb_offset[i];
  171. if ((i+hop) > nr_of_sfb){
  172. end = sfb_offset[nr_of_sfb];
  173. } else
  174. end = sfb_offset[q];
  175. length = end - offset;
  176. /* all spectral coefficients in this section are zero */
  177. if (max_sb_coeff == 0) { 
  178. book_choice[j][0] = CalcBits(coderInfo,0,quant,offset,length);
  179. book_choice[j++][1] = 0;
  180. }
  181. else {  /* if the section does have non-zero coefficients */
  182. if(max_sb_coeff < 2){
  183. book_choice[j][0] = CalcBits(coderInfo,1,quant,offset,length);
  184. book_choice[j++][1] = 1;
  185. book_choice[j][0] = CalcBits(coderInfo,2,quant,offset,length);
  186. book_choice[j++][1] = 2;
  187. book_choice[j][0] = CalcBits(coderInfo,3,quant,offset,length);
  188. book_choice[j++][1] = 3;
  189. }
  190. else if (max_sb_coeff < 3){
  191. book_choice[j][0] = CalcBits(coderInfo,3,quant,offset,length);
  192. book_choice[j++][1] = 3;
  193. book_choice[j][0] = CalcBits(coderInfo,4,quant,offset,length);
  194. book_choice[j++][1] = 4;
  195. book_choice[j][0] = CalcBits(coderInfo,5,quant,offset,length);
  196. book_choice[j++][1] = 5;
  197. }
  198. else if (max_sb_coeff < 5){
  199. book_choice[j][0] = CalcBits(coderInfo,5,quant,offset,length);
  200. book_choice[j++][1] = 5;
  201. book_choice[j][0] = CalcBits(coderInfo,6,quant,offset,length);
  202. book_choice[j++][1] = 6;
  203. book_choice[j][0] = CalcBits(coderInfo,7,quant,offset,length);
  204. book_choice[j++][1] = 7;
  205. }
  206. else if (max_sb_coeff < 8){
  207. book_choice[j][0] = CalcBits(coderInfo,7,quant,offset,length);
  208. book_choice[j++][1] = 7;
  209. book_choice[j][0] = CalcBits(coderInfo,8,quant,offset,length);
  210. book_choice[j++][1] = 8;
  211. book_choice[j][0] = CalcBits(coderInfo,9,quant,offset,length);
  212. book_choice[j++][1] = 9;
  213. }
  214. else if (max_sb_coeff < 13){
  215. book_choice[j][0] = CalcBits(coderInfo,9,quant,offset,length);
  216. book_choice[j++][1] = 9;
  217. book_choice[j][0] = CalcBits(coderInfo,10,quant,offset,length);
  218. book_choice[j++][1] = 10;
  219. }
  220. /* (max_sb_coeff >= 13), choose table 11 */
  221. else {
  222. book_choice[j][0] = CalcBits(coderInfo,11,quant,offset,length);
  223. book_choice[j++][1] = 11;
  224. }
  225. }
  226. /* find the minimum bit cost and table number for huffman coding this scalefactor section */
  227. min_book_choice[i][0] = 100000;
  228. for(k=0;k<j;k++){
  229. if (book_choice[k][0] < min_book_choice[i][0]){
  230. min_book_choice[i][1] = book_choice[k][1];
  231. min_book_choice[i][0] = book_choice[k][0];
  232. }
  233. }
  234. total_bits_cost += min_book_choice[i][0];
  235. }
  236. }
  237. return(total_bits_cost);
  238. }
  239. static int CalculateEscSequence(int input, int *len_esc_sequence)
  240. /* 
  241.    This function takes an element that is larger than 16 and generates the base10 value of the
  242.    equivalent escape sequence.  It returns the escape sequence in the variable, 'output'.  It
  243.    also passed the length of the escape sequence through the parameter, 'len_esc_sequence'.
  244. */
  245. {
  246. float x,y;
  247. int output;
  248. int N;
  249. N = -1;
  250. y = (float)ABS(input);
  251. x = y / 16;
  252. while (x >= 1) {
  253. N++;
  254. x = x/2;
  255. }
  256. *len_esc_sequence = 2*N + 5;  /* the length of the escape sequence in bits */
  257. output = (int)((pow(2,N) - 1)*pow(2,N+5) + y - pow(2,N+4));
  258. return(output);
  259. }
  260. int OutputBits(CoderInfo *coderInfo,
  261.    int book,
  262.    int *quant,
  263.    int offset,
  264.    int length)
  265. {
  266.   /* 
  267.      This function inputs 
  268.      - a specific codebook number, 'book'
  269.      - the quantized spectral data, 'quant[][]'
  270.      - the offset into the spectral data to begin scanning, 'offset'
  271.      - the 'length' of the segment to huffman code
  272.      -> therefore, the segment quant[offset] to quant[offset+length-1]
  273.      is huffman coded.
  274.      This function outputs 
  275.      - the number of bits required, 'bits'  using the prescribed codebook, book applied to 
  276.      the given segment of spectral data.
  277.      There are three parameters that are passed back and forth into this function.  data[]
  278.      and len[] are one-dimensional arrays that store the codebook values and their respective
  279.      bit lengths.  These are used when packing the data for the bitstream in OutputBits().  The
  280.      index into these arrays is 'coderInfo->spectral_count''.  It gets incremented internally in this
  281.      function as counter, then passed to the outside through outside_counter.  The next time
  282.      OutputBits() is called, counter starts at the value it left off from the previous call.
  283.    */
  284.  
  285. int esc_sequence;
  286. int len_esc;
  287. int index;
  288. int bits=0;
  289. int tmp;
  290. int codebook,i,j;
  291. int counter;
  292. /* Set up local pointers to coderInfo elements data and len */
  293. int* data= coderInfo->data;
  294. int* len=  coderInfo->len;
  295. counter = coderInfo->spectral_count;
  296. switch (book) {
  297. case 0:
  298. case INTENSITY_HCB2:
  299. case INTENSITY_HCB:
  300. /* This case also applies to intensity stereo encoding */
  301. coderInfo->data[counter] = 0;
  302. coderInfo->len[counter++] = 0;
  303. coderInfo->spectral_count = counter;  /* send the current count back to the outside world */
  304. return(bits);
  305. case 1:
  306. for(i=offset;i<offset+length;i=i+4){
  307. index = 27*quant[i] + 9*quant[i+1] + 3*quant[i+2] + quant[i+3] + 40;
  308. codebook = huff1[index][LASTINTAB];
  309. tmp = huff1[index][FIRSTINTAB];
  310. bits += tmp;
  311. data[counter] = codebook;
  312. len[counter++] = tmp;
  313. }
  314. coderInfo->spectral_count = counter;  /* send the current count back to the outside world */
  315. return(bits);
  316. case 2:
  317. for(i=offset;i<offset+length;i=i+4){
  318. index = 27*quant[i] + 9*quant[i+1] + 3*quant[i+2] + quant[i+3] + 40;
  319. codebook = huff2[index][LASTINTAB];
  320. tmp = huff2[index][FIRSTINTAB];
  321. bits += tmp;
  322. data[counter] = codebook;
  323. len[counter++] = tmp;
  324. }
  325. coderInfo->spectral_count = counter;  /* send the current count back to the outside world */
  326. return(bits);
  327. case 3:
  328. for(i=offset;i<offset+length;i=i+4){
  329. index = 27*ABS(quant[i]) + 9*ABS(quant[i+1]) + 3*ABS(quant[i+2]) + ABS(quant[i+3]);
  330. codebook = huff3[index][LASTINTAB];
  331. tmp = huff3[index][FIRSTINTAB];
  332. bits = bits + tmp;
  333. data[counter] = codebook;
  334. len[counter++] = tmp;
  335. for(j=0;j<4;j++){
  336. if(quant[i+j] > 0) {  /* send out '0' if a positive value */
  337. data[counter] = 0;
  338. len[counter++] = 1;
  339. bits += 1;
  340. } else
  341. if(quant[i+j] < 0) {  /* send out '1' if a negative value */
  342. data[counter] = 1;
  343. len[counter++] = 1;
  344. bits += 1;
  345. }
  346. }
  347. }
  348. coderInfo->spectral_count = counter;  /* send the current count back to the outside world */
  349. return(bits);
  350. case 4:
  351. for(i=offset;i<offset+length;i=i+4){
  352. index = 27*ABS(quant[i]) + 9*ABS(quant[i+1]) + 3*ABS(quant[i+2]) + ABS(quant[i+3]);
  353. codebook = huff4[index][LASTINTAB];
  354. tmp = huff4[index][FIRSTINTAB];
  355. bits = bits + tmp;
  356. data[counter] = codebook;
  357. len[counter++] = tmp;
  358. for(j=0;j<4;j++){
  359. if(quant[i+j] > 0) {  /* send out '0' if a positive value */
  360. data[counter] = 0;
  361. len[counter++] = 1;
  362. bits += 1;
  363. } else
  364. if(quant[i+j] < 0) {  /* send out '1' if a negative value */
  365. data[counter] = 1;
  366. len[counter++] = 1;
  367. bits += 1;
  368. }
  369. }
  370. }
  371. coderInfo->spectral_count = counter;  /* send the current count back to the outside world */
  372. return(bits);
  373. case 5:
  374. for(i=offset;i<offset+length;i=i+2){
  375. index = 9*(quant[i]) + (quant[i+1]) + 40;
  376. codebook = huff5[index][LASTINTAB];
  377. tmp = huff5[index][FIRSTINTAB];
  378. bits = bits + tmp;
  379. data[counter] = codebook;
  380. len[counter++] = tmp;
  381. }
  382. coderInfo->spectral_count = counter;  /* send the current count back to the outside world */
  383. return(bits);
  384. case 6:
  385. for(i=offset;i<offset+length;i=i+2){
  386. index = 9*(quant[i]) + (quant[i+1]) + 40;
  387. codebook = huff6[index][LASTINTAB];
  388. tmp = huff6[index][FIRSTINTAB];
  389. bits = bits + tmp;
  390. data[counter] = codebook;
  391. len[counter++] = tmp;
  392. }
  393. coderInfo->spectral_count = counter;  /* send the current count back to the outside world */
  394. return(bits);
  395. case 7:
  396. for(i=offset;i<offset+length;i=i+2){
  397. index = 8*ABS(quant[i]) + ABS(quant[i+1]);
  398. codebook = huff7[index][LASTINTAB];
  399. tmp = huff7[index][FIRSTINTAB];
  400. bits = bits + tmp;
  401. data[counter] = codebook;
  402. len[counter++] = tmp;
  403. for(j=0;j<2;j++){
  404. if(quant[i+j] > 0) {  /* send out '0' if a positive value */
  405. data[counter] = 0;
  406. len[counter++] = 1;
  407. bits += 1;
  408. } else
  409. if(quant[i+j] < 0) {  /* send out '1' if a negative value */
  410. data[counter] = 1;
  411. len[counter++] = 1;
  412. bits += 1;
  413. }
  414. }
  415. }
  416. coderInfo->spectral_count = counter;  /* send the current count back to the outside world */
  417. return(bits);
  418. case 8:
  419. for(i=offset;i<offset+length;i=i+2){
  420. index = 8*ABS(quant[i]) + ABS(quant[i+1]);
  421. codebook = huff8[index][LASTINTAB];
  422. tmp = huff8[index][FIRSTINTAB];
  423. bits = bits + tmp;
  424. data[counter] = codebook;
  425. len[counter++] = tmp;
  426. for(j=0;j<2;j++){
  427. if(quant[i+j] > 0) {  /* send out '0' if a positive value */
  428. data[counter] = 0;
  429. len[counter++] = 1;
  430. bits += 1;
  431. } else
  432. if(quant[i+j] < 0) {  /* send out '1' if a negative value */
  433. data[counter] = 1;
  434. len[counter++] = 1;
  435. bits += 1;
  436. }
  437. }
  438. }
  439. coderInfo->spectral_count = counter;  /* send the current count back to the outside world */
  440. return(bits);
  441. case 9:
  442. for(i=offset;i<offset+length;i=i+2){
  443. index = 13*ABS(quant[i]) + ABS(quant[i+1]);
  444. codebook = huff9[index][LASTINTAB];
  445. tmp = huff9[index][FIRSTINTAB];
  446. bits = bits + tmp;
  447. data[counter] = codebook;
  448. len[counter++] = tmp;
  449. for(j=0;j<2;j++){
  450. if(quant[i+j] > 0) {  /* send out '0' if a positive value */
  451. data[counter] = 0;
  452. len[counter++] = 1;
  453. bits += 1;
  454. } else
  455. if(quant[i+j] < 0) {  /* send out '1' if a negative value */
  456. data[counter] = 1;
  457. len[counter++] = 1;
  458. bits += 1;
  459. }
  460. }
  461. }
  462. coderInfo->spectral_count = counter;  /* send the current count back to the outside world */
  463. return(bits);
  464. case 10:
  465. for(i=offset;i<offset+length;i=i+2){
  466. index = 13*ABS(quant[i]) + ABS(quant[i+1]);
  467. codebook = huff10[index][LASTINTAB];
  468. tmp = huff10[index][FIRSTINTAB];
  469. bits = bits + tmp;
  470. data[counter] = codebook;
  471. len[counter++] = tmp;
  472. for(j=0;j<2;j++){
  473. if(quant[i+j] > 0) {  /* send out '0' if a positive value */
  474. data[counter] = 0;
  475. len[counter++] = 1;
  476. bits += 1;
  477. } else
  478. if(quant[i+j] < 0) {  /* send out '1' if a negative value */
  479. data[counter] = 1;
  480. len[counter++] = 1;
  481. bits += 1;
  482. }
  483. }
  484. }
  485. coderInfo->spectral_count = counter;  /* send the current count back to the outside world */
  486. return(bits);
  487. case 11:
  488. /* First, calculate the indecies into the huffman tables */
  489. for(i=offset;i<offset+length;i=i+2){
  490. if ((ABS(quant[i]) >= 16) && (ABS(quant[i+1]) >= 16)) {  /* both codewords were above 16 */
  491. /* first, code the orignal pair, with the larger value saturated to +/- 16 */
  492. index = 17*16 + 16;
  493. }
  494. else if (ABS(quant[i]) >= 16) {  /* the first codeword was above 16, not the second one */
  495. /* first, code the orignal pair, with the larger value saturated to +/- 16 */
  496. index = 17*16 + ABS(quant[i+1]);
  497. }
  498. else if (ABS(quant[i+1]) >= 16) { /* the second codeword was above 16, not the first one */
  499. index = 17*ABS(quant[i]) + 16;
  500. }
  501. else {  /* there were no values above 16, so no escape sequences */
  502. index = 17*ABS(quant[i]) + ABS(quant[i+1]);
  503. }
  504. /* write out the codewords */
  505. tmp = huff11[index][FIRSTINTAB];
  506. codebook = huff11[index][LASTINTAB];
  507. bits += tmp;
  508. data[counter] = codebook;
  509. len[counter++] = tmp;
  510. /* Take care of the sign bits */
  511. for(j=0;j<2;j++){
  512. if(quant[i+j] > 0) {  /* send out '0' if a positive value */
  513. data[counter] = 0;
  514. len[counter++] = 1;
  515. bits += 1;
  516. } else
  517. if(quant[i+j] < 0) {  /* send out '1' if a negative value */
  518. data[counter] = 1;
  519. len[counter++] = 1;
  520. bits += 1;
  521. }
  522. }
  523. /* write out the escape sequences */
  524. if ((ABS(quant[i]) >= 16) && (ABS(quant[i+1]) >= 16)) {  /* both codewords were above 16 */
  525. /* code and transmit the first escape_sequence */
  526. esc_sequence = CalculateEscSequence(quant[i],&len_esc); 
  527. bits += len_esc;
  528. data[counter] = esc_sequence;
  529. len[counter++] = len_esc;
  530. /* then code and transmit the second escape_sequence */
  531. esc_sequence = CalculateEscSequence(quant[i+1],&len_esc);
  532. bits += len_esc;
  533. data[counter] = esc_sequence;
  534. len[counter++] = len_esc;
  535. }
  536. else if (ABS(quant[i]) >= 16) {  /* the first codeword was above 16, not the second one */
  537. /* code and transmit the escape_sequence */
  538. esc_sequence = CalculateEscSequence(quant[i],&len_esc); 
  539. bits += len_esc;
  540. data[counter] = esc_sequence;
  541. len[counter++] = len_esc;
  542. }
  543. else if (ABS(quant[i+1]) >= 16) { /* the second codeword was above 16, not the first one */
  544. /* code and transmit the escape_sequence */
  545. esc_sequence = CalculateEscSequence(quant[i+1],&len_esc); 
  546. bits += len_esc;
  547. data[counter] = esc_sequence;
  548. len[counter++] = len_esc;
  549. }
  550. coderInfo -> spectral_count = counter;  /* send the current count back to the outside world */
  551. return(bits);
  552. }
  553. return 0;
  554. }
  555. int CalcBits(CoderInfo *coderInfo,
  556.  int book,
  557.  int *quant,
  558.  int offset,
  559.  int length)
  560. {
  561.   /* 
  562.      This function inputs 
  563.      - a specific codebook number, 'book'
  564.      - the quantized spectral data, 'quant[]'
  565.      - the offset into the spectral data to begin scanning, 'offset'
  566.      - the 'length' of the segment to huffman code
  567.      -> therefore, the segment quant[offset] to quant[offset+length-1]
  568.      is huffman coded.
  569.      This function outputs 
  570.      - the number of bits required, 'bits'  using the prescribed codebook, book applied to 
  571.      the given segment of spectral data.
  572.    */
  573.  
  574. int len_esc;
  575. int index;
  576. int bits = 0;
  577. int i, j;
  578. switch (book) {
  579. case 1:
  580. for(i=offset;i<offset+length;i=i+4){
  581. index = 27*quant[i] + 9*quant[i+1] + 3*quant[i+2] + quant[i+3] + 40;
  582. bits += huff1[index][FIRSTINTAB];
  583. }
  584. return (bits);
  585. case 2:
  586. for(i=offset;i<offset+length;i=i+4){
  587. index = 27*quant[i] + 9*quant[i+1] + 3*quant[i+2] + quant[i+3] + 40;
  588. bits += huff2[index][FIRSTINTAB];
  589. }
  590. return (bits);
  591. case 3:
  592. for(i=offset;i<offset+length;i=i+4){
  593. index = 27*ABS(quant[i]) + 9*ABS(quant[i+1]) + 3*ABS(quant[i+2]) + ABS(quant[i+3]);
  594. bits += huff3[index][FIRSTINTAB];
  595. for(j=0;j<4;j++){
  596. if(quant[i+j] != 0) bits += 1; /* only for non-zero spectral coefficients */
  597. }
  598. }
  599. return (bits);
  600. case 4:
  601. for(i=offset;i<offset+length;i=i+4){
  602. index = 27*ABS(quant[i]) + 9*ABS(quant[i+1]) + 3*ABS(quant[i+2]) + ABS(quant[i+3]);
  603. bits += huff4[index][FIRSTINTAB];
  604. for(j=0;j<4;j++){
  605. if(quant[i+j] != 0) bits += 1; /* only for non-zero spectral coefficients */
  606. }
  607. }
  608. return (bits);
  609. case 5:
  610. for(i=offset;i<offset+length;i=i+2){
  611. index = 9*(quant[i]) + (quant[i+1]) + 40;
  612. bits += huff5[index][FIRSTINTAB];
  613. }
  614. return (bits);
  615. case 6:
  616. for(i=offset;i<offset+length;i=i+2){
  617. index = 9*(quant[i]) + (quant[i+1]) + 40;
  618. bits += huff6[index][FIRSTINTAB];
  619. }
  620. return (bits);
  621. case 7:
  622. for(i=offset;i<offset+length;i=i+2){
  623. index = 8*ABS(quant[i]) + ABS(quant[i+1]);
  624. bits += huff7[index][FIRSTINTAB];
  625. for(j=0;j<2;j++){
  626. if(quant[i+j] != 0) bits += 1; /* only for non-zero spectral coefficients */
  627. }
  628. }
  629. return (bits);
  630. case 8:
  631. for(i=offset;i<offset+length;i=i+2){
  632. index = 8*ABS(quant[i]) + ABS(quant[i+1]);
  633. bits += huff8[index][FIRSTINTAB];
  634. for(j=0;j<2;j++){
  635. if(quant[i+j] != 0) bits += 1; /* only for non-zero spectral coefficients */
  636. }
  637. }
  638. return (bits);
  639. case 9:
  640. for(i=offset;i<offset+length;i=i+2){
  641. index = 13*ABS(quant[i]) + ABS(quant[i+1]);
  642. bits += huff9[index][FIRSTINTAB];
  643. for(j=0;j<2;j++){
  644. if(quant[i+j] != 0) bits += 1; /* only for non-zero spectral coefficients */
  645. }
  646. }
  647. return (bits);
  648. case 10:
  649. for(i=offset;i<offset+length;i=i+2){
  650. index = 13*ABS(quant[i]) + ABS(quant[i+1]);
  651. bits += huff10[index][FIRSTINTAB];
  652. for(j=0;j<2;j++){
  653. if(quant[i+j] != 0) bits += 1; /* only for non-zero spectral coefficients */
  654. }
  655. }
  656. return (bits);
  657. case 11:
  658. /* First, calculate the indecies into the huffman tables */
  659. for(i=offset;i<offset+length;i=i+2){
  660. if ((ABS(quant[i]) >= 16) && (ABS(quant[i+1]) >= 16)) {  /* both codewords were above 16 */
  661. /* first, code the orignal pair, with the larger value saturated to +/- 16 */
  662. index = 17*16 + 16;
  663. } else if (ABS(quant[i]) >= 16) {  /* the first codeword was above 16, not the second one */
  664. /* first, code the orignal pair, with the larger value saturated to +/- 16 */
  665. index = 17*16 + ABS(quant[i+1]);
  666. } else if (ABS(quant[i+1]) >= 16) { /* the second codeword was above 16, not the first one */
  667. index = 17*ABS(quant[i]) + 16;
  668. } else {  /* there were no values above 16, so no escape sequences */
  669. index = 17*ABS(quant[i]) + ABS(quant[i+1]);
  670. }
  671. /* write out the codewords */
  672. bits += huff11[index][FIRSTINTAB];
  673. /* Take care of the sign bits */
  674. for(j=0;j<2;j++){
  675. if(quant[i+j] != 0) bits += 1; /* only for non-zero spectral coefficients */
  676. }
  677. /* write out the escape sequences */
  678. if ((ABS(quant[i]) >= 16) && (ABS(quant[i+1]) >= 16)) {  /* both codewords were above 16 */
  679. /* code and transmit the first escape_sequence */
  680. CalculateEscSequence(quant[i],&len_esc); 
  681. bits += len_esc;
  682. /* then code and transmit the second escape_sequence */
  683. CalculateEscSequence(quant[i+1],&len_esc);
  684. bits += len_esc;
  685. } else if (ABS(quant[i]) >= 16) {  /* the first codeword was above 16, not the second one */
  686. /* code and transmit the escape_sequence */
  687. CalculateEscSequence(quant[i],&len_esc); 
  688. bits += len_esc;
  689. } else if (ABS(quant[i+1]) >= 16) { /* the second codeword was above 16, not the first one */
  690. /* code and transmit the escape_sequence */
  691. CalculateEscSequence(quant[i+1],&len_esc); 
  692. bits += len_esc;
  693. }
  694. return (bits);
  695. }
  696. return 0;
  697. }
  698. int SortBookNumbers(CoderInfo *coderInfo,
  699. BitStream *bitStream,
  700. int writeFlag)
  701. {
  702.   /*
  703.     This function inputs the vector, 'book_vector[]', which is of length MAX_SCFAC_BANDS,
  704.     and contains the optimal huffman tables of each sfb.  It returns the vector, 'output_book_vector[]', which
  705.     has it's elements formatted for the encoded bit stream.  It's syntax is:
  706.     {sect_cb[0], length_segment[0], ... ,sect_cb[num_of_sections], length_segment[num_of_sections]}
  707.     The above syntax is true, unless there is an escape sequence.  An
  708.     escape sequence occurs when a section is longer than 2 ^ (bit_len)
  709.     long in units of scalefactor bands.  Also, the integer returned from
  710.     this function is the number of bits written in the bitstream,
  711.     'bit_count'.
  712.     This function supports both long and short blocks.
  713.     */
  714. int i;
  715. int repeat_counter;
  716. int bit_count = 0;
  717. int previous;
  718. int max, bit_len/*,sfbs*/;
  719. int max_sfb,g,band;
  720. /* Set local pointers to coderInfo elements */
  721. int* book_vector = coderInfo->book_vector;
  722. if (coderInfo->block_type == ONLY_SHORT_WINDOW){
  723. max = 7;
  724. bit_len = 3;
  725. } else {  /* the block_type is a long,start, or stop window */
  726. max = 31;
  727. bit_len = 5;
  728. }
  729. /* Compute number of scalefactor bands */
  730. max_sfb = coderInfo->nr_of_sfb / coderInfo->num_window_groups;
  731. for (g = 0; g < coderInfo->num_window_groups; g++) {
  732. band=g*max_sfb;
  733. repeat_counter=1;
  734. previous = book_vector[band];
  735. if (writeFlag) {
  736. PutBit(bitStream,book_vector[band],4);
  737. }
  738. bit_count += 4;
  739. for (i=band+1;i<band+max_sfb;i++) {
  740. if( (book_vector[i] != previous)) {
  741. if (writeFlag) {
  742. PutBit(bitStream,repeat_counter,bit_len);
  743. }
  744. bit_count += bit_len;
  745. if (repeat_counter == max){  /* in case you need to terminate an escape sequence */
  746. if (writeFlag)
  747. PutBit(bitStream,0,bit_len);
  748. bit_count += bit_len;
  749. }
  750. if (writeFlag)
  751. PutBit(bitStream,book_vector[i],4);
  752. bit_count += 4;
  753. previous = book_vector[i];
  754. repeat_counter=1;
  755. }
  756. /* if the length of the section is longer than the amount of bits available in */
  757. /* the bitsream, "max", then start up an escape sequence */
  758. else if ((book_vector[i] == previous) && (repeat_counter == max)) {
  759. if (writeFlag) {
  760. PutBit(bitStream,repeat_counter,bit_len);
  761. }
  762. bit_count += bit_len;
  763. repeat_counter = 1;
  764. }
  765. else {
  766. repeat_counter++;
  767. }
  768. }
  769. if (writeFlag)
  770. PutBit(bitStream,repeat_counter,bit_len);
  771. bit_count += bit_len;
  772. if (repeat_counter == max) {  /* special case if the last section length is an */
  773. /* escape sequence */
  774. if (writeFlag)
  775. PutBit(bitStream,0,bit_len);
  776. bit_count += bit_len;
  777. }
  778. }  /* Bottom of group iteration */
  779. return bit_count;
  780. }
  781. int WriteScalefactors(CoderInfo *coderInfo,
  782.   BitStream *bitStream,
  783.   int writeFlag)
  784.  
  785. {
  786. /* this function takes care of counting the number of bits necessary */
  787. /* to encode the scalefactors.  In addition, if the writeFlag == 1, */
  788. /* then the scalefactors are written out the bitStream output bit */
  789. /* stream.  it returns k, the number of bits written to the bitstream*/
  790. int i,j,bit_count=0;
  791. int diff,length,codeword;
  792. int previous_scale_factor;
  793. int previous_is_factor;       /* Intensity stereo */
  794. int index = 0;
  795. int nr_of_sfb_per_group;
  796. /* set local pointer to coderInfo elements */
  797. int* scale_factors = coderInfo->scale_factor;
  798. if (coderInfo->block_type == ONLY_SHORT_WINDOW) { /* short windows */
  799. nr_of_sfb_per_group = coderInfo->nr_of_sfb/coderInfo->num_window_groups;
  800. } else {
  801. nr_of_sfb_per_group = coderInfo->nr_of_sfb;
  802. coderInfo->num_window_groups = 1;
  803. coderInfo->window_group_length[0] = 1;
  804. }
  805. previous_scale_factor = coderInfo->global_gain;
  806. previous_is_factor = 0;
  807.     
  808. for(j=0; j<coderInfo->num_window_groups; j++){
  809. for(i=0;i<nr_of_sfb_per_group;i++) {  
  810. /* test to see if any codebooks in a group are zero */
  811. if ( (coderInfo->book_vector[index]==INTENSITY_HCB) ||
  812. (coderInfo->book_vector[index]==INTENSITY_HCB2) ) {
  813. /* only send scalefactors if using non-zero codebooks */
  814. diff = scale_factors[index] - previous_is_factor;
  815. if ((diff < 60)&&(diff >= -60))
  816. length = huff12[diff+60][FIRSTINTAB];
  817. else length = 0;
  818. bit_count+=length;
  819. previous_is_factor = scale_factors[index];
  820. if (writeFlag == 1 ) {   
  821. codeword = huff12[diff+60][LASTINTAB];
  822. PutBit(bitStream,codeword,length); 
  823. }
  824. } else if (coderInfo->book_vector[index]) {
  825. /* only send scalefactors if using non-zero codebooks */
  826. diff = scale_factors[index] - previous_scale_factor;
  827. if ((diff < 60)&&(diff >= -60))
  828. length = huff12[diff+60][FIRSTINTAB];
  829. else length = 0;
  830. bit_count+=length;
  831. previous_scale_factor = scale_factors[index];
  832. if (writeFlag == 1 ) {   
  833. codeword = huff12[diff+60][LASTINTAB];
  834. PutBit(bitStream,codeword,length); 
  835. }
  836. }
  837. index++;
  838. }
  839. }
  840. return bit_count;
  841. }