1 /*****************************************************************************
2 * adec_layer2.c: MPEG Layer II audio decoder
3 *****************************************************************************
4 * Copyright (C) 1999, 2000 VideoLAN
5 * $Id: adec_layer2.c,v 1.1 2001/11/13 12:09:18 henri Exp $
7 * Authors: Michel Kaempf <maxx@via.ecp.fr>
8 * Michel Lespinasse <walken@via.ecp.fr>
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
23 *****************************************************************************/
28 * - optimiser les NeedBits() et les GetBits() du code là où c'est possible ;
34 #include <stdlib.h> /* NULL */
35 #include <string.h> /* memcpy(), memset() */
41 #include "modules_export.h"
42 #include "stream_control.h"
43 #include "input_ext-dec.h"
45 #include "mpeg_adec_generic.h"
46 #include "mpeg_adec.h"
47 #include "adec_math.h" /* DCT32(), PCM() */
51 static float adec_scalefactor_table[64] =
53 2.0000000000000000, 1.5874010519681994, 1.2599210498948732,
54 1.0000000000000000, 0.7937005259840998, 0.6299605249474366,
55 0.5000000000000000, 0.3968502629920499, 0.3149802624737183,
56 0.2500000000000000, 0.1984251314960249, 0.1574901312368591,
57 0.1250000000000000, 0.0992125657480125, 0.0787450656184296,
58 0.0625000000000000, 0.0496062828740062, 0.0393725328092148,
59 0.0312500000000000, 0.0248031414370031, 0.0196862664046074,
60 0.0156250000000000, 0.0124015707185016, 0.0098431332023037,
61 0.0078125000000000, 0.0062007853592508, 0.0049215666011518,
62 0.0039062500000000, 0.0031003926796254, 0.0024607833005759,
63 0.0019531250000000, 0.0015501963398127, 0.0012303916502880,
64 0.0009765625000000, 0.0007750981699063, 0.0006151958251440,
65 0.0004882812500000, 0.0003875490849532, 0.0003075979125720,
66 0.0002441406250000, 0.0001937745424766, 0.0001537989562860,
67 0.0001220703125000, 0.0000968872712383, 0.0000768994781430,
68 0.0000610351562500, 0.0000484436356191, 0.0000384497390715,
69 0.0000305175781250, 0.0000242218178096, 0.0000192248695357,
70 0.0000152587890625, 0.0000121109089048, 0.0000096124347679,
71 0.0000076293945312, 0.0000060554544524, 0.0000048062173839,
72 0.0000038146972656, 0.0000030277272262, 0.0000024031086920,
73 0.0000019073486328, 0.0000015138636131, 0.0000012015543460,
74 0.0000009536743164 /* last element is not in the standard... invalid ??? */
77 static float adec_slope_table[15] =
79 0.6666666666666666, 0.2857142857142857, 0.1333333333333333,
80 0.0645161290322581, 0.0317460317460317, 0.0157480314960630,
81 0.0078431372549020, 0.0039138943248532, 0.0019550342130987,
82 0.0009770395701026, 0.0004884004884005, 0.0002441704309608,
83 0.0001220777635354, 0.0000610370189520, 0.0000305180437934
86 static float adec_offset_table[15] =
88 -0.6666666666666666, -0.8571428571428571, -0.9333333333333333,
89 -0.9677419354838710, -0.9841269841269841, -0.9921259842519685,
90 -0.9960784313725490, -0.9980430528375733, -0.9990224828934506,
91 -0.9995114802149487, -0.9997557997557998, -0.9998779147845196,
92 -0.9999389611182323, -0.9999694814905240, -0.9999847409781033
95 static int adec_bound_table[4] = { 4, 8, 12, 16 };
107 static void adec_layer2_get_table( u32 header, u8 freq_table[15],
108 alloc_table_t ** alloc, int * sblimit )
110 static s8 table_ab0[16] =
112 0, L3, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16
114 static s8 table_ab3[16] =
116 0, L3, L5, 3, L9, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16
118 static s8 table_ab11[8] =
120 0, L3, L5, 3, L9, 4, 5, 16
122 static s8 table_ab23[8] =
126 static alloc_table_t mpeg1_ab =
128 {4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,0,0},
129 {table_ab0, table_ab0, table_ab0, table_ab3,
130 table_ab3, table_ab3, table_ab3, table_ab3,
131 table_ab3, table_ab3, table_ab3, table_ab11,
132 table_ab11, table_ab11, table_ab11, table_ab11,
133 table_ab11, table_ab11, table_ab11, table_ab11,
134 table_ab11, table_ab11, table_ab11, table_ab23,
135 table_ab23, table_ab23, table_ab23, table_ab23,
136 table_ab23, table_ab23, NULL, NULL}
139 static s8 table_cd[16] =
141 0, L3, L5, L9, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
143 static alloc_table_t mpeg1_cd =
145 {4,4,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
146 {table_cd, table_cd, table_cd, table_cd,
147 table_cd, table_cd, table_cd, table_cd,
148 table_cd, table_cd, table_cd, table_cd,
149 NULL, NULL, NULL, NULL,
150 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
151 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}
154 static s8 table_0[16] =
156 0, L3, L5, 3, L9, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14
158 static s8 table_4[8] =
160 0, L3, L5, L9, 4, 5, 6, 7
162 static alloc_table_t mpeg2 =
164 {4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0},
165 {table_0, table_0, table_0, table_0,
166 table_4, table_4, table_4, table_4,
167 table_4, table_4, table_4, table_4,
168 table_4, table_4, table_4, table_4,
169 table_4, table_4, table_4, table_4,
170 table_4, table_4, table_4, table_4,
171 table_4, table_4, table_4, table_4,
172 table_4, table_4, NULL, NULL}
175 static alloc_table_t * alloc_table [4] =
177 &mpeg2, &mpeg1_cd, &mpeg1_ab, &mpeg1_ab
179 static int sblimit_table[12] =
181 30, 8, 27, 30, 30, 8, 27, 27, 30, 12, 27, 30
186 if (!(header & 0x80000))
188 index = 0; /* mpeg2 */
192 index = (header >> 12) & 15; /* mpeg1, bitrate */
193 index = freq_table [index];
196 *alloc = alloc_table[index];
197 index |= (header >> 8) & 12;
198 *sblimit = sblimit_table[index];
201 int adec_layer2_mono( adec_thread_t * p_adec, s16 * buffer )
203 static u8 freq_table[15] = {2, 1, 1, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2};
204 static float L3_table[3] = {-2/3.0, 0, 2/3.0};
205 static float L5_table[5] = {-4/5.0, -2/5.0, 0, 2/5.0, 4/5.0};
206 static float L9_table[9] = {-8/9.0, -6/9.0, -4/9.0, -2/9.0, 0,
207 2/9.0, 4/9.0, 6/9.0, 8/9.0};
214 alloc_table_t * alloc_table;
222 /* get the right allocation table */
223 adec_layer2_get_table (p_adec->header, freq_table, &alloc_table, &sblimit);
225 /* parse allocation */
228 for (sb = 0; sb < sblimit; sb++)
232 index = GetBits( &p_adec->bit_stream, alloc_table->nbal[sb] );
233 i_read_bits += alloc_table->nbal[sb];
235 allocation[sb] = alloc_table->alloc[sb][index];
240 for (sb = 0; sb < sblimit; sb++)
244 scfsi[sb] = GetBits (&p_adec->bit_stream, 2);
249 /* parse scalefactors */
251 for (sb = 0; sb < sblimit; sb++)
255 int index_0, index_1, index_2;
260 index_0 = GetBits(&p_adec->bit_stream,6);
261 index_1 = GetBits(&p_adec->bit_stream,6);
262 index_2 = GetBits(&p_adec->bit_stream,6);
265 if (allocation[sb] < 0)
267 slope[0][sb] = adec_scalefactor_table[index_0];
268 slope[1][sb] = adec_scalefactor_table[index_1];
269 slope[2][sb] = adec_scalefactor_table[index_2];
274 float r_slope, r_offset;
276 r_slope = adec_slope_table[allocation[sb]-2];
277 r_offset = adec_offset_table[allocation[sb]-2];
279 r_scalefactor = adec_scalefactor_table[index_0];
280 slope[0][sb] = r_slope * r_scalefactor;
281 offset[0][sb] = r_offset * r_scalefactor;
283 r_scalefactor = adec_scalefactor_table[index_1];
284 slope[1][sb] = r_slope * r_scalefactor;
285 offset[1][sb] = r_offset * r_scalefactor;
287 r_scalefactor = adec_scalefactor_table[index_2];
288 slope[2][sb] = r_slope * r_scalefactor;
289 offset[2][sb] = r_offset * r_scalefactor;
294 index_0 = GetBits(&p_adec->bit_stream,6);
295 index_1 = GetBits(&p_adec->bit_stream,6);
298 if (allocation[sb] < 0)
300 slope[0][sb] = slope[1][sb] =
301 adec_scalefactor_table[index_0];
302 slope[2][sb] = adec_scalefactor_table[index_1];
307 float r_slope, r_offset;
309 r_slope = adec_slope_table[allocation[sb]-2];
310 r_offset = adec_offset_table[allocation[sb]-2];
312 r_scalefactor = adec_scalefactor_table[index_0];
313 slope[0][sb] = slope[1][sb] = r_slope * r_scalefactor;
314 offset[0][sb] = offset[1][sb] =
315 r_offset * r_scalefactor;
317 r_scalefactor = adec_scalefactor_table[index_1];
318 slope[2][sb] = r_slope * r_scalefactor;
319 offset[2][sb] = r_offset * r_scalefactor;
324 index_0 = GetBits( &p_adec->bit_stream, 6 );
327 if (allocation[sb] < 0)
329 slope[0][sb] = slope[1][sb] = slope[2][sb] =
330 adec_scalefactor_table[index_0];
335 float r_slope, r_offset;
337 r_slope = adec_slope_table[allocation[sb]-2];
338 r_offset = adec_offset_table[allocation[sb]-2];
340 r_scalefactor = adec_scalefactor_table[index_0];
341 slope[0][sb] = slope[1][sb] = slope[2][sb] =
342 r_slope * r_scalefactor;
343 offset[0][sb] = offset[1][sb] = offset[2][sb] =
344 r_offset * r_scalefactor;
349 index_0 = GetBits(&p_adec->bit_stream,6);
350 index_1 = GetBits(&p_adec->bit_stream,6);
353 if (allocation[sb] < 0)
355 slope[0][sb] = adec_scalefactor_table[index_0];
356 slope[1][sb] = slope[2][sb] =
357 adec_scalefactor_table[index_1];
362 float r_slope, r_offset;
364 r_slope = adec_slope_table[allocation[sb]-2];
365 r_offset = adec_offset_table[allocation[sb]-2];
367 r_scalefactor = adec_scalefactor_table[index_0];
368 slope[0][sb] = r_slope * r_scalefactor;
369 offset[0][sb] = r_offset * r_scalefactor;
371 r_scalefactor = adec_scalefactor_table[index_1];
372 slope[1][sb] = slope[2][sb] = r_slope * r_scalefactor;
373 offset[1][sb] = offset[2][sb] =
374 r_offset * r_scalefactor;
383 for (gr0 = 0; gr0 < 3; gr0++)
385 for (gr1 = 0; gr1 < 4; gr1++)
389 for (sb = 0; sb < sblimit; sb++)
393 switch (allocation[sb])
396 sample[0][sb] = sample[1][sb] = sample[2][sb] = 0;
400 code = GetBits( &p_adec->bit_stream, 5 );
403 sample[0][sb] = slope[gr0][sb] * L3_table[code % 3];
405 sample[1][sb] = slope[gr0][sb] * L3_table[code % 3];
407 sample[2][sb] = slope[gr0][sb] * L3_table[code];
411 code = GetBits( &p_adec->bit_stream, 7 );
414 sample[0][sb] = slope[gr0][sb] * L5_table[code % 5];
416 sample[1][sb] = slope[gr0][sb] * L5_table[code % 5];
418 sample[2][sb] = slope[gr0][sb] * L5_table[code];
422 code = GetBits( &p_adec->bit_stream, 10 );
425 sample[0][sb] = slope[gr0][sb] * L9_table[code % 9];
427 sample[1][sb] = slope[gr0][sb] * L9_table[code % 9];
429 sample[2][sb] = slope[gr0][sb] * L9_table[code];
433 for (s = 0; s < 3; s++)
435 code = GetBits( &p_adec->bit_stream,
437 i_read_bits += allocation[sb];
440 slope[gr0][sb] * code + offset[gr0][sb];
445 for (; sb < 32; sb++)
447 sample[0][sb] = sample[1][sb] = sample[2][sb] = 0;
450 for (s = 0; s < 3; s++)
452 DCT32 (sample[s], &p_adec->bank_0);
454 PCM (&p_adec->bank_0, &XXX_buf, 2);
456 /* FIXME: one shouldn't have to do it twice ! */
457 DCT32 (sample[s], &p_adec->bank_1);
459 PCM (&p_adec->bank_1, &XXX_buf, 2);
466 p_adec->i_read_bits += i_read_bits;
471 int adec_layer2_stereo( adec_thread_t * p_adec, s16 * buffer )
473 static u8 freq_table[15] = {3, 0, 0, 0, 1, 0, 1, 2, 2, 2, 3, 3, 3, 3, 3};
474 static float L3_table[3] = {-2/3.0, 0, 2/3.0};
475 static float L5_table[5] = {-4/5.0, -2/5.0, 0, 2/5.0, 4/5.0};
476 static float L9_table[9] = {-8/9.0, -6/9.0, -4/9.0, -2/9.0, 0,
477 2/9.0, 4/9.0, 6/9.0, 8/9.0};
479 s8 allocation_0[32], allocation_1[32];
480 u8 scfsi_0[32], scfsi_1[32];
481 float slope_0[3][32], slope_1[3][32];
482 float offset_0[3][32], offset_1[3][32];
483 float sample_0[3][32], sample_1[3][32];
484 alloc_table_t * alloc_table;
493 /* get the right allocation table */
494 adec_layer2_get_table (p_adec->header, freq_table, &alloc_table, &sblimit);
496 /* calculate bound */
498 if ((p_adec->header & 0xc0) == 0x40) { /* intensity stereo */
500 index = (p_adec->header >> 4) & 3;
501 if (adec_bound_table[index] < sblimit)
503 bound = adec_bound_table[index];
507 /* parse allocation */
509 for (sb = 0; sb < bound; sb++)
513 index = GetBits( &p_adec->bit_stream, alloc_table->nbal[sb] );
514 allocation_0[sb] = alloc_table->alloc[sb][index];
516 index = GetBits( &p_adec->bit_stream, alloc_table->nbal[sb] );
517 allocation_1[sb] = alloc_table->alloc[sb][index];
519 i_read_bits += alloc_table->nbal[sb] * 2;
522 for (; sb < sblimit; sb++)
526 index = GetBits( &p_adec->bit_stream, alloc_table->nbal[sb] );
527 allocation_0[sb] = allocation_1[sb] = alloc_table->alloc[sb][index];
528 i_read_bits += alloc_table->nbal[sb];
533 for (sb = 0; sb < sblimit; sb++)
535 if (allocation_0[sb])
537 scfsi_0[sb] = GetBits (&p_adec->bit_stream, 2);
541 if (allocation_1[sb])
543 scfsi_1[sb] = GetBits (&p_adec->bit_stream, 2);
548 /* parse scalefactors */
550 for (sb = 0; sb < sblimit; sb++)
552 if (allocation_0[sb])
554 int index_0, index_1, index_2;
559 index_0 = GetBits(&p_adec->bit_stream,6);
560 index_1 = GetBits(&p_adec->bit_stream,6);
561 index_2 = GetBits(&p_adec->bit_stream,6);
564 if (allocation_0[sb] < 0)
566 slope_0[0][sb] = adec_scalefactor_table[index_0];
567 slope_0[1][sb] = adec_scalefactor_table[index_1];
568 slope_0[2][sb] = adec_scalefactor_table[index_2];
575 slope = adec_slope_table[allocation_0[sb]-2];
576 offset = adec_offset_table[allocation_0[sb]-2];
578 scalefactor = adec_scalefactor_table[index_0];
579 slope_0[0][sb] = slope * scalefactor;
580 offset_0[0][sb] = offset * scalefactor;
582 scalefactor = adec_scalefactor_table[index_1];
583 slope_0[1][sb] = slope * scalefactor;
584 offset_0[1][sb] = offset * scalefactor;
586 scalefactor = adec_scalefactor_table[index_2];
587 slope_0[2][sb] = slope * scalefactor;
588 offset_0[2][sb] = offset * scalefactor;
593 index_0 = GetBits(&p_adec->bit_stream,6);
594 index_1 = GetBits(&p_adec->bit_stream,6);
597 if (allocation_0[sb] < 0)
599 slope_0[0][sb] = slope_0[1][sb] =
600 adec_scalefactor_table[index_0];
601 slope_0[2][sb] = adec_scalefactor_table[index_1];
608 slope = adec_slope_table[allocation_0[sb]-2];
609 offset = adec_offset_table[allocation_0[sb]-2];
611 scalefactor = adec_scalefactor_table[index_0];
612 slope_0[0][sb] = slope_0[1][sb] = slope * scalefactor;
613 offset_0[0][sb] = offset_0[1][sb] =
614 offset * scalefactor;
616 scalefactor = adec_scalefactor_table[index_1];
617 slope_0[2][sb] = slope * scalefactor;
618 offset_0[2][sb] = offset * scalefactor;
623 index_0 = GetBits( &p_adec->bit_stream, 6 );
626 if (allocation_0[sb] < 0)
628 slope_0[0][sb] = slope_0[1][sb] = slope_0[2][sb] =
629 adec_scalefactor_table[index_0];
636 slope = adec_slope_table[allocation_0[sb]-2];
637 offset = adec_offset_table[allocation_0[sb]-2];
639 scalefactor = adec_scalefactor_table[index_0];
640 slope_0[0][sb] = slope_0[1][sb] = slope_0[2][sb] =
642 offset_0[0][sb] = offset_0[1][sb] = offset_0[2][sb] =
643 offset * scalefactor;
648 index_0 = GetBits(&p_adec->bit_stream,6);
649 index_1 = GetBits(&p_adec->bit_stream,6);
652 if (allocation_0[sb] < 0)
654 slope_0[0][sb] = adec_scalefactor_table[index_0];
655 slope_0[1][sb] = slope_0[2][sb] =
656 adec_scalefactor_table[index_1];
663 slope = adec_slope_table[allocation_0[sb]-2];
664 offset = adec_offset_table[allocation_0[sb]-2];
666 scalefactor = adec_scalefactor_table[index_0];
667 slope_0[0][sb] = slope * scalefactor;
668 offset_0[0][sb] = offset * scalefactor;
670 scalefactor = adec_scalefactor_table[index_1];
671 slope_0[1][sb] = slope_0[2][sb] = slope * scalefactor;
672 offset_0[1][sb] = offset_0[2][sb] =
673 offset * scalefactor;
679 if (allocation_1[sb])
681 int index_0, index_1, index_2;
686 index_0 = GetBits(&p_adec->bit_stream,6);
687 index_1 = GetBits(&p_adec->bit_stream,6);
688 index_2 = GetBits(&p_adec->bit_stream,6);
691 if (allocation_1[sb] < 0)
693 slope_1[0][sb] = adec_scalefactor_table[index_0];
694 slope_1[1][sb] = adec_scalefactor_table[index_1];
695 slope_1[2][sb] = adec_scalefactor_table[index_2];
702 slope = adec_slope_table[allocation_1[sb]-2];
703 offset = adec_offset_table[allocation_1[sb]-2];
705 scalefactor = adec_scalefactor_table[index_0];
706 slope_1[0][sb] = slope * scalefactor;
707 offset_1[0][sb] = offset * scalefactor;
709 scalefactor = adec_scalefactor_table[index_1];
710 slope_1[1][sb] = slope * scalefactor;
711 offset_1[1][sb] = offset * scalefactor;
713 scalefactor = adec_scalefactor_table[index_2];
714 slope_1[2][sb] = slope * scalefactor;
715 offset_1[2][sb] = offset * scalefactor;
720 index_0 = GetBits(&p_adec->bit_stream,6);
721 index_1 = GetBits(&p_adec->bit_stream,6);
724 if (allocation_1[sb] < 0)
726 slope_1[0][sb] = slope_1[1][sb] =
727 adec_scalefactor_table[index_0];
728 slope_1[2][sb] = adec_scalefactor_table[index_1];
735 slope = adec_slope_table[allocation_1[sb]-2];
736 offset = adec_offset_table[allocation_1[sb]-2];
738 scalefactor = adec_scalefactor_table[index_0];
739 slope_1[0][sb] = slope_1[1][sb] = slope * scalefactor;
740 offset_1[0][sb] = offset_1[1][sb] =
741 offset * scalefactor;
743 scalefactor = adec_scalefactor_table[index_1];
744 slope_1[2][sb] = slope * scalefactor;
745 offset_1[2][sb] = offset * scalefactor;
750 index_0 = GetBits( &p_adec->bit_stream, 6 );
753 if (allocation_1[sb] < 0)
755 slope_1[0][sb] = slope_1[1][sb] = slope_1[2][sb] =
756 adec_scalefactor_table[index_0];
763 slope = adec_slope_table[allocation_1[sb]-2];
764 offset = adec_offset_table[allocation_1[sb]-2];
766 scalefactor = adec_scalefactor_table[index_0];
767 slope_1[0][sb] = slope_1[1][sb] = slope_1[2][sb] =
769 offset_1[0][sb] = offset_1[1][sb] = offset_1[2][sb] =
770 offset * scalefactor;
775 index_0 = GetBits(&p_adec->bit_stream,6);
776 index_1 = GetBits(&p_adec->bit_stream,6);
779 if (allocation_1[sb] < 0)
781 slope_1[0][sb] = adec_scalefactor_table[index_0];
782 slope_1[1][sb] = slope_1[2][sb] =
783 adec_scalefactor_table[index_1];
790 slope = adec_slope_table[allocation_1[sb]-2];
791 offset = adec_offset_table[allocation_1[sb]-2];
793 scalefactor = adec_scalefactor_table[index_0];
794 slope_1[0][sb] = slope * scalefactor;
795 offset_1[0][sb] = offset * scalefactor;
797 scalefactor = adec_scalefactor_table[index_1];
798 slope_1[1][sb] = slope_1[2][sb] = slope * scalefactor;
799 offset_1[1][sb] = offset_1[2][sb] =
800 offset * scalefactor;
809 for (gr0 = 0; gr0 < 3; gr0++)
811 for (gr1 = 0; gr1 < 4; gr1++)
815 for (sb = 0; sb < bound; sb++)
819 switch (allocation_0[sb])
822 sample_0[0][sb] = sample_0[1][sb] = sample_0[2][sb] = 0;
826 code = GetBits( &p_adec->bit_stream, 5 );
829 sample_0[0][sb] = slope_0[gr0][sb] * L3_table[code % 3];
831 sample_0[1][sb] = slope_0[gr0][sb] * L3_table[code % 3];
833 sample_0[2][sb] = slope_0[gr0][sb] * L3_table[code];
837 code = GetBits( &p_adec->bit_stream, 7 );
840 sample_0[0][sb] = slope_0[gr0][sb] * L5_table[code % 5];
842 sample_0[1][sb] = slope_0[gr0][sb] * L5_table[code % 5];
844 sample_0[2][sb] = slope_0[gr0][sb] * L5_table[code];
848 code = GetBits( &p_adec->bit_stream, 10 );
851 sample_0[0][sb] = slope_0[gr0][sb] * L9_table[code % 9];
853 sample_0[1][sb] = slope_0[gr0][sb] * L9_table[code % 9];
855 sample_0[2][sb] = slope_0[gr0][sb] * L9_table[code];
859 for (s = 0; s < 3; s++)
861 code = GetBits( &p_adec->bit_stream,
863 i_read_bits += allocation_0[sb];
866 slope_0[gr0][sb] * code + offset_0[gr0][sb];
870 switch (allocation_1[sb])
873 sample_1[0][sb] = sample_1[1][sb] = sample_1[2][sb] = 0;
877 code = GetBits( &p_adec->bit_stream, 5 );
880 sample_1[0][sb] = slope_1[gr0][sb] * L3_table[code % 3];
882 sample_1[1][sb] = slope_1[gr0][sb] * L3_table[code % 3];
884 sample_1[2][sb] = slope_1[gr0][sb] * L3_table[code];
888 code = GetBits( &p_adec->bit_stream, 7 );
891 sample_1[0][sb] = slope_1[gr0][sb] * L5_table[code % 5];
893 sample_1[1][sb] = slope_1[gr0][sb] * L5_table[code % 5];
895 sample_1[2][sb] = slope_1[gr0][sb] * L5_table[code];
899 code = GetBits( &p_adec->bit_stream, 10 );
902 sample_1[0][sb] = slope_1[gr0][sb] * L9_table[code % 9];
904 sample_1[1][sb] = slope_1[gr0][sb] * L9_table[code % 9];
906 sample_1[2][sb] = slope_1[gr0][sb] * L9_table[code];
910 for (s = 0; s < 3; s++)
912 code = GetBits( &p_adec->bit_stream,
914 i_read_bits += allocation_1[sb];
917 slope_1[gr0][sb] * code + offset_1[gr0][sb];
922 for (; sb < sblimit; sb++)
926 switch (allocation_0[sb])
929 sample_0[0][sb] = sample_0[1][sb] = sample_0[2][sb] = 0;
930 sample_1[0][sb] = sample_1[1][sb] = sample_1[2][sb] = 0;
934 code = GetBits( &p_adec->bit_stream, 5 );
937 sample_0[0][sb] = slope_0[gr0][sb] * L3_table[code % 3];
938 sample_1[0][sb] = slope_1[gr0][sb] * L3_table[code % 3];
940 sample_0[1][sb] = slope_0[gr0][sb] * L3_table[code % 3];
941 sample_1[1][sb] = slope_1[gr0][sb] * L3_table[code % 3];
943 sample_0[2][sb] = slope_0[gr0][sb] * L3_table[code];
944 sample_1[2][sb] = slope_1[gr0][sb] * L3_table[code];
948 code = GetBits( &p_adec->bit_stream, 7 );
951 sample_0[0][sb] = slope_0[gr0][sb] * L5_table[code % 5];
952 sample_1[0][sb] = slope_1[gr0][sb] * L5_table[code % 5];
954 sample_0[1][sb] = slope_0[gr0][sb] * L5_table[code % 5];
955 sample_1[1][sb] = slope_1[gr0][sb] * L5_table[code % 5];
957 sample_0[2][sb] = slope_0[gr0][sb] * L5_table[code];
958 sample_1[2][sb] = slope_1[gr0][sb] * L5_table[code];
962 code = GetBits( &p_adec->bit_stream, 10 );
965 sample_0[0][sb] = slope_0[gr0][sb] * L9_table[code % 9];
966 sample_1[0][sb] = slope_1[gr0][sb] * L9_table[code % 9];
968 sample_0[1][sb] = slope_0[gr0][sb] * L9_table[code % 9];
969 sample_1[1][sb] = slope_1[gr0][sb] * L9_table[code % 9];
971 sample_0[2][sb] = slope_0[gr0][sb] * L9_table[code];
972 sample_1[2][sb] = slope_1[gr0][sb] * L9_table[code];
976 for (s = 0; s < 3; s++)
978 code = GetBits( &p_adec->bit_stream,
980 i_read_bits += allocation_0[sb];
983 slope_0[gr0][sb] * code + offset_0[gr0][sb];
985 slope_1[gr0][sb] * code + offset_1[gr0][sb];
990 for (; sb < 32; sb++)
992 sample_0[0][sb] = sample_0[1][sb] = sample_0[2][sb] = 0;
993 sample_1[0][sb] = sample_1[1][sb] = sample_1[2][sb] = 0;
996 for (s = 0; s < 3; s++)
998 DCT32 (sample_0[s], &p_adec->bank_0);
1000 PCM (&p_adec->bank_0, &XXX_buf, 2);
1002 DCT32 (sample_1[s], &p_adec->bank_1);
1004 PCM (&p_adec->bank_1, &XXX_buf, 2);
1011 p_adec->i_read_bits += i_read_bits;