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

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /*
  2.  * MP3 huffman table selecting and bit counting
  3.  *
  4.  * Copyright (c) 1999 Takehiro TOMINAGA
  5.  *
  6.  * This library is free software; you can redistribute it and/or
  7.  * modify it under the terms of the GNU Library General Public
  8.  * License as published by the Free Software Foundation; either
  9.  * version 2 of the License, or (at your option) any later version.
  10.  *
  11.  * This library is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  14.  * Library General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU Library General Public
  17.  * License along with this library; if not, write to the
  18.  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  19.  * Boston, MA 02111-1307, USA.
  20.  */
  21. #include "util.h"
  22. #include "l3side.h"
  23. #include "tables.h"
  24. #include "quantize-pvt.h"
  25. struct
  26. {
  27.     unsigned region0_count;
  28.     unsigned region1_count;
  29. } subdv_table[ 23 ] =
  30. {
  31. {0, 0}, /* 0 bands */
  32. {0, 0}, /* 1 bands */
  33. {0, 0}, /* 2 bands */
  34. {0, 0}, /* 3 bands */
  35. {0, 0}, /* 4 bands */
  36. {0, 1}, /* 5 bands */
  37. {1, 1}, /* 6 bands */
  38. {1, 1}, /* 7 bands */
  39. {1, 2}, /* 8 bands */
  40. {2, 2}, /* 9 bands */
  41. {2, 3}, /* 10 bands */
  42. {2, 3}, /* 11 bands */
  43. {3, 4}, /* 12 bands */
  44. {3, 4}, /* 13 bands */
  45. {3, 4}, /* 14 bands */
  46. {4, 5}, /* 15 bands */
  47. {4, 5}, /* 16 bands */
  48. {4, 6}, /* 17 bands */
  49. {5, 6}, /* 18 bands */
  50. {5, 6}, /* 19 bands */
  51. {5, 7}, /* 20 bands */
  52. {6, 7}, /* 21 bands */
  53. {6, 7}, /* 22 bands */
  54. };
  55. /*************************************************************************/
  56. /*       ix_max  */
  57. /*************************************************************************/
  58.  static int ix_max(int *ix, int *end)
  59. {
  60.     int max = 0;
  61.     while (ix < end) {
  62. int x =  *ix++;
  63. if (max < x) 
  64.     max = x;
  65. x = *ix++;
  66. if (max < x) 
  67.     max = x;
  68.     }
  69.     return max;
  70. }
  71. /*************************************************************************/
  72. /*       count_bit  */
  73. /*************************************************************************/
  74. /*
  75.  Function: Count the number of bits necessary to code the subregion. 
  76. */
  77. static int cb_esc_buf[288];
  78. static int cb_esc_sign;
  79. static int *cb_esc_end;
  80. static const int huf_tbl_noESC[15] = {
  81.     1, 2, 5, 7, 7,10,10,13,13,13,13,13,13,13,13
  82. };
  83.  static int
  84. count_bit_ESC(int *ix, int *end, int t1, int t2, int *s)
  85. {
  86.     /* ESC-table is used */
  87.     int linbits1 = ht[t1].xlen;
  88.     int linbits2 = ht[t2].xlen;
  89.     int sum = 0;
  90.     int sum1 = 0;
  91.     int sum2 = 0;
  92.     while (ix < end) {
  93. int x = *ix++;
  94. int y = *ix++;
  95. if (x != 0) {
  96.     sum++;
  97.     if (x > 14) {
  98. x = 15;
  99. sum1 += linbits1;
  100. sum2 += linbits2;
  101.     }
  102.     x *= 16;
  103. }
  104. if (y != 0) {
  105.     sum++;
  106.     if (y > 14) {
  107. y = 15;
  108. sum1 += linbits1;
  109. sum2 += linbits2;
  110.     }
  111.     x += y;
  112. }
  113. sum1 += ht[16].hlen[x];
  114. sum2 += ht[24].hlen[x];
  115.     }
  116.     if (sum1 > sum2)  {
  117. sum1 = sum2;
  118. t1 = t2;
  119.     }
  120.     *s += sum + sum1;
  121.     return t1;
  122. }
  123.  static int
  124. count_bit_noESC(int *ix, int *end, unsigned int table) 
  125. {
  126.     /* No ESC-words */
  127.     int sum = 0, sign = 0;
  128.     unsigned char *hlen = ht[table].hlen;
  129.     int *p = cb_esc_buf;
  130.     do {
  131. int x = *ix++;
  132. int y = *ix++;
  133. if (x != 0) {
  134.     sign++;
  135.     x *= 16;
  136. }
  137. if (y != 0) {
  138.     sign++;
  139.     x += y;
  140. }
  141. *p++ = x;
  142. sum += hlen[x];
  143.     } while (ix < end);
  144.     cb_esc_sign = sign;
  145.     cb_esc_end = p;
  146.     return sum + sign;
  147. }
  148.  static int
  149. count_bit_noESC2(unsigned int table) 
  150. {
  151.     /* No ESC-words */
  152.     int sum = cb_esc_sign;
  153.     int *p = cb_esc_buf;
  154.     do {
  155. sum += ht[table].hlen[*p++];
  156.     } while (p < cb_esc_end);
  157.     return sum;
  158. }
  159.  static int
  160. count_bit_short_ESC(int *ix, int *end, int t1, int t2, int *s)
  161. {
  162.     /* ESC-table is used */
  163.     int linbits1 = ht[t1].xlen;
  164.     int linbits2 = ht[t2].xlen;
  165.     int sum = 0;
  166.     int sum1 = 0;
  167.     int sum2 = 0;
  168.     do {
  169. int i;
  170. for (i = 0; i < 3; i++) {
  171.     int y = *(ix + 3);
  172.     int x = *ix++;
  173.     if (x != 0) {
  174. sum++;
  175. if (x > 14) {
  176.     x = 15;
  177.     sum1 += linbits1;
  178.     sum2 += linbits2;
  179. }
  180. x *= 16;
  181.     }
  182.     if (y != 0) {
  183. sum++;
  184. if (y > 14) {
  185.     y = 15;
  186.     sum1 += linbits1;
  187.     sum2 += linbits2;
  188. }
  189. x += y;
  190.     }
  191.     sum1 += ht[16].hlen[x];
  192.     sum2 += ht[24].hlen[x];
  193. }
  194. ix += 3;
  195.     } while (ix < end);
  196.     if (sum1 > sum2)  {
  197. sum1 = sum2;
  198. t1 = t2;
  199.     }
  200.     *s += sum + sum1;
  201.     return t1;
  202. }
  203.  static int
  204. count_bit_short_noESC(int *ix, int *end, unsigned int table) 
  205. {
  206.     /* No ESC-words */
  207.     int sum = 0, sign = 0;
  208.     unsigned char *hlen = ht[table].hlen;
  209.     int *p = cb_esc_buf;
  210.     do {
  211. int i;
  212. for (i = 0; i < 3; i++) {
  213.     int y = *(ix + 3);
  214.     int x = *ix++;
  215.     if (x != 0) {
  216. sign++;
  217. x *= 16;
  218.     }
  219.     if (y != 0) {
  220. sign++;
  221. x += y;
  222.     }
  223.     *p++ = x;
  224.     sum += hlen[x];
  225. }
  226. ix += 3;
  227.     } while (ix < end);
  228.     cb_esc_sign = sign;
  229.     cb_esc_end = p;
  230.     return sum + sign;
  231. }
  232. /*************************************************************************/
  233. /*       new_choose table  */
  234. /*************************************************************************/
  235. /*
  236.   Choose the Huffman table that will encode ix[begin..end] with
  237.   the fewest bits.
  238.   Note: This code contains knowledge about the sizes and characteristics
  239.   of the Huffman tables as defined in the IS (Table B.7), and will not work
  240.   with any arbitrary tables.
  241. */
  242. static int choose_table(int *ix, int *end, int *s)
  243. {
  244.     int max;
  245.     int choice0, sum0;
  246.     int choice1, sum1;
  247.     max = ix_max(ix, end);
  248.     if (max > IXMAX_VAL) {
  249.         *s = 100000;
  250.         return -1;
  251.     }
  252.     if (max <= 15)  {
  253. if (max == 0) {
  254.     return 0;
  255. }
  256. /* try tables with no linbits */
  257. choice0 = huf_tbl_noESC[max - 1];
  258. sum0 = count_bit_noESC(ix, end, choice0);
  259. choice1 = choice0;
  260. switch (choice0) {
  261. case 7:
  262. case 10:
  263.     choice1++;
  264.     sum1 = count_bit_noESC2(choice1);
  265.     if (sum0 > sum1) {
  266. sum0 = sum1;
  267. choice0 = choice1;
  268.     }
  269.     /*fall*/
  270. case 2:
  271. case 5:
  272.     choice1++;
  273.     sum1 = count_bit_noESC2(choice1);
  274.     if (sum0 > sum1) {
  275. sum0 = sum1;
  276. choice0 = choice1;
  277.     }
  278.     break;
  279. case 13:
  280.     choice1 += 2;
  281.     sum1 = count_bit_noESC2(choice1);
  282.     if (sum0 > sum1) {
  283. sum0 = sum1;
  284. choice0 = choice1;
  285.     }
  286.     break;
  287. default:
  288.     break;
  289. }
  290. *s += sum0;
  291.     } else {
  292. /* try tables with linbits */
  293. max -= 15;
  294. for (choice1 = 24; choice1 < 32; choice1++) {
  295.     if ((int)ht[choice1].linmax >= max) {
  296. break;
  297.     }
  298. }
  299. for (choice0 = choice1 - 8; choice0 < 24; choice0++) {
  300.     if ((int)ht[choice0].linmax >= max) {
  301. break;
  302.     }
  303. }
  304. choice0 = count_bit_ESC(ix, end, choice0, choice1, s);
  305.     }
  306.     return choice0;
  307. }
  308. static int choose_table_short(int *ix, int *end, int * s)
  309. {
  310.     int max;
  311.     int choice0, sum0;
  312.     int choice1, sum1;
  313.     max = ix_max(ix, end);
  314.     if (max > IXMAX_VAL) {
  315.         *s = 100000;
  316.         return -1;
  317.     }
  318.     if (max <= 15)  {
  319. if (max == 0) {
  320.     return 0;
  321. }
  322. /* try tables with no linbits */
  323. choice0 = huf_tbl_noESC[max - 1];
  324. sum0 = count_bit_short_noESC(ix, end, choice0);
  325. choice1 = choice0;
  326. switch (choice0) {
  327. case 7:
  328. case 10:
  329.     choice1++;
  330.     sum1 = count_bit_noESC2(choice1);
  331.     if (sum0 > sum1) {
  332. sum0 = sum1;
  333. choice0 = choice1;
  334.     }
  335.     /*fall*/
  336. case 2:
  337. case 5:
  338.     choice1++;
  339.     sum1 = count_bit_noESC2(choice1);
  340.     if (sum0 > sum1) {
  341. sum0 = sum1;
  342. choice0 = choice1;
  343.     }
  344.     break;
  345. case 13:
  346.     choice1 += 2;
  347.     sum1 = count_bit_noESC2(choice1);
  348.     if (sum0 > sum1) {
  349. sum0 = sum1;
  350. choice0 = choice1;
  351.     }
  352.     break;
  353. default:
  354.     break;
  355. }
  356. *s += sum0;
  357.     } else {
  358. /* try tables with linbits */
  359. max -= 15;
  360. for (choice1 = 24; choice1 < 32; choice1++) {
  361.     if ((int)ht[choice1].linmax >= max) {
  362. break;
  363.     }
  364. }
  365. for (choice0 = choice1 - 8; choice0 < 24; choice0++) {
  366.     if ((int)ht[choice0].linmax >= max) {
  367. break;
  368. }
  369. }
  370. choice0 = count_bit_short_ESC(ix, end, choice0, choice1, s);
  371.     }
  372.     return choice0;
  373. }
  374. static int count_bits_long(int ix[576], gr_info *gi)
  375. {
  376.     int i, a1, a2;
  377.     int bits = 0;
  378.     i=576;
  379.     for (; i > 1; i -= 2) 
  380. if (ix[i - 1] | ix[i - 2])
  381.     break;
  382.     /* Determines the number of bits to encode the quadruples. */
  383.     gi->count1 = i;
  384.     a1 = 0;
  385.     for (; i > 3; i -= 4) {
  386. int p, v;
  387. if ((unsigned int)(ix[i-1] | ix[i-2] | ix[i-3] | ix[i-4]) > 1)
  388.     break;
  389. v = ix[i-1];
  390. p = v;
  391. bits += v;
  392. v = ix[i-2];
  393. if (v != 0) {
  394.     p += 2;
  395.     bits++;
  396. }
  397. v = ix[i-3];
  398. if (v != 0) {
  399.     p += 4;
  400.     bits++;
  401. }
  402. v = ix[i-4];
  403. if (v != 0) {
  404.     p += 8;
  405.     bits++;
  406. }
  407. a1 += ht[32].hlen[p];
  408.     }
  409.     a2 = gi->count1 - i;
  410.     if (a1 < a2) {
  411. bits += a1;
  412. gi->count1table_select = 0;
  413.     } else {
  414. bits += a2;
  415. gi->count1table_select = 1;
  416.     }
  417.     gi->count1bits = bits;
  418.     gi->big_values = i;
  419.     if (i == 0)
  420. return bits;
  421.     if (gi->block_type == NORM_TYPE) {
  422. int index;
  423. int scfb_anz = 0;
  424. while (scalefac_band.l[++scfb_anz] < i) 
  425.     ;
  426. index = subdv_table[scfb_anz].region0_count;
  427. while (scalefac_band.l[index + 1] > i)
  428.     index--;
  429. gi->region0_count = index;
  430. index = subdv_table[scfb_anz].region1_count;
  431. while (scalefac_band.l[index + gi->region0_count + 2] > i)
  432.     index--;
  433. gi->region1_count = index;
  434. a1 = scalefac_band.l[gi->region0_count + 1];
  435. a2 = scalefac_band.l[index + gi->region0_count + 2];
  436. gi->table_select[2] = choose_table(ix + a2, ix + i, &bits);
  437.     } else {
  438. gi->region0_count = 7;
  439. /*gi->region1_count = SBPSY_l - 7 - 1;*/
  440. gi->region1_count = SBMAX_l -1 - 7 - 1;
  441. a1 = scalefac_band.l[7 + 1];
  442. a2 = i;
  443. if (a1 > a2) {
  444.     a1 = a2;
  445. }
  446.     }
  447.     /* Count the number of bits necessary to code the bigvalues region. */
  448.     gi->table_select[0] = choose_table(ix, ix + a1, &bits);
  449.     gi->table_select[1] = choose_table(ix + a1, ix + a2, &bits);
  450.     return bits;
  451. }
  452. int count_bits(lame_global_flags *gfp,int *ix, FLOAT8 *xr, gr_info *cod_info)  
  453. {
  454.   int bits=0,i;
  455.   /* since quantize_xrpow uses table lookup, we need to check this first: */
  456.   FLOAT8 w = (IXMAX_VAL) / IPOW20(cod_info->global_gain);
  457.   for ( i = 0; i < 576; i++ )  {
  458.     if (xr[i] > w)
  459.       return 100000;
  460.   }
  461.   if (gfp->quantization) 
  462.     quantize_xrpow(xr, ix, cod_info);
  463.   else
  464.     quantize_xrpow_ISO(xr, ix, cod_info);
  465.   if (cod_info->block_type==SHORT_TYPE) {
  466.     cod_info->table_select[0] = choose_table_short(ix, ix + 36, &bits);
  467.     cod_info->table_select[1] = choose_table_short(ix + 36, ix + 576, &bits);
  468.     cod_info->big_values = 288;
  469.   }else{
  470.     bits=count_bits_long(ix, cod_info);
  471.     cod_info->count1 = (cod_info->count1 - cod_info->big_values) / 4;
  472.     cod_info->big_values /= 2;
  473.   }
  474.   return bits;
  475. }
  476. void best_huffman_divide(int gr, int ch, gr_info *gi, int *ix)
  477. {
  478.     int *bits, r0, r1, a1, a2, bigv;
  479.     int r1_bits;
  480.     int r3_bits[7 + 15 + 2 + 1];
  481.     int r3_tbl[7 + 15 + 2 + 1];
  482.     gr_info cod_info;
  483.     memcpy(&cod_info, gi, sizeof(gr_info));
  484.     bigv = cod_info.big_values * 2;
  485.     bits = (int *) &cod_info.part2_3_length;
  486.     for (r0 = 2; r0 < SBMAX_l + 1; r0++) {
  487. a2 = scalefac_band.l[r0];
  488. if (a2 > bigv)
  489.     break;
  490. r3_bits[r0] = cod_info.count1bits + cod_info.part2_length;
  491. r3_tbl[r0] = choose_table(ix + a2, ix + bigv, &r3_bits[r0]);
  492.     }
  493.     for (; r0 <= 7 + 15 + 2; r0++) {
  494. r3_bits[r0] = 100000;
  495.     }
  496.     for (r0 = 0; r0 < 16; r0++) {
  497. a1 = scalefac_band.l[r0 + 1];
  498. if (a1 > bigv)
  499.     break;
  500. cod_info.region0_count = r0;
  501. r1_bits = 0;
  502. cod_info.table_select[0] = choose_table(ix, ix + a1, &r1_bits);
  503. if ((int)gi->part2_3_length < r1_bits)
  504.     break;
  505. for (r1 = 0; r1 < 8; r1++) {
  506.     *bits = r1_bits + r3_bits[r0 + r1 + 2];
  507.     if ((int)gi->part2_3_length < *bits)
  508. continue;
  509.     a2 = scalefac_band.l[r0 + r1 + 2];
  510.     cod_info.table_select[1] = choose_table(ix + a1, ix + a2, bits);
  511.     if ((int)gi->part2_3_length < *bits)
  512. continue;
  513.     cod_info.region1_count = r1;
  514.     cod_info.table_select[2] = r3_tbl[r0 + r1 + 2];
  515.     memcpy(gi, &cod_info, sizeof(gr_info));
  516. }
  517.     }
  518. }
  519. static void
  520. scfsi_calc(int ch,
  521.    III_side_info_t *l3_side,
  522.    III_scalefac_t scalefac[2][2])
  523. {
  524.     int i, s1, s2, c1, c2;
  525.     int sfb;
  526.     gr_info *gi = &l3_side->gr[1].ch[ch].tt;
  527.     static const int scfsi_band[5] = { 0, 6, 11, 16, 21 };
  528.     static const int slen1_n[16] = { 0, 1, 1, 1, 8, 2, 2, 2, 4, 4, 4, 8, 8, 8,16,16 };
  529.     static const int slen2_n[16] = { 0, 2, 4, 8, 1, 2, 4, 8, 2, 4, 8, 2, 4, 8, 4, 8 };
  530.     static const int slen1_tab[16] = { 0, 0, 0, 0, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4 };
  531.     static const int slen2_tab[16] = { 0, 1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 3 };
  532.     for (i = 0; i < 4; i++) 
  533. l3_side->scfsi[ch][i] = 0;
  534.     for (i = 0; i < (int)(sizeof(scfsi_band) / sizeof(int)) - 1; i++) {
  535. for (sfb = scfsi_band[i]; sfb < scfsi_band[i + 1]; sfb++) {
  536.     if (scalefac[0][ch].l[sfb] != scalefac[1][ch].l[sfb])
  537. break;
  538. }
  539. if (sfb == scfsi_band[i + 1]) {
  540.     for (sfb = scfsi_band[i]; sfb < scfsi_band[i + 1]; sfb++) {
  541. scalefac[1][ch].l[sfb] = -1;
  542.     }
  543.     l3_side->scfsi[ch][i] = 1;
  544. }
  545.     }
  546.     s1 = c1 = 0;
  547.     for (sfb = 0; sfb < 11; sfb++) {
  548. if (scalefac[1][ch].l[sfb] < 0)
  549.     continue;
  550. c1++;
  551. if (s1 < scalefac[1][ch].l[sfb])
  552.     s1 = scalefac[1][ch].l[sfb];
  553.     }
  554.     s2 = c2 = 0;
  555.     for (; sfb < SBPSY_l; sfb++) {
  556. if (scalefac[1][ch].l[sfb] < 0)
  557.     continue;
  558. c2++;
  559. if (s2 < scalefac[1][ch].l[sfb])
  560.     s2 = scalefac[1][ch].l[sfb];
  561.     }
  562.     for (i = 0; i < 16; i++) {
  563. if (s1 < slen1_n[i] && s2 < slen2_n[i]) {
  564.     int c = slen1_tab[i] * c1 + slen2_tab[i] * c2;
  565.     if ((int)gi->part2_length > c) {
  566. gi->part2_length = c;
  567. gi->scalefac_compress = i;
  568.     }
  569. }
  570.     }
  571. }
  572. void best_scalefac_store(lame_global_flags *gfp,int gr, int ch,
  573.  int l3_enc[2][2][576],
  574.  III_side_info_t *l3_side,
  575.  III_scalefac_t scalefac[2][2])
  576. {
  577.     /* use scalefac_scale if we can */
  578.     gr_info *gi = &l3_side->gr[gr].ch[ch].tt;
  579.     /* remove scalefacs from bands with ix=0.  This idea comes
  580.      * from the AAC ISO docs.  added mt 3/00 */
  581.     int sfb,i,l,start,end;
  582.     /* check if l3_enc=0 */
  583.     for ( sfb = 0; sfb < gi->sfb_lmax; sfb++ ) {
  584.       if (scalefac[gr][ch].l[sfb]>0) { 
  585. start = scalefac_band.l[ sfb ];
  586. end   = scalefac_band.l[ sfb+1 ];
  587. for ( l = start; l < end; l++ ) if (l3_enc[gr][ch][l]!=0) break;
  588. if (l==end) scalefac[gr][ch].l[sfb]=0;
  589.       }
  590.     }
  591.     for ( i = 0; i < 3; i++ ) {
  592.       for ( sfb = gi->sfb_smax; sfb < SBPSY_s; sfb++ ) {
  593. if (scalefac[gr][ch].s[sfb][i]>0) {
  594.   start = scalefac_band.s[ sfb ];
  595.   end   = scalefac_band.s[ sfb+1 ];
  596.   for ( l = start; l < end; l++ ) 
  597.     if (l3_enc[gr][ch][3*l+i]!=0) break;
  598.   if (l==end) scalefac[gr][ch].s[sfb][i]=0;
  599.         }
  600.       }
  601.     }
  602.     gi->part2_3_length -= gi->part2_length;
  603.     if (!gi->scalefac_scale && !gi->preflag) {
  604. u_int sfb;
  605. int b, s = 0;
  606. for (sfb = 0; sfb < gi->sfb_lmax; sfb++) {
  607.     s |= scalefac[gr][ch].l[sfb];
  608. }
  609. for (sfb = gi->sfb_smax; sfb < SBPSY_s; sfb++) {
  610.     for (b = 0; b < 3; b++) {
  611. s |= scalefac[gr][ch].s[sfb][b];
  612.     }
  613. }
  614. if (!(s & 1) && s != 0) {
  615.     for (sfb = 0; sfb < gi->sfb_lmax; sfb++) {
  616. scalefac[gr][ch].l[sfb] /= 2;
  617.     }
  618.     for (sfb = gi->sfb_smax; sfb < SBPSY_s; sfb++) {
  619. for (b = 0; b < 3; b++) {
  620.     scalefac[gr][ch].s[sfb][b] /= 2;
  621. }
  622.     }
  623.     gi->scalefac_scale = 1;
  624.     gi->part2_length = 99999999;
  625.     if (gfp->mode_gr == 2) {
  626.         scale_bitcount(&scalefac[gr][ch], gi);
  627.     } else {
  628. scale_bitcount_lsf(&scalefac[gr][ch], gi);
  629.     }
  630. }
  631.     }
  632.     if (gfp->mode_gr == 2 && gr == 1
  633. && l3_side->gr[0].ch[ch].tt.block_type != SHORT_TYPE
  634. && l3_side->gr[1].ch[ch].tt.block_type != SHORT_TYPE
  635. && l3_side->gr[0].ch[ch].tt.scalefac_scale
  636. == l3_side->gr[1].ch[ch].tt.scalefac_scale
  637. && l3_side->gr[0].ch[ch].tt.preflag
  638. == l3_side->gr[1].ch[ch].tt.preflag) {
  639.        scfsi_calc(ch, l3_side, scalefac);
  640.     }
  641.     gi->part2_3_length += gi->part2_length;
  642. }