]> git.lizzy.rs Git - plan9front.git/blob - sys/src/games/mp3enc/takehiro.c
9bootfat: rename open() to fileinit and make it static as its really a internal funct...
[plan9front.git] / sys / src / games / mp3enc / takehiro.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
22 /* $Id: takehiro.c,v 1.18 2001/02/27 09:59:18 robert Exp $ */
23
24 #ifdef HAVE_CONFIG_H
25 # include <config.h>
26 #endif
27
28 #include <assert.h>
29 #include "util.h"
30 #include "l3side.h"
31 #include "tables.h"
32 #include "quantize_pvt.h"
33
34 #ifdef WITH_DMALLOC
35 #include <dmalloc.h>
36 #endif
37
38 static const struct
39 {
40     const int region0_count;
41     const int region1_count;
42 } subdv_table[ 23 ] =
43 {
44 {0, 0}, /* 0 bands */
45 {0, 0}, /* 1 bands */
46 {0, 0}, /* 2 bands */
47 {0, 0}, /* 3 bands */
48 {0, 0}, /* 4 bands */
49 {0, 1}, /* 5 bands */
50 {1, 1}, /* 6 bands */
51 {1, 1}, /* 7 bands */
52 {1, 2}, /* 8 bands */
53 {2, 2}, /* 9 bands */
54 {2, 3}, /* 10 bands */
55 {2, 3}, /* 11 bands */
56 {3, 4}, /* 12 bands */
57 {3, 4}, /* 13 bands */
58 {3, 4}, /* 14 bands */
59 {4, 5}, /* 15 bands */
60 {4, 5}, /* 16 bands */
61 {4, 6}, /* 17 bands */
62 {5, 6}, /* 18 bands */
63 {5, 6}, /* 19 bands */
64 {5, 7}, /* 20 bands */
65 {6, 7}, /* 21 bands */
66 {6, 7}, /* 22 bands */
67 };
68
69
70
71
72 /*************************************************************************/
73 /*            ix_max                                                     */
74 /*************************************************************************/
75
76 int 
77 ix_max(const int *ix, const int *end)
78 {
79     int max1 = 0, max2 = 0;
80
81     do {
82         int x1 = *ix++;
83         int x2 = *ix++;
84         if (max1 < x1) 
85             max1 = x1;
86
87         if (max2 < x2) 
88             max2 = x2;
89     } while (ix < end);
90     if (max1 < max2) 
91         max1 = max2;
92     return max1;
93 }
94
95 int
96 count_bit_ESC( 
97     const int *       ix, 
98     const int * const end, 
99           int         t1,
100     const int         t2,
101           int * const s )
102 {
103     /* ESC-table is used */
104     int linbits = ht[t1].xlen * 65536 + ht[t2].xlen;
105     int sum = 0, sum2;
106
107     do {
108         int x = *ix++;
109         int y = *ix++;
110
111         if (x != 0) {
112             if (x > 14) {
113                 x = 15;
114                 sum += linbits;
115             }
116             x *= 16;
117         }
118
119         if (y != 0) {
120             if (y > 14) {
121                 y = 15;
122                 sum += linbits;
123             }
124             x += y;
125         }
126
127         sum += largetbl[x];
128     } while (ix < end);
129
130     sum2 = sum & 0xffff;
131     sum >>= 16;
132
133     if (sum > sum2) {
134         sum = sum2;
135         t1 = t2;
136     }
137
138     *s += sum;
139     return t1;
140 }
141
142
143 inline static int
144 count_bit_noESC(const int * ix, const int * const end, int * const s)
145 {
146     /* No ESC-words */
147     int sum1 = 0;
148     const char *hlen1 = ht[1].hlen;
149
150     do {
151         int x = ix[0] * 2 + ix[1];
152         ix += 2;
153         sum1 += hlen1[x];
154     } while (ix < end);
155
156     *s += sum1;
157     return 1;
158 }
159
160
161
162 inline static int
163 count_bit_noESC_from2(
164     const int *       ix, 
165     const int * const end,
166           int         t1,
167           int * const s )
168 {
169     /* No ESC-words */
170     unsigned int sum = 0, sum2;
171     const int xlen = ht[t1].xlen;
172     const unsigned int *hlen;
173     if (t1 == 2)
174         hlen = table23;
175     else
176         hlen = table56;
177
178     do {
179         int x = ix[0] * xlen + ix[1];
180         ix += 2;
181         sum += hlen[x];
182     } while (ix < end);
183
184     sum2 = sum & 0xffff;
185     sum >>= 16;
186
187     if (sum > sum2) {
188         sum = sum2;
189         t1++;
190     }
191
192     *s += sum;
193     return t1;
194 }
195
196
197 inline static int
198 count_bit_noESC_from3(
199     const int *       ix, 
200     const int * const end,
201           int         t1,
202           int * const s )
203 {
204     /* No ESC-words */
205     int sum1 = 0;
206     int sum2 = 0;
207     int sum3 = 0;
208     const int xlen = ht[t1].xlen;
209     const char *hlen1 = ht[t1].hlen;
210     const char *hlen2 = ht[t1+1].hlen;
211     const char *hlen3 = ht[t1+2].hlen;
212     int t;
213
214     do {
215         int x = ix[0] * xlen + ix[1];
216         ix += 2;
217         sum1 += hlen1[x];
218         sum2 += hlen2[x];
219         sum3 += hlen3[x];
220     } while (ix < end);
221
222     t = t1;
223     if (sum1 > sum2) {
224         sum1 = sum2;
225         t++;
226     }
227     if (sum1 > sum3) {
228         sum1 = sum3;
229         t = t1+2;
230     }
231     *s += sum1;
232
233     return t;
234 }
235
236
237 /*************************************************************************/
238 /*            choose table                                               */
239 /*************************************************************************/
240
241 /*
242   Choose the Huffman table that will encode ix[begin..end] with
243   the fewest bits.
244
245   Note: This code contains knowledge about the sizes and characteristics
246   of the Huffman tables as defined in the IS (Table B.7), and will not work
247   with any arbitrary tables.
248 */
249
250 static int
251 choose_table_nonMMX(
252     const int *       ix, 
253     const int * const end,
254           int * const s )
255 {
256     int max;
257     int choice, choice2;
258     static const int huf_tbl_noESC[] = {
259         1, 2, 5, 7, 7,10,10,13,13,13,13,13,13,13,13 /* char not enough ? */
260     };
261
262     max = ix_max(ix, end);
263
264     switch (max) {
265     case 0:
266         return max;
267
268     case 1:
269         return count_bit_noESC(ix, end, s);
270
271     case 2:
272     case 3:
273         return count_bit_noESC_from2(ix, end, huf_tbl_noESC[max - 1], s);
274
275     case 4: case 5: case 6:
276     case 7: case 8: case 9:
277     case 10: case 11: case 12:
278     case 13: case 14: case 15:
279         return count_bit_noESC_from3(ix, end, huf_tbl_noESC[max - 1], s);
280
281     default:
282         /* try tables with linbits */
283         if (max > IXMAX_VAL) {
284             *s = LARGE_BITS;
285             return -1;
286         }
287         max -= 15;
288         for (choice2 = 24; choice2 < 32; choice2++) {
289             if (ht[choice2].linmax >= max) {
290                 break;
291             }
292         }
293
294         for (choice = choice2 - 8; choice < 24; choice++) {
295             if (ht[choice].linmax >= max) {
296                 break;
297             }
298         }
299         return count_bit_ESC(ix, end, choice, choice2, s);
300     }
301 }
302
303
304
305 /*************************************************************************/
306 /*            count_bit                                                  */
307 /*************************************************************************/
308
309 /*
310  Function: Count the number of bits necessary to code the subregion. 
311 */
312
313
314 int count_bits_long(lame_internal_flags * const gfc, const int ix[576], gr_info * const gi)
315 {
316     int i, a1, a2;
317     int bits = 0;
318
319     i=576;
320     /* Determine count1 region */
321     for (; i > 1; i -= 2) 
322         if (ix[i - 1] | ix[i - 2])
323             break;
324     gi->count1 = i;
325
326     /* Determines the number of bits to encode the quadruples. */
327     a1 = a2 = 0;
328     for (; i > 3; i -= 4) {
329         int p;
330         /* hack to check if all values <= 1 */
331         if ((unsigned int)(ix[i-1] | ix[i-2] | ix[i-3] | ix[i-4]) > 1)
332             break;
333
334         p = ((ix[i-4] * 2 + ix[i-3]) * 2 + ix[i-2]) * 2 + ix[i-1];
335         a1 += t32l[p];
336         a2 += t33l[p];
337     }
338
339     bits = a1;
340     gi->count1table_select = 0;
341     if (a1 > a2) {
342         bits = a2;
343         gi->count1table_select = 1;
344     }
345
346     gi->count1bits = bits;
347     gi->big_values = i;
348     if (i == 0)
349         return bits;
350
351     if (gi->block_type == SHORT_TYPE) {
352       a1=3*gfc->scalefac_band.s[3];
353       if (a1 > gi->big_values) a1 = gi->big_values;
354       a2 = gi->big_values;
355
356     }else if (gi->block_type == NORM_TYPE) {
357         assert(i <= 576); /* bv_scf has 576 entries (0..575) */
358         a1 = gi->region0_count = gfc->bv_scf[i-2];
359         a2 = gi->region1_count = gfc->bv_scf[i-1];
360
361 //      assert(a1+a2+2 < SBPSY_l);
362         a2 = gfc->scalefac_band.l[a1 + a2 + 2];
363         a1 = gfc->scalefac_band.l[a1 + 1];
364         if (a2 < i)
365           gi->table_select[2] = gfc->choose_table(ix + a2, ix + i, &bits);
366
367     } else {
368         gi->region0_count = 7;
369         /*gi->region1_count = SBPSY_l - 7 - 1;*/
370         gi->region1_count = SBMAX_l -1 - 7 - 1;
371         a1 = gfc->scalefac_band.l[7 + 1];
372         a2 = i;
373         if (a1 > a2) {
374             a1 = a2;
375         }
376     }
377
378
379     /* have to allow for the case when bigvalues < region0 < region1 */
380     /* (and region0, region1 are ignored) */
381     a1 = Min(a1,i);
382     a2 = Min(a2,i);
383     
384 //      assert( a1 >= 0 );
385 //      assert( a2 >= 0 );
386
387     /* Count the number of bits necessary to code the bigvalues region. */
388     if (0 < a1)
389       gi->table_select[0] = gfc->choose_table(ix, ix + a1, &bits);
390     if (a1 < a2)
391       gi->table_select[1] = gfc->choose_table(ix + a1, ix + a2, &bits);
392     return bits;
393 }
394
395
396
397
398
399 int count_bits(
400           lame_internal_flags * const gfc, 
401           int     * const ix,
402     const FLOAT8  * const xr,
403           gr_info * const cod_info)  
404 {
405   int bits=0,i;
406   /* since quantize_xrpow uses table lookup, we need to check this first: */
407   FLOAT8 w = (IXMAX_VAL) / IPOW20(cod_info->global_gain);
408   for ( i = 0; i < 576; i++ )  {
409     if (xr[i] > w)
410       return LARGE_BITS;
411   }
412
413   if (gfc->quantization) 
414     quantize_xrpow(xr, ix, IPOW20(cod_info->global_gain));
415   else
416     quantize_xrpow_ISO(xr, ix, IPOW20(cod_info->global_gain));
417
418   bits=count_bits_long(gfc, ix, cod_info);
419
420   return bits;
421 }
422
423 /***********************************************************************
424   re-calculate the best scalefac_compress using scfsi
425   the saved bits are kept in the bit reservoir.
426  **********************************************************************/
427
428
429 inline static void
430 recalc_divide_init(
431     const lame_internal_flags * const gfc,
432           gr_info         cod_info,
433           int     * const ix,
434           int             r01_bits[],
435           int             r01_div [],
436           int             r0_tbl  [],
437           int             r1_tbl  [] )
438 {
439     int r0, r1, bigv, r0t, r1t, bits;
440
441     bigv = cod_info.big_values;
442
443     for (r0 = 0; r0 <= 7 + 15; r0++) {
444         r01_bits[r0] = LARGE_BITS;
445     }
446
447     for (r0 = 0; r0 < 16; r0++) {
448         int a1 = gfc->scalefac_band.l[r0 + 1], r0bits;
449         if (a1 >= bigv)
450             break;
451         r0bits = cod_info.part2_length;
452         r0t = gfc->choose_table(ix, ix + a1, &r0bits);
453
454         for (r1 = 0; r1 < 8; r1++) {
455             int a2 = gfc->scalefac_band.l[r0 + r1 + 2];
456             if (a2 >= bigv)
457                 break;
458
459             bits = r0bits;
460             r1t = gfc->choose_table(ix + a1, ix + a2, &bits);
461             if (r01_bits[r0 + r1] > bits) {
462                 r01_bits[r0 + r1] = bits;
463                 r01_div[r0 + r1] = r0;
464                 r0_tbl[r0 + r1] = r0t;
465                 r1_tbl[r0 + r1] = r1t;
466             }
467         }
468     }
469 }
470
471 inline static void
472 recalc_divide_sub(
473     const lame_internal_flags * const gfc,
474     const gr_info         cod_info2,
475           gr_info * const gi,
476     const int     * const ix,
477     const int             r01_bits[],
478     const int             r01_div [],
479     const int             r0_tbl  [],
480     const int             r1_tbl  [] )
481 {
482     int bits, r2, a2, bigv, r2t;
483
484     bigv = cod_info2.big_values;
485
486     for (r2 = 2; r2 < SBMAX_l + 1; r2++) {
487         a2 = gfc->scalefac_band.l[r2];
488         if (a2 >= bigv) 
489             break;
490
491         bits = r01_bits[r2 - 2] + cod_info2.count1bits;
492         if (gi->part2_3_length <= bits)
493             break;
494
495         r2t = gfc->choose_table(ix + a2, ix + bigv, &bits);
496         if (gi->part2_3_length <= bits)
497             continue;
498
499         memcpy(gi, &cod_info2, sizeof(gr_info));
500         gi->part2_3_length = bits;
501         gi->region0_count = r01_div[r2 - 2];
502         gi->region1_count = r2 - 2 - r01_div[r2 - 2];
503         gi->table_select[0] = r0_tbl[r2 - 2];
504         gi->table_select[1] = r1_tbl[r2 - 2];
505         gi->table_select[2] = r2t;
506     }
507 }
508
509
510
511
512 void best_huffman_divide(
513     const lame_internal_flags * const gfc,
514     const int             gr, 
515     const int             ch,
516           gr_info * const gi,
517           int     * const ix )
518 {
519     int i, a1, a2;
520     gr_info cod_info2;
521
522     int r01_bits[7 + 15 + 1];
523     int r01_div[7 + 15 + 1];
524     int r0_tbl[7 + 15 + 1];
525     int r1_tbl[7 + 15 + 1];
526
527
528     /* SHORT BLOCK stuff fails for MPEG2 */ 
529     if (gi->block_type == SHORT_TYPE && gfc->mode_gr==1) 
530           return;
531
532
533     memcpy(&cod_info2, gi, sizeof(gr_info));
534     if (gi->block_type == NORM_TYPE) {
535         recalc_divide_init(gfc, cod_info2, ix, r01_bits,r01_div,r0_tbl,r1_tbl);
536         recalc_divide_sub(gfc, cod_info2, gi, ix, r01_bits,r01_div,r0_tbl,r1_tbl);
537     }
538
539     i = cod_info2.big_values;
540     if (i == 0 || (unsigned int)(ix[i-2] | ix[i-1]) > 1)
541         return;
542
543     i = gi->count1 + 2;
544     if (i > 576)
545         return;
546
547     /* Determines the number of bits to encode the quadruples. */
548     memcpy(&cod_info2, gi, sizeof(gr_info));
549     cod_info2.count1 = i;
550     a1 = a2 = 0;
551
552     assert(i <= 576);
553     
554     for (; i > cod_info2.big_values; i -= 4) {
555         int p = ((ix[i-4] * 2 + ix[i-3]) * 2 + ix[i-2]) * 2 + ix[i-1];
556         a1 += t32l[p];
557         a2 += t33l[p];
558     }
559     cod_info2.big_values = i;
560
561     cod_info2.count1table_select = 0;
562     if (a1 > a2) {
563         a1 = a2;
564         cod_info2.count1table_select = 1;
565     }
566
567     cod_info2.count1bits = a1;
568     cod_info2.part2_3_length = a1 + cod_info2.part2_length;
569
570     if (cod_info2.block_type == NORM_TYPE)
571         recalc_divide_sub(gfc, cod_info2, gi, ix, r01_bits,r01_div,r0_tbl,r1_tbl);
572     else {
573         /* Count the number of bits necessary to code the bigvalues region. */
574         a1 = gfc->scalefac_band.l[7 + 1];
575         if (a1 > i) {
576             a1 = i;
577         }
578         if (a1 > 0)
579           cod_info2.table_select[0] =
580             gfc->choose_table(ix, ix + a1, (int *)&cod_info2.part2_3_length);
581         if (i > a1)
582           cod_info2.table_select[1] =
583             gfc->choose_table(ix + a1, ix + i, (int *)&cod_info2.part2_3_length);
584         if (gi->part2_3_length > cod_info2.part2_3_length)
585             memcpy(gi, &cod_info2, sizeof(gr_info));
586     }
587 }
588
589 static const int slen1_n[16] = { 1, 1, 1, 1, 8, 2, 2, 2, 4, 4, 4, 8, 8, 8,16,16 };
590 static const int slen2_n[16] = { 1, 2, 4, 8, 1, 2, 4, 8, 2, 4, 8, 2, 4, 8, 4, 8 };
591
592 void
593 scfsi_calc(int ch,
594            III_side_info_t *l3_side,
595            III_scalefac_t scalefac[2][2])
596 {
597     int i, s1, s2, c1, c2;
598     int sfb;
599     gr_info *gi = &l3_side->gr[1].ch[ch].tt;
600
601     static const int scfsi_band[5] = { 0, 6, 11, 16, 21 };
602 #if 0
603     static const int slen1_n[16] = { 0, 1, 1, 1, 8, 2, 2, 2, 4, 4, 4, 8, 8, 8,16,16 };
604     static const int slen2_n[16] = { 0, 2, 4, 8, 1, 2, 4, 8, 2, 4, 8, 2, 4, 8, 4, 8 };
605 #endif
606
607     for (i = 0; i < 4; i++) 
608         l3_side->scfsi[ch][i] = 0;
609
610     for (i = 0; i < (sizeof(scfsi_band) / sizeof(int)) - 1; i++) {
611         for (sfb = scfsi_band[i]; sfb < scfsi_band[i + 1]; sfb++) {
612             if (scalefac[0][ch].l[sfb] != scalefac[1][ch].l[sfb])
613                 break;
614         }
615         if (sfb == scfsi_band[i + 1]) {
616             for (sfb = scfsi_band[i]; sfb < scfsi_band[i + 1]; sfb++) {
617                 scalefac[1][ch].l[sfb] = -1;
618             }
619             l3_side->scfsi[ch][i] = 1;
620         }
621     }
622
623     s1 = c1 = 0;
624     for (sfb = 0; sfb < 11; sfb++) {
625         if (scalefac[1][ch].l[sfb] < 0)
626             continue;
627         c1++;
628         if (s1 < scalefac[1][ch].l[sfb])
629             s1 = scalefac[1][ch].l[sfb];
630     }
631
632     s2 = c2 = 0;
633     for (; sfb < SBPSY_l; sfb++) {
634         if (scalefac[1][ch].l[sfb] < 0)
635             continue;
636         c2++;
637         if (s2 < scalefac[1][ch].l[sfb])
638             s2 = scalefac[1][ch].l[sfb];
639     }
640
641     for (i = 0; i < 16; i++) {
642         if (s1 < slen1_n[i] && s2 < slen2_n[i]) {
643             int c = slen1_tab[i] * c1 + slen2_tab[i] * c2;
644             if (gi->part2_length > c) {
645                 gi->part2_length = c;
646                 gi->scalefac_compress = i;
647             }
648         }
649     }
650 }
651
652 /*
653 Find the optimal way to store the scalefactors.
654 Only call this routine after final scalefactors have been
655 chosen and the channel/granule will not be re-encoded.
656  */
657 void best_scalefac_store(
658     const lame_internal_flags *gfc,
659     const int             gr,
660     const int             ch,
661           int             l3_enc[2][2][576],
662           III_side_info_t * const l3_side,
663           III_scalefac_t          scalefac[2][2] )
664 {
665
666     /* use scalefac_scale if we can */
667     gr_info *gi = &l3_side->gr[gr].ch[ch].tt;
668     int sfb,i,j,j2,l,start,end;
669
670     /* remove scalefacs from bands with ix=0.  This idea comes
671      * from the AAC ISO docs.  added mt 3/00 */
672     /* check if l3_enc=0 */
673     for ( sfb = 0; sfb < gi->sfb_lmax; sfb++ ) {
674       if (scalefac[gr][ch].l[sfb]>0) { 
675         start = gfc->scalefac_band.l[ sfb ];
676         end   = gfc->scalefac_band.l[ sfb+1 ];
677         for ( l = start; l < end; l++ ) if (l3_enc[gr][ch][l]!=0) break;
678         if (l==end) scalefac[gr][ch].l[sfb]=0;
679       }
680     }
681     for ( j=0, sfb = gi->sfb_smin; sfb < SBPSY_s; sfb++ ) {
682         start = gfc->scalefac_band.s[ sfb ];
683         end   = gfc->scalefac_band.s[ sfb+1 ];
684         for ( i = 0; i < 3; i++ ) {
685           if (scalefac[gr][ch].s[sfb][i]>0) {
686             j2 = j;
687             for ( l = start; l < end; l++ ) 
688               if (l3_enc[gr][ch][j2++ /*3*l+i*/]!=0) break;
689             if (l==end) scalefac[gr][ch].s[sfb][i]=0;
690           }
691           j += end-start;
692         }
693     }
694
695
696     gi->part2_3_length -= gi->part2_length;
697     if (!gi->scalefac_scale && !gi->preflag) {
698         int b, s = 0;
699         for (sfb = 0; sfb < gi->sfb_lmax; sfb++) {
700             s |= scalefac[gr][ch].l[sfb];
701         }
702
703         for (sfb = gi->sfb_smin; sfb < SBPSY_s; sfb++) {
704             for (b = 0; b < 3; b++) {
705                 s |= scalefac[gr][ch].s[sfb][b];
706             }
707         }
708
709         if (!(s & 1) && s != 0) {
710             for (sfb = 0; sfb < gi->sfb_lmax; sfb++) {
711                 scalefac[gr][ch].l[sfb] /= 2;
712             }
713             for (sfb = gi->sfb_smin; sfb < SBPSY_s; sfb++) {
714                 for (b = 0; b < 3; b++) {
715                     scalefac[gr][ch].s[sfb][b] /= 2;
716                 }
717             }
718
719             gi->scalefac_scale = 1;
720             gi->part2_length = 99999999;
721             if (gfc->mode_gr == 2) {
722                 scale_bitcount(&scalefac[gr][ch], gi);
723             } else {
724                 scale_bitcount_lsf(gfc,&scalefac[gr][ch], gi);
725             }
726         }
727     }
728
729
730     for ( i = 0; i < 4; i++ )
731       l3_side->scfsi[ch][i] = 0;
732
733     if (gfc->mode_gr==2 && gr == 1
734         && l3_side->gr[0].ch[ch].tt.block_type != SHORT_TYPE
735         && l3_side->gr[1].ch[ch].tt.block_type != SHORT_TYPE) {
736         scfsi_calc(ch, l3_side, scalefac);
737     }
738     gi->part2_3_length += gi->part2_length;
739 }
740
741
742 /* number of bits used to encode scalefacs */
743
744 /* 18*slen1_tab[i] + 18*slen2_tab[i] */
745 static const int scale_short[16] = {
746     0, 18, 36, 54, 54, 36, 54, 72, 54, 72, 90, 72, 90, 108, 108, 126 };
747
748 /* 17*slen1_tab[i] + 18*slen2_tab[i] */
749 static const int scale_mixed[16] = {
750     0, 18, 36, 54, 51, 35, 53, 71, 52, 70, 88, 69, 87, 105, 104, 122 };
751
752 /* 11*slen1_tab[i] + 10*slen2_tab[i] */
753 static const int scale_long[16] = {
754     0, 10, 20, 30, 33, 21, 31, 41, 32, 42, 52, 43, 53, 63, 64, 74 };
755
756
757 /*************************************************************************/
758 /*            scale_bitcount                                             */
759 /*************************************************************************/
760
761 /* Also calculates the number of bits necessary to code the scalefactors. */
762
763 int scale_bitcount( 
764     III_scalefac_t * const scalefac, gr_info * const cod_info)
765 {
766     int i, k, sfb, max_slen1 = 0, max_slen2 = 0, ep = 2;
767
768     /* maximum values */
769     const int *tab;
770
771
772     if ( cod_info->block_type == SHORT_TYPE ) {
773         tab = scale_short;
774         if (cod_info->mixed_block_flag) {
775             tab = scale_mixed;
776             for ( sfb = 0 ; sfb < cod_info->sfb_lmax; sfb++ )
777                 if (max_slen1 < scalefac->l[sfb])
778                     max_slen1 = scalefac->l[sfb];
779         }
780
781         for ( i = 0; i < 3; i++ ) {
782             for ( sfb = cod_info->sfb_smin; sfb < 6; sfb++ )
783                 if (max_slen1 < scalefac->s[sfb][i])
784                     max_slen1 = scalefac->s[sfb][i];
785             for (sfb = 6; sfb < SBPSY_s; sfb++ )
786                 if (max_slen2 < scalefac->s[sfb][i])
787                     max_slen2 = scalefac->s[sfb][i];
788         }
789     }
790     else
791     { /* block_type == 1,2,or 3 */
792         tab = scale_long;
793         for ( sfb = 0; sfb < 11; sfb++ )
794             if ( scalefac->l[sfb] > max_slen1 )
795                 max_slen1 = scalefac->l[sfb];
796
797         if (!cod_info->preflag) {
798             for ( sfb = 11; sfb < SBPSY_l; sfb++ )
799                 if (scalefac->l[sfb] < pretab[sfb])
800                     break;
801
802             if (sfb == SBPSY_l) {
803                 cod_info->preflag = 1;
804                 for ( sfb = 11; sfb < SBPSY_l; sfb++ )
805                     scalefac->l[sfb] -= pretab[sfb];
806             }
807         }
808
809         for ( sfb = 11; sfb < SBPSY_l; sfb++ )
810             if ( scalefac->l[sfb] > max_slen2 )
811                 max_slen2 = scalefac->l[sfb];
812     }
813
814
815     /* from Takehiro TOMINAGA <tominaga@isoternet.org> 10/99
816      * loop over *all* posible values of scalefac_compress to find the
817      * one which uses the smallest number of bits.  ISO would stop
818      * at first valid index */
819     cod_info->part2_length = LARGE_BITS;
820     for ( k = 0; k < 16; k++ )
821     {
822         if ( (max_slen1 < slen1_n[k]) && (max_slen2 < slen2_n[k]) &&
823              (cod_info->part2_length > tab[k])) {
824           cod_info->part2_length=tab[k];
825           cod_info->scalefac_compress=k;
826           ep=0;  /* we found a suitable scalefac_compress */
827         }
828     }
829     return ep;
830 }
831
832
833
834 /*
835   table of largest scalefactor values for MPEG2
836 */
837 static const int max_range_sfac_tab[6][4] =
838 {
839  { 15, 15, 7,  7},
840  { 15, 15, 7,  0},
841  { 7,  3,  0,  0},
842  { 15, 31, 31, 0},
843  { 7,  7,  7,  0},
844  { 3,  3,  0,  0}
845 };
846
847
848
849
850 /*************************************************************************/
851 /*            scale_bitcount_lsf                                         */
852 /*************************************************************************/
853
854 /* Also counts the number of bits to encode the scalefacs but for MPEG 2 */ 
855 /* Lower sampling frequencies  (24, 22.05 and 16 kHz.)                   */
856  
857 /*  This is reverse-engineered from section 2.4.3.2 of the MPEG2 IS,     */
858 /* "Audio Decoding Layer III"                                            */
859
860 int scale_bitcount_lsf(const lame_internal_flags *gfc,
861     const III_scalefac_t * const scalefac, gr_info * const cod_info)
862 {
863     int table_number, row_in_table, partition, nr_sfb, window, over;
864     int i, sfb, max_sfac[ 4 ];
865     const int *partition_table;
866
867     /*
868       Set partition table. Note that should try to use table one,
869       but do not yet...
870     */
871     if ( cod_info->preflag )
872         table_number = 2;
873     else
874         table_number = 0;
875
876     for ( i = 0; i < 4; i++ )
877         max_sfac[i] = 0;
878
879     if ( cod_info->block_type == SHORT_TYPE )
880     {
881             row_in_table = 1;
882             partition_table = &nr_of_sfb_block[table_number][row_in_table][0];
883             for ( sfb = 0, partition = 0; partition < 4; partition++ )
884             {
885                 nr_sfb = partition_table[ partition ] / 3;
886                 for ( i = 0; i < nr_sfb; i++, sfb++ )
887                     for ( window = 0; window < 3; window++ )
888                         if ( scalefac->s[sfb][window] > max_sfac[partition] )
889                             max_sfac[partition] = scalefac->s[sfb][window];
890             }
891     }
892     else
893     {
894         row_in_table = 0;
895         partition_table = &nr_of_sfb_block[table_number][row_in_table][0];
896         for ( sfb = 0, partition = 0; partition < 4; partition++ )
897         {
898             nr_sfb = partition_table[ partition ];
899             for ( i = 0; i < nr_sfb; i++, sfb++ )
900                 if ( scalefac->l[sfb] > max_sfac[partition] )
901                     max_sfac[partition] = scalefac->l[sfb];
902         }
903     }
904
905     for ( over = 0, partition = 0; partition < 4; partition++ )
906     {
907         if ( max_sfac[partition] > max_range_sfac_tab[table_number][partition] )
908             over++;
909     }
910     if ( !over )
911     {
912         /*
913           Since no bands have been over-amplified, we can set scalefac_compress
914           and slen[] for the formatter
915         */
916         static const int log2tab[] = { 0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4 };
917
918         int slen1, slen2, slen3, slen4;
919
920         cod_info->sfb_partition_table = nr_of_sfb_block[table_number][row_in_table];
921         for ( partition = 0; partition < 4; partition++ )
922             cod_info->slen[partition] = log2tab[max_sfac[partition]];
923
924         /* set scalefac_compress */
925         slen1 = cod_info->slen[ 0 ];
926         slen2 = cod_info->slen[ 1 ];
927         slen3 = cod_info->slen[ 2 ];
928         slen4 = cod_info->slen[ 3 ];
929
930         switch ( table_number )
931         {
932           case 0:
933             cod_info->scalefac_compress = (((slen1 * 5) + slen2) << 4)
934                 + (slen3 << 2)
935                 + slen4;
936             break;
937
938           case 1:
939             cod_info->scalefac_compress = 400
940                 + (((slen1 * 5) + slen2) << 2)
941                 + slen3;
942             break;
943
944           case 2:
945             cod_info->scalefac_compress = 500 + (slen1 * 3) + slen2;
946             break;
947
948           default:
949             ERRORF(gfc,"intensity stereo not implemented yet\n" );
950             break;
951         }
952     }
953 #ifdef DEBUG
954     if ( over ) 
955         ERRORF(gfc, "---WARNING !! Amplification of some bands over limits\n" );
956 #endif
957     if (!over) {
958       assert( cod_info->sfb_partition_table );     
959       cod_info->part2_length=0;
960       for ( partition = 0; partition < 4; partition++ )
961         cod_info->part2_length += cod_info->slen[partition] * cod_info->sfb_partition_table[partition];
962     }
963     return over;
964 }
965
966
967
968 void huffman_init(lame_internal_flags * const gfc)
969 {
970     int i;
971
972     gfc->choose_table = choose_table_nonMMX;
973     
974 #ifdef MMX_choose_table
975     if (gfc->CPU_features.MMX) {
976         extern int choose_table_MMX(const int *ix, const int *end, int *s);
977         gfc->choose_table = choose_table_MMX;
978     }
979 #endif
980
981     for (i = 2; i <= 576; i += 2) {
982         int scfb_anz = 0, index;
983         while (gfc->scalefac_band.l[++scfb_anz] < i)
984             ;
985
986         index = subdv_table[scfb_anz].region0_count;
987         while (gfc->scalefac_band.l[index + 1] > i)
988             index--;
989
990         if (index < 0) {
991           /* this is an indication that everything is going to
992              be encoded as region0:  bigvalues < region0 < region1
993              so lets set region0, region1 to some value larger
994              than bigvalues */
995           index = subdv_table[scfb_anz].region0_count;
996         }
997
998         gfc->bv_scf[i-2] = index;
999
1000         index = subdv_table[scfb_anz].region1_count;
1001         while (gfc->scalefac_band.l[index + gfc->bv_scf[i-2] + 2] > i)
1002             index--;
1003
1004         if (index < 0) {
1005           index = subdv_table[scfb_anz].region1_count;
1006         }
1007
1008         gfc->bv_scf[i-1] = index;
1009     }
1010 }