PageRenderTime 60ms CodeModel.GetById 19ms RepoModel.GetById 1ms app.codeStats 0ms

/AVS_Transcoder_SDK/kernel/audio/AudioTransCoder_Lame/av3enc/src/sam_encode_cbc.cpp

https://gitlab.com/jchwei/avs-transcoder
C++ | 1518 lines | 1162 code | 176 blank | 180 comment | 241 complexity | 1fb56c1f348652ddfd0166b9045a02a3 MD5 | raw file
  1. /*
  2. ***********************************************************************
  3. * COPYRIGHT AND WARRANTY INFORMATION
  4. *
  5. * Copyright 2004, Audio Video Coding Standard, Part III
  6. *
  7. * This software module was originally developed by
  8. *
  9. * JungHoe Kim (kjh94@samsung.com), Samsung AIT
  10. *
  11. * edited by
  12. *
  13. * Lei Miao (win.miaolei@samsung.com), Samsung AIT
  14. *
  15. * Lei Miao, fill data embedded, 2005-03-16
  16. *
  17. * Lei Miao, coding band bug fixed, 2005-06-15
  18. * Lei Miao, flexible frame length/MC_present, 2005-06-15
  19. * Lei Miao, CBC Multi-channel extension, 2005-09-19
  20. * Lei Miao, CBC codebook reduction, 2005-12-22
  21. * Xun Li , fill bits for buffer control, 2006-4-16
  22. *
  23. * DISCLAIMER OF WARRANTY
  24. *
  25. * These software programs are available to the users without any
  26. * license fee or royalty on an "as is" basis. The AVS disclaims
  27. * any and all warranties, whether express, implied, or statutory,
  28. * including any implied warranties of merchantability or of fitness
  29. * for a particular purpose. In no event shall the contributors or
  30. * the AVS be liable for any incidental, punitive, or consequential
  31. * damages of any kind whatsoever arising from the use of this program.
  32. *
  33. * This disclaimer of warranty extends to the user of this program
  34. * and user's customers, employees, agents, transferees, successors,
  35. * and assigns.
  36. *
  37. * The AVS does not represent or warrant that the program furnished
  38. * hereunder are free of infringement of any third-party patents.
  39. * Commercial implementations of AVS, including shareware, may be
  40. * subject to royalty fees to patent holders. Information regarding
  41. * the AVS patent policy is available from the AVS Web site at
  42. * http://www.avs.org.cn
  43. *
  44. * THIS IS NOT A GRANT OF PATENT RIGHTS - SEE THE AVS PATENT POLICY.
  45. ************************************************************************
  46. */
  47. #include <sys/types.h>
  48. #include <sys/stat.h>
  49. #include <stdio.h>
  50. #include <stdlib.h>
  51. #include <math.h>
  52. #include "av3enc.h"
  53. extern void BSHCInit(FILE *name);
  54. extern void BSHCClose(void);
  55. extern int EncodeBSHCQuant(int model,int upper,int cur);
  56. extern int EncodeBSHCSi(int siVal);
  57. extern int EncodeBSHCSf(int sfVal);
  58. extern int EncodeBSHCBin(int ms);
  59. extern void EncodeBSHCStart(void);
  60. extern void EncodeBSHCEnd(void);
  61. extern void EncodeBSHCPutBits(int val,int len);
  62. extern int EncodeBSHCGetSize();
  63. extern void EncodeBSHCHeader(int ch,int freq);
  64. extern int EncodeBSHCByteAlign(void);
  65. extern int BSHCModelSelect(int bshcModel,int bpl);
  66. extern void EncodeBSHCFlush(void);
  67. extern int WriteAASFHeader(int ch,int freq,int bitrate,int aasf_flag); //for AASF
  68. extern void Register_buffer(void);
  69. extern void Restore_buffer(void);
  70. extern int EncodeBSHCGetAATFSize(void);
  71. int encode_cband_si(
  72. int *model_index[][8],
  73. int start_cband[8],
  74. int end_cband[8],
  75. int g,
  76. int nch);
  77. int encode_scfband_si(
  78. int *scf[][8],
  79. int start_sfb[8],
  80. int end_sfb[8],
  81. int stereo_mode,
  82. int *stereo_info[8],
  83. int stereo_si_coded[8][MAX_SCFAC_BANDS],
  84. int g,
  85. int nch);
  86. int encode_spectra(
  87. int *sample[][8],
  88. int s_reg,
  89. int e_reg,
  90. int s_freq[8],
  91. int e_freq[8],
  92. int min_bpl,
  93. int available_len,
  94. int *model_index[][8],
  95. int *cur_bpl[][8],
  96. int *coded_samp_bit[][8],
  97. int *sign_coded[][8],
  98. int *enc_vec[][8],
  99. int nch);
  100. #define min(x,y) ((x) > (y) ? (y) : (x))
  101. #define max(x,y) ((x) > (y) ? (x) : (y))
  102. double fs_tbl[12]=
  103. {96000, 88200, 64000, /* zhanjie 0708 */ 48000., 44100., 32000., 24000., 22050, 16000, 12000, 11025, 8000};
  104. int channel_mapping_51[3][2]=
  105. {{2, 0}, {4, 2}, {3, 3}};
  106. static int sampling_rate;
  107. void init_layer_variables (
  108. int signal_type,
  109. int num_window_groups,
  110. int window_group_length[],
  111. int maxSfb,
  112. int base_band,
  113. short *swb_offset[],
  114. int top_layer,
  115. int *slayer_size,
  116. int layer_reg[],
  117. int layer_max_freq[],
  118. int layer_max_cband[],
  119. int layer_max_qband[]
  120. );
  121. /* function prototypes */
  122. void sam_scale_bits_init(int fsidx)
  123. {
  124. sampling_rate = (int)fs_tbl[fsidx];
  125. }
  126. int get_base_band()
  127. {
  128. int base_band;
  129. switch(sampling_rate) {
  130. case 96000:
  131. case 88200:
  132. base_band = 256; //12000Hz zhanjie 0708
  133. break;
  134. case 64000:
  135. base_band = 320; //10000Hz zhanjie 0708
  136. break;
  137. case 48000:
  138. case 44100:
  139. base_band = 288 + 32+64; //9000Hz
  140. break;
  141. case 32000:
  142. base_band = 416; // 6500 Hz
  143. break;
  144. case 24000:
  145. case 22050:
  146. base_band = 512; //6000Hz
  147. break;
  148. case 16000:
  149. base_band = 640; //5000Hz
  150. break;
  151. case 12000:
  152. case 11025:
  153. base_band = 768; //4500Hz
  154. break;
  155. case 8000:
  156. base_band = 832; //3250Hz
  157. break;
  158. }
  159. return base_band;
  160. }
  161. int enc_wflag = 0;
  162. int sam_encode_cbc(
  163. ChannelInfo channelInfo[],
  164. int outputformat,
  165. int target_bitrate,
  166. int signal_type,
  167. int windowShape,
  168. int *sample[][8],
  169. int *scalefac[][8],
  170. int maxSfb,
  171. int minSfb,
  172. int num_window_groups,
  173. int window_group_length[],
  174. short *swb_offset[],
  175. int *model_index[][8],
  176. int stereo_mode,
  177. int *stereo_info[],
  178. int abits,
  179. int nch,
  180. int wflag,
  181. int isExtended,
  182. int channelIdx,
  183. int mc_present,
  184. int extended_bytes,
  185. int *fill_bits)
  186. {
  187. int i, ch, g, m, k;
  188. int top_layer;
  189. int sfb, qband, cband;
  190. int base_snf;
  191. int base_band;
  192. int layer_reg[100]; /* Array Size : 64 -> 100 shpark 2000.04.20 */
  193. int layer_max_freq[100]; /* Array Size : 64 -> 100 shpark 2000.04.20 */
  194. int layer_max_cband[100]; /* Array Size : 64 -> 100 shpark 2000.04.20 */
  195. int layer_max_qband[100]; /* Array Size : 64 -> 100 shpark 2000.04.20 */
  196. //int layer_bit_flush[100]; /* Array Size : 64 -> 100 shpark 2000.04.20 */
  197. int layer_buf_offset[100]; /* Array Size : 64 -> 100 shpark 2000.04.20 */
  198. int layer_si_maxlen[100]; /* Array Size : 64 -> 100 shpark 2000.04.20 */
  199. int layer_extra_len[100]; /* Array Size : 64 -> 100 shpark 2000.04.20 */
  200. int layer_cw_offset[100]; /* Array Size : 64 -> 100 shpark 2000.04.20 */
  201. int start_freq[8]; /* Array Size : 64 -> 8 shpark 2000.04.20 */
  202. int start_qband[8]; /* Array Size : 64 -> 8 shpark 2000.04.20 */
  203. int start_cband[8]; /* Array Size : 64 -> 8 shpark 2000.04.20 */
  204. int end_freq[8]; /* Array Size : 64 -> 8 shpark 2000.04.20 */
  205. int end_cband[8]; /* Array Size : 64 -> 8 shpark 2000.04.20 */
  206. int end_qband[8]; /* Array Size : 64 -> 8 shpark 2000.04.20 */
  207. int s_freq[8]; /* Array Size : 64 -> 8 shpark 2000.04.20 */
  208. int e_freq[8]; /* Array Size : 64 -> 8 shpark 2000.04.20 */
  209. int cw_len;
  210. int layer;
  211. int slayer_size;
  212. int si_offset;
  213. //int est_total_len;
  214. int available_len;
  215. //int used_bits;
  216. int cur_snf_buf[2][1024];
  217. int *cur_snf[2][8];
  218. int band_snf[2][8][32];
  219. int sign_is_coded_buf[2][1024];
  220. int *sign_is_coded[2][8];
  221. int *coded_samp_bit[2][8];
  222. int coded_samp_bit_buf[2][1024];
  223. int *enc_vec[2][8];
  224. int enc_vec_buf[2][256];
  225. int stereo_si_coded[8][MAX_SCFAC_BANDS];
  226. int code_len;
  227. int layerBit;
  228. int headerLen;
  229. int specBits=0;
  230. //for AATF
  231. int bit_count0;
  232. int bit_count1;
  233. /* fill element variables */
  234. int fill_enable=1;
  235. int fill_length=0;
  236. int fill_ele_number=0;
  237. int fill_cnt[128];
  238. /* default fill */
  239. int fill_type=FILL_DFT;
  240. int enhance_FLCnt;
  241. int FL_fieldBits;
  242. int enhance_enable;
  243. int FL_Byte;
  244. int FL_Bit;
  245. int headerAlignBits, headerAlignBytes;
  246. int channel_configuration_index;
  247. int test=0;
  248. // 20060116 Miao
  249. int scalable_header_reuse=0;
  250. enc_wflag = wflag;
  251. // 2006-4-16 xun
  252. *fill_bits = ((*fill_bits + 7) >> 3) << 3;
  253. /* ***************************************************** */
  254. /* Initialize variables */
  255. /* ***************************************************** */
  256. for(ch = 0; ch < nch; ch++) {
  257. int s;
  258. s = 0;
  259. for(g = 0; g < num_window_groups; g++) {
  260. sign_is_coded[ch][g] = &(sign_is_coded_buf[ch][1024*s/8]);
  261. coded_samp_bit[ch][g] = &(coded_samp_bit_buf[ch][1024*s/8]);
  262. enc_vec[ch][g] = &(enc_vec_buf[ch][(1024*s/8)/4]);
  263. cur_snf[ch][g] = &(cur_snf_buf [ch][1024*s/8]);
  264. s += window_group_length[g];
  265. for (i=0; i<MAX_SCFAC_BANDS; i++)
  266. stereo_si_coded[g][i] = 0;
  267. }
  268. for (i=0; i<1024; i++) {
  269. sign_is_coded_buf[ch][i] = 0;
  270. coded_samp_bit_buf[ch][i] = 0;
  271. cur_snf_buf[ch][i] = 0;
  272. }
  273. for (i=0; i<256; i++) {
  274. enc_vec_buf[ch][i] = 0;
  275. }
  276. }
  277. top_layer = ((target_bitrate/nch) / 1000) - 16;
  278. if (top_layer > 63) top_layer = 63; /* top_layer limit inserted by shpark 2000. 09. 25 */
  279. /******************************/
  280. /* Adjust necessary variables */
  281. /******************************/
  282. base_snf = 1;
  283. base_band = get_base_band();
  284. /* ************************************************
  285. Initialize
  286. layer_max_freq
  287. layer_max_cband
  288. layer_max_qband
  289. layer_bit_flush
  290. ************************************************ */
  291. init_layer_variables (signal_type, num_window_groups,
  292. window_group_length, maxSfb,
  293. base_band, swb_offset, top_layer, &slayer_size, layer_reg,
  294. layer_max_freq, layer_max_cband, layer_max_qband);
  295. /* maxSfb limitation */
  296. if (layer_max_qband[top_layer+slayer_size] < maxSfb)
  297. maxSfb = layer_max_qband[top_layer+slayer_size-1];
  298. for(g = 0; g < num_window_groups; g++)
  299. end_cband[g] = (swb_offset[g][maxSfb]+31) / 32;
  300. if(signal_type == TRANSIENT_TYPE) {
  301. for (layer = 0; layer < slayer_size; layer++) {
  302. g = layer_reg[layer];
  303. end_qband[g] = layer_max_qband[layer];
  304. }
  305. }
  306. else
  307. end_qband[0] = layer_max_qband[slayer_size-1];
  308. /* ***************************************************** */
  309. /* syntax of cbc_header() */
  310. /* ***************************************************** */
  311. //HUFF start
  312. if(outputformat == 2)
  313. Register_buffer();
  314. else
  315. EncodeBSHCStart();
  316. bit_count0 = EncodeBSHCGetSize();
  317. /* frame length */
  318. enhance_enable = 0;
  319. /* base frame length */
  320. if(abits == 20000) // lixun 2008-7-28, max bits 6144 * 2=12288, so use 20000 as esmitated bits number
  321. {
  322. EncodeBSHCPutBits(0,8);
  323. }
  324. else
  325. {
  326. enhance_enable = 1;
  327. enhance_FLCnt = 0;
  328. FL_Byte = abits >> 3;
  329. FL_Byte += extended_bytes;
  330. //bug fix: 20006-4-16 Xun
  331. if (!isExtended)
  332. FL_Byte += (*fill_bits>>3);
  333. /* 4 bytes: minimum header length */
  334. while( (FL_Byte-4) > ((1<<(7+enhance_FLCnt*3))-1) )
  335. enhance_FLCnt ++;
  336. FL_fieldBits = 7 + enhance_FLCnt*3;
  337. /* base frame length */
  338. EncodeBSHCPutBits((FL_Byte-4)>>(enhance_FLCnt*3),7);
  339. while(enhance_FLCnt) {
  340. EncodeBSHCPutBits(1, 1);
  341. EncodeBSHCPutBits(((FL_Byte-4)>>((enhance_FLCnt-1)*3))&0x7,3);
  342. enhance_FLCnt --;
  343. }
  344. /* frame length end flag */
  345. EncodeBSHCPutBits(0, 1);
  346. }
  347. /* MC_present */
  348. if(!isExtended) {
  349. EncodeBSHCPutBits(mc_present,1);
  350. if(mc_present) {
  351. /* FL/FR length */
  352. /* base frame length */
  353. if(abits == 20000)
  354. {
  355. EncodeBSHCPutBits(0,8);
  356. }
  357. else {
  358. enhance_enable = 1;
  359. enhance_FLCnt = 0;
  360. FL_Byte = abits >> 3;
  361. /* 4 bytes: minimum header length */
  362. while( (FL_Byte-4) > ((1<<(7+enhance_FLCnt*3))-1) )
  363. enhance_FLCnt ++;
  364. FL_fieldBits = 7 + enhance_FLCnt*3;
  365. /* base frame length */
  366. EncodeBSHCPutBits((FL_Byte-4)>>(enhance_FLCnt*3),7);
  367. while(enhance_FLCnt) {
  368. EncodeBSHCPutBits(1, 1);
  369. EncodeBSHCPutBits(((FL_Byte-4)>>((enhance_FLCnt-1)*3))&0x7,3);
  370. enhance_FLCnt --;
  371. }
  372. /* frame length end flag */
  373. EncodeBSHCPutBits(0, 1);
  374. }
  375. }
  376. }
  377. else {
  378. ch = 0;
  379. while(channel_mapping_51[ch][0] != channelIdx)
  380. ch ++;
  381. channel_configuration_index = channel_mapping_51[ch][1];
  382. /* channel configuration index: 4 */
  383. EncodeBSHCPutBits(channel_configuration_index,4);
  384. // 20060116 Miao
  385. /* scalable_header_reuse: 1 bit */
  386. EncodeBSHCPutBits(scalable_header_reuse, 1);
  387. /* reserved_bit : 1 */
  388. EncodeBSHCPutBits(0, 1);
  389. }
  390. /* top layer index */
  391. EncodeBSHCPutBits(top_layer,6);
  392. /* base snf */
  393. EncodeBSHCPutBits(base_snf-1,2);
  394. /* base band */
  395. EncodeBSHCPutBits(base_band/32,5);
  396. /* ***************************************************** */
  397. /* syntax of general_header() */
  398. /* ***************************************************** */
  399. /* reserved_bit : 1 */
  400. EncodeBSHCPutBits(0,1);
  401. for(ch = 0; ch < nch; ch++) {
  402. EncodeBSHCPutBits(scalefac[ch][0][0],8);
  403. }
  404. EncodeBSHCPutBits((int)signal_type,1);
  405. EncodeBSHCPutBits((int)windowShape,1);
  406. if(signal_type == TRANSIENT_TYPE) {
  407. extern int siCodeMode;
  408. EncodeBSHCPutBits(maxSfb,4);
  409. for (i=1; i<window_group_length[0]; i++)
  410. {
  411. EncodeBSHCPutBits(1,1);
  412. }
  413. for(g = 1; g < num_window_groups; g++) {
  414. EncodeBSHCPutBits(0,1);
  415. for (i=1; i<window_group_length[g]; i++)
  416. {
  417. EncodeBSHCPutBits(1,1);
  418. }
  419. }
  420. EncodeBSHCPutBits(siCodeMode,1);
  421. } else {
  422. EncodeBSHCPutBits(maxSfb,6);
  423. }
  424. if(nch == 2) {
  425. EncodeBSHCPutBits(stereo_mode,2);
  426. }
  427. /* fill enable, 1 bit */
  428. // xun 2006-4-16 fill bits
  429. if (!isExtended) {
  430. if (*fill_bits == 0)
  431. fill_enable = 0;
  432. fill_length = *fill_bits >> 3;
  433. EncodeBSHCPutBits(fill_enable,1);
  434. if (*fill_bits > 0)
  435. fill_ele_number = (*fill_bits + MAX_FILL_BITS - 1)/MAX_FILL_BITS - 1;
  436. else
  437. fill_ele_number = 0;
  438. if(fill_enable)
  439. {
  440. int tmp = *fill_bits;
  441. EncodeBSHCPutBits(fill_ele_number, 7);
  442. for (i = 0; i < fill_ele_number+1; i++)
  443. {
  444. fill_cnt[i] = min(tmp, MAX_FILL_BITS);
  445. tmp -= fill_cnt[i];
  446. fill_cnt[i] >>= 3;
  447. /* fill length field */
  448. if(fill_cnt[i] < 15)
  449. {
  450. EncodeBSHCPutBits(fill_cnt[i],4);
  451. }
  452. else
  453. {
  454. EncodeBSHCPutBits(15,4);
  455. EncodeBSHCPutBits(fill_cnt[i]-15,8);
  456. }
  457. }
  458. }
  459. }
  460. /* ***************************************************** */
  461. /* extension_coding_element() */
  462. /* ***************************************************** */
  463. {
  464. int chIndex = 0;
  465. FLPVQInfo *flpVQInfo;
  466. chIndex = channelIdx;
  467. for (ch = 0; ch < nch; ch++) {
  468. flpVQInfo = &channelInfo[chIndex + ch].flpInfo; // wlei modified [2005-12-22]
  469. EncodeBSHCPutBits(flpVQInfo->nFlpPresent, 1);
  470. if (flpVQInfo->nFlpPresent) {
  471. EncodeBSHCPutBits(flpVQInfo->nPredDirection, 1);
  472. EncodeBSHCPutBits(flpVQInfo->nVQCode1Index, 10);
  473. EncodeBSHCPutBits(flpVQInfo->nVQCode2Index, 10);
  474. EncodeBSHCPutBits(flpVQInfo->nVQCode3Index, 9);
  475. EncodeBSHCPutBits(flpVQInfo->nVQCode4Index, 8);
  476. chIndex ++;
  477. }
  478. }
  479. }
  480. if(!enhance_enable) {
  481. headerAlignBits = EncodeBSHCGetSize() & 0x7;
  482. if(headerAlignBits)
  483. headerAlignBits = 8 - headerAlignBits;
  484. }
  485. /*********** byte align *********/
  486. EncodeBSHCByteAlign();
  487. if (outputformat == 2)
  488. headerLen = EncodeBSHCGetAATFSize();
  489. else
  490. headerLen = EncodeBSHCGetSize();
  491. if(maxSfb == 0) {
  492. if(nch == 1) return headerLen;
  493. if(nch == 2 && maxSfb == 0) return headerLen;
  494. }
  495. for(ch = 0; ch < nch; ch++) {
  496. for(g = 0; g < num_window_groups; g++) {
  497. for(cband = 0; cband < end_cband[g]; cband++) {
  498. if(model_index[ch][g][cband]==0)
  499. {
  500. band_snf[ch][g][cband]=0;
  501. continue;
  502. }
  503. if(model_index[ch][g][cband] >= 9)
  504. band_snf[ch][g][cband] = model_index[ch][g][cband] -4;
  505. else
  506. {
  507. band_snf[ch][g][cband] = (model_index[ch][g][cband]+1)/2;
  508. }
  509. }
  510. }
  511. }
  512. /* ##################################################### */
  513. /* CBC MAIN ROUTINE */
  514. /* ##################################################### */
  515. /* ***************************************************** */
  516. /* CBC_layer_stream() */
  517. /* ***************************************************** */
  518. for(g = 0; g < num_window_groups; g++)
  519. end_cband[g] = end_qband[g] = 0;
  520. for (layer=0; layer<(top_layer+slayer_size); layer++) {
  521. g = layer_reg[layer];
  522. start_qband[g] = end_qband[g];
  523. start_cband[g] = end_cband[g];
  524. end_qband[g] = layer_max_qband[layer];
  525. end_cband[g] = layer_max_cband[layer];
  526. }
  527. /* to calculate core CBC data size */
  528. layer_buf_offset[0] = (double)16.*(abits-headerLen)
  529. /(double)(top_layer+16)/(double)slayer_size;
  530. for (layer = 1; layer < slayer_size-1; layer++)
  531. {
  532. layer_buf_offset[layer] = layer_buf_offset[layer-1] +
  533. (double)16.*(abits-headerLen)/(top_layer+16)/slayer_size;
  534. }
  535. layer_buf_offset[slayer_size-1] =
  536. (double)16.*(abits-headerLen)/(top_layer+16);
  537. layerBit = (abits-headerLen) - layer_buf_offset[slayer_size-1];
  538. for (layer = slayer_size; layer < top_layer+slayer_size-1; layer++)
  539. {
  540. layer_buf_offset[layer] = layer_buf_offset[layer-1] +
  541. layerBit/(top_layer);
  542. }
  543. layer_buf_offset[top_layer+slayer_size-1] = (abits-headerLen);
  544. for (layer = top_layer+slayer_size; layer < 100; layer++)
  545. layer_buf_offset[layer] = (abits-headerLen);
  546. for(i = 0; i < 100; i++) {
  547. layer_extra_len[i] = 0;
  548. layer_cw_offset[i] = 0;
  549. }
  550. //est_total_len = used_bits;
  551. for(g = 0; g < num_window_groups; g++) {
  552. start_qband[g] = 0;
  553. start_cband[g] = 0;
  554. start_freq[g] = 0;
  555. end_qband[g] = 0;
  556. end_cband[g] = 0;
  557. end_freq[g] = 0;
  558. }
  559. for(g = 0; g < num_window_groups; g++)
  560. s_freq[g] = 0;
  561. if (signal_type == TRANSIENT_TYPE) {
  562. for (layer = 0; layer < slayer_size; layer++) {
  563. g = layer_reg[layer];
  564. e_freq[g] = layer_max_freq[layer];
  565. }
  566. }
  567. code_len = 0;
  568. available_len = 0;
  569. /* ##################################################### */
  570. /* CBC MAIN LOOP */
  571. /* ##################################################### */
  572. for (layer = 0; layer < top_layer+slayer_size; layer++) {
  573. int min_snf;
  574. g = layer_reg[layer];
  575. start_freq[g] = end_freq[g];
  576. start_qband[g] = end_qband[g];
  577. start_cband[g] = end_cband[g];
  578. end_qband[g] = layer_max_qband[layer];
  579. end_cband[g] = layer_max_cband[layer];
  580. end_freq[g] = layer_max_freq[layer];
  581. for(ch = 0; ch < nch; ch++) {
  582. for(i = start_freq[g]; i < end_freq[g]; i++)
  583. cur_snf[ch][g][i] = band_snf[ch][g][i/32];
  584. }
  585. if (signal_type == TRANSIENT_TYPE) {
  586. if(layer >= slayer_size) {
  587. g = layer_reg[layer];
  588. e_freq[g] = layer_max_freq[layer];
  589. }
  590. } else {
  591. if (layer >= slayer_size)
  592. e_freq[0] = layer_max_freq[layer];
  593. else
  594. e_freq[0] = layer_max_freq[slayer_size-1];
  595. }
  596. if(layer==0)
  597. available_len = layer_buf_offset[0];
  598. else
  599. available_len += layer_buf_offset[layer]-
  600. layer_buf_offset[layer-1];
  601. //est_total_len += available_len;
  602. cw_len = encode_cband_si(model_index, start_cband, end_cband, g, nch);
  603. code_len += cw_len;
  604. available_len -= cw_len;
  605. g = layer_reg[layer];
  606. /* side infomation : scalefactor */
  607. cw_len = encode_scfband_si(scalefac, start_qband,
  608. end_qband, stereo_mode, stereo_info,
  609. stereo_si_coded, g, nch);
  610. code_len += cw_len;
  611. available_len -= cw_len;
  612. min_snf = layer < slayer_size ? base_snf : 1;
  613. /* Bit-Sliced Spectral Data Coding */
  614. cw_len = encode_spectra(sample, g, g+1, start_freq, end_freq,
  615. min_snf, available_len, model_index, cur_snf, coded_samp_bit,
  616. sign_is_coded, enc_vec, nch);
  617. test += cw_len;
  618. code_len += cw_len;
  619. available_len -= cw_len;
  620. specBits+= cw_len;
  621. if(available_len > 0) {
  622. cw_len = encode_spectra(sample, 0, num_window_groups, s_freq, e_freq,
  623. 1, available_len, model_index, cur_snf, coded_samp_bit,
  624. sign_is_coded, enc_vec, nch);
  625. code_len += cw_len;
  626. available_len -= cw_len;
  627. specBits+= cw_len;
  628. test += cw_len;
  629. }
  630. //est_total_len -= available_len;
  631. }
  632. if(!enhance_enable) {
  633. int byte_incr = 0;
  634. int FL_Bit_cur = 0;
  635. int enhance_FLCnt_last = 0;
  636. // 20060116 Miao
  637. if(outputformat != 2)
  638. FL_Bit = EncodeBSHCGetSize();
  639. else
  640. FL_Bit = EncodeBSHCGetSize() - bit_count0;
  641. FL_Byte = (FL_Bit+7) >> 3;
  642. FL_Bit_cur = FL_Bit;
  643. while (1)
  644. {
  645. enhance_FLCnt = 0;
  646. FL_Byte = (FL_Bit_cur+7) >> 3;
  647. // 2006-4-16 Xun bug fixed
  648. if (!isExtended)
  649. {
  650. FL_Byte += extended_bytes;
  651. FL_Byte += fill_enable * fill_length;
  652. }
  653. /* 4 bytes: minimum header length */
  654. while((FL_Byte-4) > ((1<<(7+enhance_FLCnt*3))-1))
  655. enhance_FLCnt ++;
  656. // 2006-4-16 Xun
  657. if(!isExtended && mc_present) {
  658. int enhance_FLCnt2;
  659. FL_Byte -= extended_bytes;
  660. FL_Byte -= fill_enable * fill_length;
  661. enhance_FLCnt2 = 0;
  662. while((FL_Byte-4) > ((1<<(7+enhance_FLCnt2*3))-1))
  663. enhance_FLCnt2 ++;
  664. enhance_FLCnt += enhance_FLCnt2;
  665. }
  666. if(enhance_FLCnt > enhance_FLCnt_last) {
  667. if(headerAlignBits < (enhance_FLCnt<<2)) {
  668. byte_incr = (enhance_FLCnt<<2) - headerAlignBits;
  669. byte_incr = (byte_incr+7)>>3;
  670. // 2006-4-16 xun
  671. FL_Bit_cur = FL_Bit + (byte_incr<<3);
  672. }
  673. else
  674. break;
  675. }
  676. else
  677. break;
  678. enhance_FLCnt_last = enhance_FLCnt;
  679. }
  680. FL_Bit = FL_Bit_cur;
  681. FL_Byte = (FL_Bit+7) >> 3;
  682. // 20060116 li xun
  683. for(i = 0; i < byte_incr; i ++)
  684. EncodeBSHCPutBits(0, 8);
  685. }
  686. EncodeBSHCByteAlign();
  687. /* fill data */
  688. // xun 2006-4-16 fill buffer
  689. if(!isExtended && fill_enable)
  690. {
  691. for (k = 0; k < fill_ele_number + 1; k++)
  692. {
  693. EncodeBSHCPutBits(fill_type,4);
  694. switch(fill_type)
  695. {
  696. case FILL_DFT:
  697. for(i = 0; i < 8*(fill_cnt[k]-1)+4; i ++)
  698. EncodeBSHCPutBits(1,1);
  699. break;
  700. default:
  701. ;
  702. }
  703. }
  704. }
  705. //EncodeBSHCEnd();
  706. // 20060116 Miao
  707. bit_count1 = EncodeBSHCGetSize()-*fill_bits;
  708. if(outputformat == 2 && !wflag)
  709. Restore_buffer();
  710. return (bit_count1 - bit_count0);
  711. }
  712. void init_layer_variables (
  713. int signal_type,
  714. int num_window_groups,
  715. int window_group_length[],
  716. int maxSfb,
  717. int base_band,
  718. short *swb_offset[],
  719. int top_layer,
  720. int *slayer_size,
  721. int layer_reg[],
  722. int layer_max_freq[],
  723. int layer_max_cband[],
  724. int layer_max_qband[]
  725. )
  726. {
  727. int i, reg;
  728. int layer, g;
  729. int sfb, cband;
  730. int init_max_freq[8];
  731. int end_cband[8];
  732. int end_freq[8];
  733. int end_layer;
  734. /************************************************/
  735. /* calculate slayer_size */
  736. /************************************************/
  737. if(signal_type == TRANSIENT_TYPE) {
  738. *slayer_size = 0;
  739. for(g = 0; g < num_window_groups; g++) {
  740. init_max_freq[g] = (base_band * window_group_length[g]) / 32 * 4;
  741. switch(sampling_rate) {
  742. case 96000:
  743. case 88200:
  744. case 64000: /* zhanjie 0708 */
  745. case 48000: case 44100:
  746. if((init_max_freq[g] % 32) >= 16)
  747. init_max_freq[g] = (init_max_freq[g]/32) * 32 + 20;
  748. else if((init_max_freq[g] % 32) >= 4)
  749. init_max_freq[g] = (init_max_freq[g]/32) * 32 + 8;
  750. break;
  751. case 32000: case 24000: case 22050:
  752. init_max_freq[g] = (init_max_freq[g]/16) * 16;
  753. break;
  754. case 16000: case 12000: case 11025:
  755. init_max_freq[g] = (init_max_freq[g]/32) * 32;
  756. break;
  757. case 8000:
  758. init_max_freq[g] = (init_max_freq[g]/64) * 64;
  759. break;
  760. }
  761. init_max_freq[g] = min(init_max_freq[g], swb_offset[g][maxSfb]);
  762. end_freq[g] = init_max_freq[g];
  763. end_cband[g] = (end_freq[g] + 31) / 32;
  764. *slayer_size += (init_max_freq[g]+31)/32;
  765. }
  766. } else { /* if(signal_type == TRANSIENT_TYPE) */
  767. g = 0;
  768. init_max_freq[g] = base_band;
  769. if (init_max_freq[g] > swb_offset[g][maxSfb])
  770. init_max_freq[g] = swb_offset[g][maxSfb];
  771. *slayer_size = (init_max_freq[g]+31)/32;
  772. end_freq[g] = init_max_freq[g];
  773. end_cband[g] = (end_freq[g] + 31) / 32;
  774. } /* if(signal_type == TRANSIENT_TYPE) ... else */
  775. /************************************************/
  776. /* calculate layer_max_cband and layer_max_freq */
  777. /************************************************/
  778. for(g = 0, layer=0; g < num_window_groups; g++)
  779. for (cband = 1; cband <= end_cband[g]; layer++, cband++) {
  780. layer_reg[layer] = g;
  781. layer_max_freq[layer] = cband * 32;
  782. if (layer_max_freq[layer] > init_max_freq[g])
  783. layer_max_freq[layer] = init_max_freq[g];
  784. layer_max_cband[layer] = cband;
  785. }
  786. if(signal_type == TRANSIENT_TYPE) {
  787. layer = *slayer_size;
  788. for(g = 0; g < num_window_groups; g++) {
  789. for (i=0; i<window_group_length[g]; i++) {
  790. layer_reg[layer] = g;
  791. layer++;
  792. }
  793. }
  794. for (layer=*slayer_size+8; layer<100; layer++)
  795. layer_reg[layer] = layer_reg[layer-8];
  796. }
  797. else {
  798. for (layer=*slayer_size; layer<100; layer++)
  799. layer_reg[layer] = 0;
  800. }
  801. for (layer = *slayer_size; layer <100; layer++) {
  802. reg = layer_reg[layer];
  803. switch(sampling_rate) {
  804. /* zhanjie 0708 begin */
  805. case 96000:
  806. case 88200:
  807. end_freq[reg] += 16;
  808. break;
  809. case 64000:
  810. end_freq[reg] += 12;
  811. break;
  812. /* zhanjie 0708 ends */
  813. case 48000: case 44100:
  814. end_freq[reg] += 8;
  815. if ((end_freq[reg]%32) != 0)
  816. end_freq[reg] += 4;
  817. break;
  818. case 32000: case 24000: case 22050:
  819. end_freq[reg] += 16;
  820. break;
  821. case 16000: case 12000: case 11025:
  822. end_freq[reg] += 32;
  823. break;
  824. default:
  825. end_freq[reg] += 64;
  826. break;
  827. }
  828. if (end_freq[reg] > swb_offset[reg][maxSfb] )
  829. end_freq[reg] = swb_offset[reg][maxSfb];
  830. //if( (top_layer+*slayer_size) <= layer)//
  831. // end_freq[reg] = swb_offset[reg][maxSfb];
  832. layer_max_freq[layer] = end_freq[reg];
  833. layer_max_cband[layer] = (layer_max_freq[layer]+31)/32;
  834. }
  835. /*****************************/
  836. /* calculate layer_bit_flush */
  837. /*****************************/
  838. #if 0
  839. for (layer = 0; layer < (top_layer+*slayer_size-1); layer++) {
  840. if (layer_max_cband[layer] != layer_max_cband[layer+1] ||
  841. layer_reg[layer] != layer_reg[layer+1] )
  842. layer_bit_flush[layer] = 1;
  843. else
  844. layer_bit_flush[layer] = 0;
  845. }
  846. for ( ; layer < 100; layer++)
  847. layer_bit_flush[layer] = 1;
  848. #endif // this part is conflit with standard spec. -- lixun 08/07/21
  849. /*****************************/
  850. /* calculate layer_max_qband */
  851. /*****************************/
  852. for (layer = 0; layer < 100; layer++) {
  853. end_layer = layer;
  854. #if 0
  855. while ( !layer_bit_flush[end_layer] )
  856. end_layer++;
  857. #endif // this part is conflict with spec. -- lixun 08/07/21
  858. reg = layer_reg[layer];
  859. for (sfb=0; sfb<maxSfb; sfb++) {
  860. if (layer_max_freq[end_layer] <= swb_offset[reg][sfb+1]) {
  861. layer_max_qband[layer] = sfb+1;
  862. break;
  863. }
  864. }
  865. if (layer_max_qband[layer] > maxSfb)
  866. layer_max_qband[layer] = maxSfb;
  867. }
  868. }
  869. void get_end_band (
  870. int signal_type,
  871. int num_window_groups,
  872. int window_group_length[],
  873. int maxSfb,
  874. short *swb_offset[],
  875. int top_layer,
  876. int base_maxSfb[],
  877. int end_sfb[],
  878. int end_freq[],
  879. int end_cband[]
  880. )
  881. {
  882. int i, reg;
  883. int layer, g;
  884. int sfb, cband;
  885. int init_max_freq[8];
  886. int slayer_size;
  887. int layer_reg[100];
  888. int base_band = get_base_band();
  889. /************************************************/
  890. /* calculate slayer_size */
  891. /************************************************/
  892. if(signal_type == TRANSIENT_TYPE) {
  893. slayer_size = 0;
  894. for(g = 0; g < num_window_groups; g++) {
  895. init_max_freq[g] = (base_band * window_group_length[g]) / 32 * 4;
  896. switch(sampling_rate) {
  897. case 96000:
  898. case 88200:
  899. case 64000: // zhanjie 0708
  900. case 48000: case 44100:
  901. if((init_max_freq[g] % 32) >= 16)
  902. init_max_freq[g] = (init_max_freq[g]/32) * 32 + 20;
  903. else if((init_max_freq[g] % 32) >= 4)
  904. init_max_freq[g] = (init_max_freq[g]/32) * 32 + 8;
  905. break;
  906. case 32000: case 24000: case 22050:
  907. init_max_freq[g] = (init_max_freq[g]/16) * 16;
  908. break;
  909. case 16000: case 12000: case 11025:
  910. init_max_freq[g] = (init_max_freq[g]/32) * 32;
  911. break;
  912. case 8000:
  913. init_max_freq[g] = (init_max_freq[g]/64) * 64;
  914. break;
  915. }
  916. end_freq[g] = init_max_freq[g];
  917. end_cband[g] = (end_freq[g] + 31) / 32;
  918. slayer_size += (init_max_freq[g]+31)/32;
  919. }
  920. } else { /* if(signal_type == TRANSIENT_TYPE) */
  921. g = 0;
  922. init_max_freq[g] = base_band;
  923. if (init_max_freq[g] > swb_offset[g][maxSfb])
  924. init_max_freq[g] = swb_offset[g][maxSfb];
  925. slayer_size = (init_max_freq[g]+31)/32;
  926. end_freq[g] = init_max_freq[g];
  927. end_cband[g] = (end_freq[g] + 31) / 32;
  928. } /* if(signal_type == TRANSIENT_TYPE) ... else */
  929. /*****************************/
  930. /* calculate base_maxSfb */
  931. /*****************************/
  932. for (g = 0; g < num_window_groups; g++) {
  933. for (sfb=0; sfb<maxSfb; sfb++) {
  934. if (init_max_freq[g] <= swb_offset[g][sfb+1]) {
  935. base_maxSfb[g] = sfb+1;
  936. break;
  937. }
  938. }
  939. if (base_maxSfb[g] > maxSfb) base_maxSfb[g] = maxSfb;
  940. }
  941. /************************************************/
  942. /* calculate layer_max_cband and layer_max_freq */
  943. /************************************************/
  944. for(g = 0, layer=0; g < num_window_groups; g++)
  945. for (cband = 1; cband <= end_cband[g]; layer++, cband++) {
  946. layer_reg[layer] = g;
  947. }
  948. if(signal_type == TRANSIENT_TYPE) {
  949. layer = slayer_size;
  950. for(g = 0; g < num_window_groups; g++) {
  951. for (i=0; i<window_group_length[g]; i++) {
  952. layer_reg[layer] = g;
  953. layer++;
  954. }
  955. }
  956. for (layer=slayer_size+8; layer<(top_layer+slayer_size); layer++)
  957. layer_reg[layer] = layer_reg[layer-8];
  958. }
  959. else {
  960. for (layer=slayer_size; layer<(top_layer+slayer_size); layer++)
  961. layer_reg[layer] = 0;
  962. }
  963. for (layer = slayer_size; layer <(top_layer+slayer_size); layer++) {
  964. reg = layer_reg[layer];
  965. switch(sampling_rate) {
  966. /* zhanjie 0708 begin */
  967. case 96000:
  968. case 88200:
  969. end_freq[reg] += 16;
  970. break;
  971. case 64000:
  972. end_freq[reg] += 12;
  973. break;
  974. /* zhanjie 0708 end */
  975. case 48000: case 44100:
  976. end_freq[reg] += 8;
  977. if ((end_freq[reg]%32) != 0) end_freq[reg] += 4;
  978. break;
  979. case 32000: case 24000: case 22050:
  980. end_freq[reg] += 16;
  981. break;
  982. case 16000: case 12000: case 11025:
  983. end_freq[reg] += 32;
  984. break;
  985. default:
  986. end_freq[reg] += 64;
  987. break;
  988. }
  989. }
  990. /*****************************/
  991. /* calculate layer_max_qband */
  992. /*****************************/
  993. for (reg=0; reg < num_window_groups; reg++) {
  994. if (end_freq[reg] > swb_offset[reg][maxSfb] )
  995. end_freq[reg] = swb_offset[reg][maxSfb];
  996. end_cband[reg] = (end_freq[reg]+31)/32;
  997. for (sfb=0; sfb<maxSfb; sfb++) {
  998. if (end_freq[reg] <= swb_offset[reg][sfb+1]) {
  999. end_sfb[reg] = sfb+1;
  1000. break;
  1001. }
  1002. }
  1003. if (end_sfb[reg] > maxSfb)
  1004. end_sfb[reg] = maxSfb;
  1005. }
  1006. }
  1007. void get_base_maxSfb (
  1008. int signal_type,
  1009. int num_window_groups,
  1010. int window_group_length[],
  1011. int maxSfb,
  1012. short *swb_offset[],
  1013. int base_maxSfb[]
  1014. )
  1015. {
  1016. int g;
  1017. int sfb;
  1018. int base_band = get_base_band();
  1019. int init_max_freq[8];
  1020. /************************************************/
  1021. /* calculate slayer_size */
  1022. /************************************************/
  1023. if(signal_type == TRANSIENT_TYPE) {
  1024. for(g = 0; g < num_window_groups; g++) {
  1025. init_max_freq[g] = (base_band * window_group_length[g]) / 32 * 4;
  1026. switch(sampling_rate) {
  1027. case 96000:
  1028. case 88200:
  1029. case 64000: /* zhanjie 0708 */
  1030. case 48000: case 44100:
  1031. if((init_max_freq[g] % 32) >= 16)
  1032. init_max_freq[g] = (init_max_freq[g]/32) * 32 + 20;
  1033. else if((init_max_freq[g] % 32) >= 4)
  1034. init_max_freq[g] = (init_max_freq[g]/32) * 32 + 8;
  1035. break;
  1036. case 32000: case 24000: case 22050:
  1037. init_max_freq[g] = (init_max_freq[g]/16) * 16;
  1038. break;
  1039. case 16000: case 12000: case 11025:
  1040. init_max_freq[g] = (init_max_freq[g]/32) * 32;
  1041. break;
  1042. case 8000:
  1043. init_max_freq[g] = (init_max_freq[g]/64) * 64;
  1044. break;
  1045. }
  1046. }
  1047. } else { /* if(signal_type == TRANSIENT_TYPE) */
  1048. init_max_freq[0] = base_band;
  1049. } /* if(signal_type == TRANSIENT_TYPE) ... else */
  1050. /*****************************/
  1051. /* calculate layer_max_qband */
  1052. /*****************************/
  1053. for (g = 0; g < num_window_groups; g++) {
  1054. for (sfb=0; sfb<maxSfb; sfb++) {
  1055. if (init_max_freq[g] <= swb_offset[g][sfb+1]) {
  1056. base_maxSfb[g] = sfb+1;
  1057. break;
  1058. }
  1059. }
  1060. if (base_maxSfb[g] > maxSfb) base_maxSfb[g] = maxSfb;
  1061. }
  1062. }
  1063. int cband_si_esc[9] =
  1064. {-4, -3, -2, -1, 30, 31, 32, 33, 34};
  1065. /*--------------------------------------------------------------*/
  1066. /*************** coding band side infomation ****************/
  1067. /*--------------------------------------------------------------*/
  1068. int encode_cband_si(
  1069. int *model_index[][8],
  1070. int start_cband[8],
  1071. int end_cband[8],
  1072. int g,
  1073. int nch)
  1074. {
  1075. int ch;
  1076. int cband;
  1077. int m;
  1078. int si_cw_len;
  1079. int cband_model;
  1080. static int prevSi[2][8];
  1081. int t1,t2;
  1082. extern int siCodeMode;
  1083. si_cw_len = 0;
  1084. for(ch = 0; ch < nch; ch++) {
  1085. if(siCodeMode==0)
  1086. {
  1087. if(start_cband[g]==0 && g==0)
  1088. prevSi[ch][0] = 0;
  1089. for (cband = start_cband[g]; cband < end_cband[g]; cband++) {
  1090. t2 = model_index[ch][g][cband];
  1091. if(t2<-10000)
  1092. t2 = t2;
  1093. if((prevSi[ch][0]-t2+15)<0 || (prevSi[ch][0]-t2+15)>29 )
  1094. {
  1095. /* coding escape code */
  1096. si_cw_len += EncodeBSHCSi(30);
  1097. /* encoding 9 escape value with fixed 4 bit */
  1098. t1 = prevSi[ch][0]-t2+15;
  1099. m = 0;
  1100. while(cband_si_esc[m] != t1)
  1101. m ++;
  1102. if(m & 0x8)
  1103. si_cw_len += EncodeBSHCBin(1);
  1104. else
  1105. si_cw_len += EncodeBSHCBin(0);
  1106. if(m & 0x4)
  1107. si_cw_len += EncodeBSHCBin(1);
  1108. else
  1109. si_cw_len += EncodeBSHCBin(0);
  1110. if(m & 0x2)
  1111. si_cw_len += EncodeBSHCBin(1);
  1112. else
  1113. si_cw_len += EncodeBSHCBin(0);
  1114. if(m & 0x1)
  1115. si_cw_len += EncodeBSHCBin(1);
  1116. else
  1117. si_cw_len += EncodeBSHCBin(0);
  1118. }
  1119. else
  1120. si_cw_len += EncodeBSHCSi(prevSi[ch][0]-t2+15);
  1121. prevSi[ch][0] = t2;
  1122. }
  1123. }
  1124. else
  1125. {
  1126. if(start_cband[g]==0)
  1127. prevSi[ch][g] = 0;
  1128. for (cband = start_cband[g]; cband < end_cband[g]; cband++) {
  1129. t2 = model_index[ch][g][cband];
  1130. if((prevSi[ch][g]-t2+15)<0 || (prevSi[ch][g]-t2+15)>29 )
  1131. {
  1132. /* coding escape code */
  1133. si_cw_len += EncodeBSHCSi(30);
  1134. /* encoding 9 escape value with fixed 4 bit */
  1135. t1 = prevSi[ch][g]-t2+15;
  1136. m = 0;
  1137. while(cband_si_esc[m] != t1)
  1138. m ++;
  1139. if(m & 0x8)
  1140. si_cw_len += EncodeBSHCBin(1);
  1141. else
  1142. si_cw_len += EncodeBSHCBin(0);
  1143. if(m & 0x4)
  1144. si_cw_len += EncodeBSHCBin(1);
  1145. else
  1146. si_cw_len += EncodeBSHCBin(0);
  1147. if(m & 0x2)
  1148. si_cw_len += EncodeBSHCBin(1);
  1149. else
  1150. si_cw_len += EncodeBSHCBin(0);
  1151. if(m & 0x1)
  1152. si_cw_len += EncodeBSHCBin(1);
  1153. else
  1154. si_cw_len += EncodeBSHCBin(0);
  1155. }
  1156. else
  1157. si_cw_len += EncodeBSHCSi(prevSi[ch][g]-t2+15);
  1158. prevSi[ch][g] = t2;
  1159. }
  1160. }
  1161. }
  1162. return si_cw_len;
  1163. }
  1164. /*--------------------------------------------------------------*/
  1165. /*********** scalefactor band side infomation ****************/
  1166. /*--------------------------------------------------------------*/
  1167. int encode_scfband_si(
  1168. int *scf[][8],
  1169. int start_sfb[8],
  1170. int end_sfb[8],
  1171. int stereo_mode,
  1172. int *stereo_info[8],
  1173. int stereo_si_coded[8][MAX_SCFAC_BANDS],
  1174. int g,
  1175. int nch)
  1176. {
  1177. int ch;
  1178. int m;
  1179. int sfb;
  1180. int si_cw_len;
  1181. static int prevSf[2][8];
  1182. if(start_sfb[g]==0)
  1183. for(ch = 0; ch < nch; ch++)
  1184. prevSf[ch][g] = scf[ch][0][0];
  1185. si_cw_len = 0;
  1186. for(ch = 0; ch < nch; ch++) {
  1187. for(sfb = start_sfb[g]; sfb < end_sfb[g]; sfb++) {
  1188. if(stereo_si_coded[g][sfb] == 0) {
  1189. if(stereo_mode != 2) {
  1190. m = stereo_info[g][sfb];
  1191. if(stereo_mode == 1) {
  1192. EncodeBSHCBin(m);
  1193. si_cw_len++;
  1194. }
  1195. }
  1196. stereo_si_coded[g][sfb] = 1;
  1197. }
  1198. if(!(g==0 && sfb==0))
  1199. {
  1200. if((scf[ch][g][sfb]-prevSf[ch][g]+64)<0 || (scf[ch][g][sfb]-prevSf[ch][g]+64)>127)
  1201. {
  1202. si_cw_len += EncodeBSHCSf(64);
  1203. }
  1204. else
  1205. {
  1206. if ((stereo_mode == 2 || (stereo_mode == 1 && stereo_info[g][sfb] == 1)) && ch!=0)
  1207. si_cw_len += EncodeBSHCSf(scf[ch][g][sfb] - scf[0][g][sfb] + 64);
  1208. else
  1209. si_cw_len += EncodeBSHCSf(scf[ch][g][sfb]-prevSf[ch][g]+64);
  1210. prevSf[ch][g] = scf[ch][g][sfb];
  1211. }
  1212. }
  1213. }
  1214. }
  1215. return si_cw_len;
  1216. }
  1217. int cb_tab[16] = {0,1,2,3,4,3,3,5,6,3,3,5,3,5,5,5};
  1218. /*--------------------------------------------------------------*/
  1219. /*********** Bit-Sliced Spectral Data ****************/
  1220. /*--------------------------------------------------------------*/
  1221. int encode_spectra(
  1222. int *sample[][8],
  1223. int s_reg,
  1224. int e_reg,
  1225. int s_freq[8],
  1226. int e_freq[8],
  1227. int min_bpl,
  1228. int available_len,
  1229. int *model_index[][8],
  1230. int *cur_bpl[][8],
  1231. int *coded_samp_bit[][8],
  1232. int *sign_coded[][8],
  1233. int *enc_vec[][8],
  1234. int nch)
  1235. {
  1236. int ch, i, m, k, i4;
  1237. int maxbpl;
  1238. int bpl;
  1239. int cband;
  1240. int maxhalf;
  1241. int cw_len;
  1242. int reg;
  1243. int modelIdx;
  1244. int j;
  1245. int bit_mask[16] = { 0x0000, 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040,
  1246. 0x0080, 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000 };
  1247. maxbpl = 0;
  1248. for(ch = 0; ch < nch; ch++)
  1249. {
  1250. for(reg=s_reg; reg<e_reg; reg++)
  1251. for(i = s_freq[reg]; i < e_freq[reg]; i++)
  1252. if (maxbpl < cur_bpl[ch][reg][i])
  1253. maxbpl = cur_bpl[ch][reg][i];
  1254. }
  1255. cw_len = available_len;
  1256. for (bpl = maxbpl; bpl >= min_bpl; bpl--) {
  1257. if (cw_len <= 0 )
  1258. {
  1259. // printf("\nbpl:%d, maxbpl:%d ", bpl, maxbpl);
  1260. return (available_len-cw_len);
  1261. }
  1262. maxhalf = bit_mask[bpl];
  1263. for(reg = s_reg; reg < e_reg; reg++)
  1264. for (i = s_freq[reg]; i < e_freq[reg]; i+=4) {
  1265. for(ch = 0; ch < nch; ch++) {
  1266. if(model_index[ch][reg][i/32]==0)
  1267. continue;
  1268. if ( cur_bpl[ch][reg][i] < bpl )
  1269. continue;
  1270. if (coded_samp_bit[ch][reg][i]==0 || sign_coded[ch][reg][i]==1) {
  1271. cband = i/32;
  1272. i4 = i / 4;
  1273. if (i%4==0) {
  1274. enc_vec[ch][reg][i4] = 0;
  1275. }
  1276. for(j=0;j<4;j++)
  1277. {
  1278. if( abs(sample[ch][reg][i+j]) & maxhalf) m = 1;
  1279. else m = 0;
  1280. enc_vec[ch][reg][i4] = (enc_vec[ch][reg][i4]<<1) | m;
  1281. coded_samp_bit[ch][reg][i+j] =
  1282. (coded_samp_bit[ch][reg][i+j]<<1) | m;
  1283. cur_bpl[ch][reg][i+j]-=1;
  1284. }
  1285. /* model selection */
  1286. {
  1287. int t[4];
  1288. t[0] = (coded_samp_bit[ch][reg][i]&0x2)==0x2 ? 1:0;
  1289. t[1] = (coded_samp_bit[ch][reg][i+1]&0x2)==0x2 ? 1:0;
  1290. t[2] = (coded_samp_bit[ch][reg][i+2]&0x2)==0x2 ? 1:0;
  1291. t[3] = (coded_samp_bit[ch][reg][i+3]&0x2)==0x2 ? 1:0;
  1292. t[0] = (t[0]<<3) + (t[1]<<2) + (t[2]<<1) + (t[3]);
  1293. modelIdx = BSHCModelSelect(model_index[ch][reg][cband],bpl);
  1294. /* upper vector mapping, codebook reduction */
  1295. t[0] = cb_tab[t[0]];
  1296. k = EncodeBSHCQuant(modelIdx,t[0],enc_vec[ch][reg][i4]);
  1297. cw_len -= k;
  1298. if (coded_samp_bit[ch][reg][i] && sign_coded[ch][reg][i]==0)
  1299. {
  1300. if(sample[ch][reg][i] < 0)
  1301. EncodeBSHCBin(1);
  1302. else
  1303. EncodeBSHCBin(0);
  1304. cw_len--;
  1305. sign_coded[ch][reg][i] = 0x01;
  1306. }
  1307. if (coded_samp_bit[ch][reg][i+1] && sign_coded[ch][reg][i+1]==0)
  1308. {
  1309. if(sample[ch][reg][i+1] < 0)
  1310. EncodeBSHCBin(1);
  1311. else
  1312. EncodeBSHCBin(0);
  1313. cw_len--;
  1314. sign_coded[ch][reg][i+1] = 0x01;
  1315. }
  1316. if (coded_samp_bit[ch][reg][i+2] && sign_coded[ch][reg][i+2]==0)
  1317. {
  1318. if(sample[ch][reg][i+2] < 0)
  1319. EncodeBSHCBin(1);
  1320. else
  1321. EncodeBSHCBin(0);
  1322. cw_len--;
  1323. sign_coded[ch][reg][i+2] = 0x01;
  1324. }
  1325. if (coded_samp_bit[ch][reg][i+3] && sign_coded[ch][reg][i+3]==0)
  1326. {
  1327. if(sample[ch][reg][i+3] < 0)
  1328. EncodeBSHCBin(1);
  1329. else
  1330. EncodeBSHCBin(0);
  1331. cw_len--;
  1332. sign_coded[ch][reg][i+3] = 0x01;
  1333. }
  1334. }
  1335. }
  1336. if (cw_len <= 0 )
  1337. return (available_len-cw_len);
  1338. }
  1339. }
  1340. }
  1341. return (available_len-cw_len);
  1342. }