annotate mp3lib/layer3.c @ 11619:179138947307

This patch contains bugfixes for the esd audio output driver that I uncovered while trying to send sound to a remote esd server over a wireless (11 mbs, just enough to handle to sound) link. First, the sound was full "ticking" sounds. I found a bug that prevented the "send the remainder of this block" code from ever being called - so large chunks of audio were simply being ignored. Fixing this bug removed the "ticking" from audio streams. Fixing this bug, however, uncovered another problem - when the socket buffer was full, doing a blocking write to finish the buffer would take far too long and would turn video into a chunky mess. I'd imagine this blocking write would be fine for an audio-only stream, but it turns out to hold up the video far too much. The solution in this patch is to write as much data as possible to the socket, and then return as soon as possible, reporting the number of bytes actually written accurately back to mplayer. I've tested it on both local and remote esd servers, and it works well. Patch by Benjamin Osheroff <ben@gimbo.net>
author attila
date Wed, 10 Dec 2003 12:19:13 +0000
parents 329e738ac78b
children d155623271e3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1 /*
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2 * Mpeg Layer-3 audio decoder
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
3 * --------------------------
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
4 * copyright (c) 1995-1999 by Michael Hipp.
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
5 * All rights reserved. See also 'README'
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
6 *
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
7 * Optimize-TODO: put short bands into the band-field without the stride
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
8 * of 3 reals
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
9 * Length-optimze: unify long and short band code where it is possible
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
10 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
11
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
12 #if 0
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
13 #define L3_DEBUG 1
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
14 #endif
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
15
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
16 #if 0
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
17 #define CUT_HF
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
18 #endif
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
19
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
20 # define REAL_MUL(x, y) ((x) * (y))
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
21
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
22 static real ispow[8207];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
23 static real aa_ca[8],aa_cs[8];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
24 static real COS1[12][6];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
25 static real win[4][36];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
26 static real win1[4][36];
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
27 static real gainpow2[256+118+4];
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
28
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
29 /* non static for external 3dnow functions */
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
30 real COS9[9];
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
31 static real COS6_1,COS6_2;
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
32 real tfcos36[9];
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
33
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
34 static real tfcos12[3];
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
35 #define NEW_DCT9
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
36 #ifdef NEW_DCT9
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
37 static real cos9[3],cos18[3];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
38 #endif
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
39
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
40 struct bandInfoStruct {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
41 int longIdx[23];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
42 int longDiff[22];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
43 int shortIdx[14];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
44 int shortDiff[13];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
45 };
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
46
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
47 int longLimit[9][23];
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
48 int shortLimit[9][14];
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
49
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
50 struct bandInfoStruct bandInfo[9] = {
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
51
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
52 /* MPEG 1.0 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
53 { {0,4,8,12,16,20,24,30,36,44,52,62,74, 90,110,134,162,196,238,288,342,418,576},
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
54 {4,4,4,4,4,4,6,6,8, 8,10,12,16,20,24,28,34,42,50,54, 76,158},
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
55 {0,4*3,8*3,12*3,16*3,22*3,30*3,40*3,52*3,66*3, 84*3,106*3,136*3,192*3},
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
56 {4,4,4,4,6,8,10,12,14,18,22,30,56} } ,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
57
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
58 { {0,4,8,12,16,20,24,30,36,42,50,60,72, 88,106,128,156,190,230,276,330,384,576},
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
59 {4,4,4,4,4,4,6,6,6, 8,10,12,16,18,22,28,34,40,46,54, 54,192},
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
60 {0,4*3,8*3,12*3,16*3,22*3,28*3,38*3,50*3,64*3, 80*3,100*3,126*3,192*3},
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
61 {4,4,4,4,6,6,10,12,14,16,20,26,66} } ,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
62
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
63 { {0,4,8,12,16,20,24,30,36,44,54,66,82,102,126,156,194,240,296,364,448,550,576} ,
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
64 {4,4,4,4,4,4,6,6,8,10,12,16,20,24,30,38,46,56,68,84,102, 26} ,
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
65 {0,4*3,8*3,12*3,16*3,22*3,30*3,42*3,58*3,78*3,104*3,138*3,180*3,192*3} ,
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
66 {4,4,4,4,6,8,12,16,20,26,34,42,12} } ,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
67
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
68 /* MPEG 2.0 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
69 { {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576},
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
70 {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54 } ,
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
71 {0,4*3,8*3,12*3,18*3,24*3,32*3,42*3,56*3,74*3,100*3,132*3,174*3,192*3} ,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
72 {4,4,4,6,6,8,10,14,18,26,32,42,18 } } ,
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
73 /* changed 19th value fropm 330 to 332 */
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
74 { {0,6,12,18,24,30,36,44,54,66,80,96,114,136,162,194,232,278,332,394,464,540,576},
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
75 {6,6,6,6,6,6,8,10,12,14,16,18,22,26,32,38,46,54,62,70,76,36 } ,
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
76 {0,4*3,8*3,12*3,18*3,26*3,36*3,48*3,62*3,80*3,104*3,136*3,180*3,192*3} ,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
77 {4,4,4,6,8,10,12,14,18,24,32,44,12 } } ,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
78
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
79 { {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576},
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
80 {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54 },
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
81 {0,4*3,8*3,12*3,18*3,26*3,36*3,48*3,62*3,80*3,104*3,134*3,174*3,192*3},
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
82 {4,4,4,6,8,10,12,14,18,24,30,40,18 } } ,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
83 /* MPEG 2.5 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
84 { {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576} ,
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
85 {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54},
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
86 {0,12,24,36,54,78,108,144,186,240,312,402,522,576},
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
87 {4,4,4,6,8,10,12,14,18,24,30,40,18} },
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
88 { {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576} ,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
89 {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54},
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
90 {0,12,24,36,54,78,108,144,186,240,312,402,522,576},
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
91 {4,4,4,6,8,10,12,14,18,24,30,40,18} },
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
92 { {0,12,24,36,48,60,72,88,108,132,160,192,232,280,336,400,476,566,568,570,572,574,576},
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
93 {12,12,12,12,12,12,16,20,24,28,32,40,48,56,64,76,90,2,2,2,2,2},
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
94 {0, 24, 48, 72,108,156,216,288,372,480,486,492,498,576},
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
95 {8,8,8,12,16,20,24,28,36,2,2,2,26} } ,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
96 };
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
97
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
98 static int mapbuf0[9][152];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
99 static int mapbuf1[9][156];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
100 static int mapbuf2[9][44];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
101 static int *map[9][3];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
102 static int *mapend[9][3];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
103
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
104 static unsigned int n_slen2[512]; /* MPEG 2.0 slen for 'normal' mode */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
105 static unsigned int i_slen2[256]; /* MPEG 2.0 slen for intensity stereo */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
106
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
107 static real tan1_1[16],tan2_1[16],tan1_2[16],tan2_2[16];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
108 static real pow1_1[2][16],pow2_1[2][16],pow1_2[2][16],pow2_2[2][16];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
109
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
110 /*
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
111 * init tables for layer-3
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
112 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
113 void init_layer3(int down_sample_sblimit)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
114 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
115 int i,j,k,l;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
116
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
117 for(i=-256;i<118+4;i++)
1245
03b7e2955a20 Added newest MMX-optimized decore which speedups decoding at least on 13% for any cpu.
nick
parents: 716
diff changeset
118 {
03b7e2955a20 Added newest MMX-optimized decore which speedups decoding at least on 13% for any cpu.
nick
parents: 716
diff changeset
119 if(_has_mmx)
03b7e2955a20 Added newest MMX-optimized decore which speedups decoding at least on 13% for any cpu.
nick
parents: 716
diff changeset
120 gainpow2[i+256] = 16384.0 * pow((double)2.0,-0.25 * (double) (i+210) );
03b7e2955a20 Added newest MMX-optimized decore which speedups decoding at least on 13% for any cpu.
nick
parents: 716
diff changeset
121 else
03b7e2955a20 Added newest MMX-optimized decore which speedups decoding at least on 13% for any cpu.
nick
parents: 716
diff changeset
122 gainpow2[i+256] = pow((double)2.0,-0.25 * (double) (i+210) );
03b7e2955a20 Added newest MMX-optimized decore which speedups decoding at least on 13% for any cpu.
nick
parents: 716
diff changeset
123 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
124 for(i=0;i<8207;i++)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
125 ispow[i] = pow((double)i,(double)4.0/3.0);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
126
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
127 for (i=0;i<8;i++)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
128 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
129 static double Ci[8]={-0.6,-0.535,-0.33,-0.185,-0.095,-0.041,-0.0142,-0.0037};
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
130 double sq=sqrt(1.0+Ci[i]*Ci[i]);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
131 aa_cs[i] = 1.0/sq;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
132 aa_ca[i] = Ci[i]/sq;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
133 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
134
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
135 for(i=0;i<18;i++)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
136 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
137 win[0][i] = win[1][i] = 0.5 * sin( M_PI / 72.0 * (double) (2*(i+0) +1) ) / cos ( M_PI * (double) (2*(i+0) +19) / 72.0 );
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
138 win[0][i+18] = win[3][i+18] = 0.5 * sin( M_PI / 72.0 * (double) (2*(i+18)+1) ) / cos ( M_PI * (double) (2*(i+18)+19) / 72.0 );
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
139 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
140 for(i=0;i<6;i++)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
141 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
142 win[1][i+18] = 0.5 / cos ( M_PI * (double) (2*(i+18)+19) / 72.0 );
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
143 win[3][i+12] = 0.5 / cos ( M_PI * (double) (2*(i+12)+19) / 72.0 );
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
144 win[1][i+24] = 0.5 * sin( M_PI / 24.0 * (double) (2*i+13) ) / cos ( M_PI * (double) (2*(i+24)+19) / 72.0 );
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
145 win[1][i+30] = win[3][i] = 0.0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
146 win[3][i+6 ] = 0.5 * sin( M_PI / 24.0 * (double) (2*i+1) ) / cos ( M_PI * (double) (2*(i+6 )+19) / 72.0 );
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
147 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
148
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
149 for(i=0;i<9;i++)
1245
03b7e2955a20 Added newest MMX-optimized decore which speedups decoding at least on 13% for any cpu.
nick
parents: 716
diff changeset
150 COS9[i] = cos( M_PI / 18.0 * (double) i);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
151
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
152 for(i=0;i<9;i++)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
153 tfcos36[i] = 0.5 / cos ( M_PI * (double) (i*2+1) / 36.0 );
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
154 for(i=0;i<3;i++)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
155 tfcos12[i] = 0.5 / cos ( M_PI * (double) (i*2+1) / 12.0 );
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
156
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
157 COS6_1 = cos( M_PI / 6.0 * (double) 1);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
158 COS6_2 = cos( M_PI / 6.0 * (double) 2);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
159
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
160 #ifdef NEW_DCT9
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
161 cos9[0] = cos(1.0*M_PI/9.0);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
162 cos9[1] = cos(5.0*M_PI/9.0);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
163 cos9[2] = cos(7.0*M_PI/9.0);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
164 cos18[0] = cos(1.0*M_PI/18.0);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
165 cos18[1] = cos(11.0*M_PI/18.0);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
166 cos18[2] = cos(13.0*M_PI/18.0);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
167 #endif
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
168
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
169 for(i=0;i<12;i++)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
170 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
171 win[2][i] = 0.5 * sin( M_PI / 24.0 * (double) (2*i+1) ) / cos ( M_PI * (double) (2*i+7) / 24.0 );
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
172 for(j=0;j<6;j++)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
173 COS1[i][j] = cos( M_PI / 24.0 * (double) ((2*i+7)*(2*j+1)) );
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
174 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
175
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
176 for(j=0;j<4;j++) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
177 static int len[4] = { 36,36,12,36 };
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
178 for(i=0;i<len[j];i+=2)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
179 win1[j][i] = + win[j][i];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
180 for(i=1;i<len[j];i+=2)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
181 win1[j][i] = - win[j][i];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
182 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
183
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
184 for(i=0;i<16;i++)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
185 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
186 double t = tan( (double) i * M_PI / 12.0 );
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
187 tan1_1[i] = t / (1.0+t);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
188 tan2_1[i] = 1.0 / (1.0 + t);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
189 tan1_2[i] = M_SQRT2 * t / (1.0+t);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
190 tan2_2[i] = M_SQRT2 / (1.0 + t);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
191
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
192 for(j=0;j<2;j++) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
193 double base = pow(2.0,-0.25*(j+1.0));
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
194 double p1=1.0,p2=1.0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
195 if(i > 0) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
196 if( i & 1 )
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
197 p1 = pow(base,(i+1.0)*0.5);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
198 else
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
199 p2 = pow(base,i*0.5);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
200 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
201 pow1_1[j][i] = p1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
202 pow2_1[j][i] = p2;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
203 pow1_2[j][i] = M_SQRT2 * p1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
204 pow2_2[j][i] = M_SQRT2 * p2;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
205 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
206 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
207
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
208 for(j=0;j<9;j++)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
209 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
210 struct bandInfoStruct *bi = &bandInfo[j];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
211 int *mp;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
212 int cb,lwin;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
213 int *bdf;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
214
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
215 mp = map[j][0] = mapbuf0[j];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
216 bdf = bi->longDiff;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
217 for(i=0,cb = 0; cb < 8 ; cb++,i+=*bdf++) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
218 *mp++ = (*bdf) >> 1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
219 *mp++ = i;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
220 *mp++ = 3;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
221 *mp++ = cb;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
222 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
223 bdf = bi->shortDiff+3;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
224 for(cb=3;cb<13;cb++) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
225 int l = (*bdf++) >> 1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
226 for(lwin=0;lwin<3;lwin++) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
227 *mp++ = l;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
228 *mp++ = i + lwin;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
229 *mp++ = lwin;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
230 *mp++ = cb;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
231 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
232 i += 6*l;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
233 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
234 mapend[j][0] = mp;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
235
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
236 mp = map[j][1] = mapbuf1[j];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
237 bdf = bi->shortDiff+0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
238 for(i=0,cb=0;cb<13;cb++) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
239 int l = (*bdf++) >> 1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
240 for(lwin=0;lwin<3;lwin++) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
241 *mp++ = l;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
242 *mp++ = i + lwin;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
243 *mp++ = lwin;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
244 *mp++ = cb;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
245 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
246 i += 6*l;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
247 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
248 mapend[j][1] = mp;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
249
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
250 mp = map[j][2] = mapbuf2[j];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
251 bdf = bi->longDiff;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
252 for(cb = 0; cb < 22 ; cb++) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
253 *mp++ = (*bdf++) >> 1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
254 *mp++ = cb;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
255 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
256 mapend[j][2] = mp;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
257
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
258 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
259
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
260 for(j=0;j<9;j++) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
261 for(i=0;i<23;i++) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
262 longLimit[j][i] = (bandInfo[j].longIdx[i] - 1 + 8) / 18 + 1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
263 if(longLimit[j][i] > (down_sample_sblimit) )
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
264 longLimit[j][i] = down_sample_sblimit;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
265 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
266 for(i=0;i<14;i++) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
267 shortLimit[j][i] = (bandInfo[j].shortIdx[i] - 1) / 18 + 1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
268 if(shortLimit[j][i] > (down_sample_sblimit) )
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
269 shortLimit[j][i] = down_sample_sblimit;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
270 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
271 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
272
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
273 for(i=0;i<5;i++) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
274 for(j=0;j<6;j++) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
275 for(k=0;k<6;k++) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
276 int n = k + j * 6 + i * 36;
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
277 i_slen2[n] = i|(j<<3)|(k<<6)|(3<<12);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
278 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
279 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
280 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
281 for(i=0;i<4;i++) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
282 for(j=0;j<4;j++) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
283 for(k=0;k<4;k++) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
284 int n = k + j * 4 + i * 16;
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
285 i_slen2[n+180] = i|(j<<3)|(k<<6)|(4<<12);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
286 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
287 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
288 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
289 for(i=0;i<4;i++) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
290 for(j=0;j<3;j++) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
291 int n = j + i * 3;
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
292 i_slen2[n+244] = i|(j<<3) | (5<<12);
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
293 n_slen2[n+500] = i|(j<<3) | (2<<12) | (1<<15);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
294 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
295 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
296
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
297 for(i=0;i<5;i++) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
298 for(j=0;j<5;j++) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
299 for(k=0;k<4;k++) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
300 for(l=0;l<4;l++) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
301 int n = l + k * 4 + j * 16 + i * 80;
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
302 n_slen2[n] = i|(j<<3)|(k<<6)|(l<<9)|(0<<12);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
303 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
304 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
305 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
306 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
307 for(i=0;i<5;i++) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
308 for(j=0;j<5;j++) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
309 for(k=0;k<4;k++) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
310 int n = k + j * 4 + i * 20;
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
311 n_slen2[n+400] = i|(j<<3)|(k<<6)|(1<<12);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
312 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
313 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
314 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
315 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
316
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
317 /*
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
318 * read additional side information (for MPEG 1 and MPEG 2)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
319 */
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
320 static int III_get_side_info(struct III_sideinfo *si,int stereo,
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
321 int ms_stereo,long sfreq,int single,int lsf)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
322 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
323 int ch, gr;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
324 int powdiff = (single == 3) ? 4 : 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
325
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
326 static const int tabs[2][5] = { { 2,9,5,3,4 } , { 1,8,1,2,9 } };
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
327 const int *tab = tabs[lsf];
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
328
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
329 si->main_data_begin = getbits(tab[1]);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
330 if (stereo == 1)
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
331 si->private_bits = getbits_fast(tab[2]);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
332 else
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
333 si->private_bits = getbits_fast(tab[3]);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
334
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
335 if(!lsf) {
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
336 for (ch=0; ch<stereo; ch++) {
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
337 si->ch[ch].gr[0].scfsi = -1;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
338 si->ch[ch].gr[1].scfsi = getbits_fast(4);
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
339 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
340 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
341
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
342 for (gr=0; gr<tab[0]; gr++) {
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
343 for (ch=0; ch<stereo; ch++) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
344 register struct gr_info_s *gr_info = &(si->ch[ch].gr[gr]);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
345
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
346 gr_info->part2_3_length = getbits(12);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
347 gr_info->big_values = getbits(9);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
348 if(gr_info->big_values > 288) {
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
349 fprintf(stderr,"big_values too large!\n");
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
350 gr_info->big_values = 288;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
351 }
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
352 gr_info->pow2gain = gainpow2+256 - getbits_fast(8) + powdiff;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
353 if(ms_stereo)
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
354 gr_info->pow2gain += 2;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
355 gr_info->scalefac_compress = getbits(tab[4]);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
356
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
357 if(get1bit()) { /* window switch flag */
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
358 int i;
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
359 #ifdef L3_DEBUG
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
360 if(2*gr_info->big_values > bandInfo[sfreq].shortIdx[12])
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
361 fprintf(stderr,"L3: BigValues too large, doesn't make sense %d %d\n",2*gr_info->big_values,bandInfo[sfreq].shortIdx[12]);
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
362 #endif
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
363
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
364 gr_info->block_type = getbits_fast(2);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
365 gr_info->mixed_block_flag = get1bit();
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
366 gr_info->table_select[0] = getbits_fast(5);
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
367 gr_info->table_select[1] = getbits_fast(5);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
368 /*
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
369 * table_select[2] not needed, because there is no region2,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
370 * but to satisfy some verifications tools we set it either.
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
371 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
372 gr_info->table_select[2] = 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
373 for(i=0;i<3;i++)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
374 gr_info->full_gain[i] = gr_info->pow2gain + (getbits_fast(3)<<3);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
375
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
376 if(gr_info->block_type == 0) {
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
377 fprintf(stderr,"Blocktype == 0 and window-switching == 1 not allowed.\n");
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
378 return 0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
379 }
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
380
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
381 /* region_count/start parameters are implicit in this case. */
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
382 if(!lsf || gr_info->block_type == 2)
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
383 gr_info->region1start = 36>>1;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
384 else {
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
385 /* check this again for 2.5 and sfreq=8 */
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
386 if(sfreq == 8)
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
387 gr_info->region1start = 108>>1;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
388 else
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
389 gr_info->region1start = 54>>1;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
390 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
391 gr_info->region2start = 576>>1;
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
392 }
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
393 else {
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
394 int i,r0c,r1c;
10349
d9141bcbb425 disable L3: BigValues too large message
faust3
parents: 10343
diff changeset
395 #ifdef L3_DEBUG
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
396 if(2*gr_info->big_values > bandInfo[sfreq].longIdx[21])
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
397 fprintf(stderr,"L3: BigValues too large, doesn't make sense %d %d\n",2*gr_info->big_values,bandInfo[sfreq].longIdx[21]);
10349
d9141bcbb425 disable L3: BigValues too large message
faust3
parents: 10343
diff changeset
398 #endif
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
399 for (i=0; i<3; i++)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
400 gr_info->table_select[i] = getbits_fast(5);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
401 r0c = getbits_fast(4);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
402 r1c = getbits_fast(3);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
403 gr_info->region1start = bandInfo[sfreq].longIdx[r0c+1] >> 1 ;
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
404 if(r0c + r1c + 2 > 22)
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
405 gr_info->region2start = 576>>1;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
406 else
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
407 gr_info->region2start = bandInfo[sfreq].longIdx[r0c+1+r1c+1] >> 1;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
408 gr_info->block_type = 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
409 gr_info->mixed_block_flag = 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
410 }
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
411 if(!lsf)
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
412 gr_info->preflag = get1bit();
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
413 gr_info->scalefac_scale = get1bit();
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
414 gr_info->count1table_select = get1bit();
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
415 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
416 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
417
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
418 return !0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
419 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
420
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
421 /*
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
422 * read scalefactors
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
423 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
424 static int III_get_scale_factors_1(int *scf,struct gr_info_s *gr_info)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
425 {
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
426 static const unsigned char slen[2][16] = {
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
427 {0, 0, 0, 0, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4},
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
428 {0, 1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 3}
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
429 };
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
430 int numbits;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
431 int num0 = slen[0][gr_info->scalefac_compress];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
432 int num1 = slen[1][gr_info->scalefac_compress];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
433
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
434 if (gr_info->block_type == 2) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
435 int i=18;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
436 numbits = (num0 + num1) * 18;
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
437
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
438 if (gr_info->mixed_block_flag) {
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
439 for (i=8;i;i--)
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
440 *scf++ = getbits_fast(num0);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
441 i = 9;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
442 numbits -= num0; /* num0 * 17 + num1 * 18 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
443 }
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
444
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
445 for (;i;i--)
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
446 *scf++ = getbits_fast(num0);
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
447 for (i = 18; i; i--)
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
448 *scf++ = getbits_fast(num1);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
449 *scf++ = 0; *scf++ = 0; *scf++ = 0; /* short[13][0..2] = 0 */
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
450 }
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
451 else {
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
452 int i;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
453 int scfsi = gr_info->scfsi;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
454
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
455 if(scfsi < 0) { /* scfsi < 0 => granule == 0 */
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
456 for(i=11;i;i--)
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
457 *scf++ = getbits_fast(num0);
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
458 for(i=10;i;i--)
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
459 *scf++ = getbits_fast(num1);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
460 numbits = (num0 + num1) * 10 + num0;
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
461 *scf++ = 0;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
462 }
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
463 else {
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
464 numbits = 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
465 if(!(scfsi & 0x8)) {
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
466 for (i=0;i<6;i++)
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
467 *scf++ = getbits_fast(num0);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
468 numbits += num0 * 6;
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
469 }
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
470 else {
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
471 scf += 6;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
472 }
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
473
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
474 if(!(scfsi & 0x4)) {
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
475 for (i=0;i<5;i++)
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
476 *scf++ = getbits_fast(num0);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
477 numbits += num0 * 5;
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
478 }
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
479 else {
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
480 scf += 5;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
481 }
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
482
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
483 if(!(scfsi & 0x2)) {
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
484 for(i=0;i<5;i++)
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
485 *scf++ = getbits_fast(num1);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
486 numbits += num1 * 5;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
487 }
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
488 else {
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
489 scf += 5;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
490 }
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
491
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
492 if(!(scfsi & 0x1)) {
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
493 for (i=0;i<5;i++)
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
494 *scf++ = getbits_fast(num1);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
495 numbits += num1 * 5;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
496 }
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
497 else {
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
498 scf += 5;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
499 }
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
500 *scf++ = 0; /* no l[21] in original sources */
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
501 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
502 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
503 return numbits;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
504 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
505
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
506 static int III_get_scale_factors_2(int *scf,struct gr_info_s *gr_info,int i_stereo)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
507 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
508 unsigned char *pnt;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
509 int i,j;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
510 unsigned int slen;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
511 int n = 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
512 int numbits = 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
513
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
514 static unsigned char stab[3][6][4] = {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
515 { { 6, 5, 5,5 } , { 6, 5, 7,3 } , { 11,10,0,0} ,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
516 { 7, 7, 7,0 } , { 6, 6, 6,3 } , { 8, 8,5,0} } ,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
517 { { 9, 9, 9,9 } , { 9, 9,12,6 } , { 18,18,0,0} ,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
518 {12,12,12,0 } , {12, 9, 9,6 } , { 15,12,9,0} } ,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
519 { { 6, 9, 9,9 } , { 6, 9,12,6 } , { 15,18,0,0} ,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
520 { 6,15,12,0 } , { 6,12, 9,6 } , { 6,18,9,0} } };
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
521
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
522 if(i_stereo) /* i_stereo AND second channel -> do_layer3() checks this */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
523 slen = i_slen2[gr_info->scalefac_compress>>1];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
524 else
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
525 slen = n_slen2[gr_info->scalefac_compress];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
526
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
527 gr_info->preflag = (slen>>15) & 0x1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
528
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
529 n = 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
530 if( gr_info->block_type == 2 ) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
531 n++;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
532 if(gr_info->mixed_block_flag) n++;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
533 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
534
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
535 pnt = stab[n][(slen>>12)&0x7];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
536
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
537 for(i=0;i<4;i++) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
538 int num = slen & 0x7;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
539 slen >>= 3;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
540 if(num) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
541 for(j=0;j<(int)(pnt[i]);j++) *scf++ = getbits_fast(num);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
542 numbits += pnt[i] * num;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
543 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
544 else {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
545 for(j=0;j<(int)(pnt[i]);j++) *scf++ = 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
546 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
547 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
548
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
549 n = (n << 1) + 1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
550 for(i=0;i<n;i++) *scf++ = 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
551
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
552 return numbits;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
553 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
554
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
555 static int pretab1[22] = {0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,2,2,3,3,3,2,0};
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
556 static int pretab2[22] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
557
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
558 #define getbitoffset() ((-bitindex)&0x7)
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
559 #define getbyte() (*wordpointer++)
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
560
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
561 /*
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
562 * Dequantize samples (includes huffman decoding)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
563 */
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
564 /* 24 is enough because tab13 has max. a 19 bit huffvector */
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
565 #define BITSHIFT ((sizeof(long)-1)*8)
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
566 #define REFRESH_MASK \
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
567 while(num < BITSHIFT) { \
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
568 mask |= ((unsigned long)getbyte())<<(BITSHIFT-num); \
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
569 num += 8; \
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
570 part2remain -= 8; }
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
571
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
572 static int III_dequantize_sample(real xr[SBLIMIT][SSLIMIT],int *scf,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
573 struct gr_info_s *gr_info,int sfreq,int part2bits)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
574 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
575 int shift = 1 + gr_info->scalefac_scale;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
576 real *xrpnt = (real *) xr;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
577 int l[3],l3;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
578 int part2remain = gr_info->part2_3_length - part2bits;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
579 int *me;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
580
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
581 int num=getbitoffset();
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
582 long mask;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
583 /* we must split this, because for num==0 the shift is undefined if you do it in one step */
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
584 mask = ((unsigned long) getbits(num))<<BITSHIFT;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
585 mask <<= 8-num;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
586 part2remain -= num;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
587
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
588 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
589 int bv = gr_info->big_values;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
590 int region1 = gr_info->region1start;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
591 int region2 = gr_info->region2start;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
592
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
593 l3 = ((576>>1)-bv)>>1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
594 /*
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
595 * we may lose the 'odd' bit here !!
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
596 * check this later again
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
597 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
598 if(bv <= region1) {
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
599 l[0] = bv; l[1] = l[2] = 0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
600 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
601 else {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
602 l[0] = region1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
603 if(bv <= region2) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
604 l[1] = bv - l[0]; l[2] = 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
605 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
606 else {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
607 l[1] = region2 - l[0]; l[2] = bv - region2;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
608 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
609 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
610 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
611
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
612 if(gr_info->block_type == 2) {
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
613 /*
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
614 * decoding with short or mixed mode BandIndex table
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
615 */
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
616 int i,max[4];
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
617 int step=0,lwin=3,cb=0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
618 register real v = 0.0;
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
619 register int *m,mc;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
620
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
621 if(gr_info->mixed_block_flag) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
622 max[3] = -1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
623 max[0] = max[1] = max[2] = 2;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
624 m = map[sfreq][0];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
625 me = mapend[sfreq][0];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
626 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
627 else {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
628 max[0] = max[1] = max[2] = max[3] = -1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
629 /* max[3] not really needed in this case */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
630 m = map[sfreq][1];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
631 me = mapend[sfreq][1];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
632 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
633
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
634 mc = 0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
635 for(i=0;i<2;i++) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
636 int lp = l[i];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
637 struct newhuff *h = ht+gr_info->table_select[i];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
638 for(;lp;lp--,mc--) {
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
639 register int x,y;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
640 if( (!mc) ) {
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
641 mc = *m++;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
642 xrpnt = ((real *) xr) + (*m++);
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
643 lwin = *m++;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
644 cb = *m++;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
645 if(lwin == 3) {
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
646 v = gr_info->pow2gain[(*scf++) << shift];
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
647 step = 1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
648 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
649 else {
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
650 v = gr_info->full_gain[lwin][(*scf++) << shift];
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
651 step = 3;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
652 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
653 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
654 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
655 register short *val = h->table;
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
656 REFRESH_MASK;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
657 while((y=*val++)<0) {
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
658 if (mask < 0)
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
659 val -= y;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
660 num--;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
661 mask <<= 1;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
662 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
663 x = y >> 4;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
664 y &= 0xf;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
665 }
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
666 if(x == 15 && h->linbits) {
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
667 max[lwin] = cb;
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
668 REFRESH_MASK;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
669 x += ((unsigned long) mask) >> (BITSHIFT+8-h->linbits);
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
670 num -= h->linbits+1;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
671 mask <<= h->linbits;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
672 if(mask < 0)
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
673 *xrpnt = REAL_MUL(-ispow[x], v);
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
674 else
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
675 *xrpnt = REAL_MUL(ispow[x], v);
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
676 mask <<= 1;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
677 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
678 else if(x) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
679 max[lwin] = cb;
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
680 if(mask < 0)
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
681 *xrpnt = REAL_MUL(-ispow[x], v);
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
682 else
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
683 *xrpnt = REAL_MUL(ispow[x], v);
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
684 num--;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
685 mask <<= 1;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
686 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
687 else
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
688 *xrpnt = 0.0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
689 xrpnt += step;
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
690 if(y == 15 && h->linbits) {
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
691 max[lwin] = cb;
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
692 REFRESH_MASK;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
693 y += ((unsigned long) mask) >> (BITSHIFT+8-h->linbits);
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
694 num -= h->linbits+1;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
695 mask <<= h->linbits;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
696 if(mask < 0)
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
697 *xrpnt = REAL_MUL(-ispow[y], v);
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
698 else
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
699 *xrpnt = REAL_MUL(ispow[y], v);
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
700 mask <<= 1;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
701 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
702 else if(y) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
703 max[lwin] = cb;
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
704 if(mask < 0)
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
705 *xrpnt = REAL_MUL(-ispow[y], v);
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
706 else
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
707 *xrpnt = REAL_MUL(ispow[y], v);
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
708 num--;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
709 mask <<= 1;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
710 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
711 else
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
712 *xrpnt = 0.0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
713 xrpnt += step;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
714 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
715 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
716
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
717 for(;l3 && (part2remain+num > 0);l3--) {
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
718 struct newhuff *h = htc+gr_info->count1table_select;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
719 register short *val = h->table,a;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
720
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
721 REFRESH_MASK;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
722 while((a=*val++)<0) {
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
723 if (mask < 0)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
724 val -= a;
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
725 num--;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
726 mask <<= 1;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
727 }
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
728 if(part2remain+num <= 0) {
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
729 num -= part2remain+num;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
730 break;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
731 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
732
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
733 for(i=0;i<4;i++) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
734 if(!(i & 1)) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
735 if(!mc) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
736 mc = *m++;
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
737 xrpnt = ((real *) xr) + (*m++);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
738 lwin = *m++;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
739 cb = *m++;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
740 if(lwin == 3) {
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
741 v = gr_info->pow2gain[(*scf++) << shift];
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
742 step = 1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
743 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
744 else {
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
745 v = gr_info->full_gain[lwin][(*scf++) << shift];
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
746 step = 3;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
747 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
748 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
749 mc--;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
750 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
751 if( (a & (0x8>>i)) ) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
752 max[lwin] = cb;
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
753 if(part2remain+num <= 0) {
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
754 break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
755 }
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
756 if(mask < 0)
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
757 *xrpnt = -v;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
758 else
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
759 *xrpnt = v;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
760 num--;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
761 mask <<= 1;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
762 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
763 else
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
764 *xrpnt = 0.0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
765 xrpnt += step;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
766 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
767 }
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
768
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
769 if(lwin < 3) { /* short band? */
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
770 while(1) {
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
771 for(;mc > 0;mc--) {
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
772 *xrpnt = 0.0; xrpnt += 3; /* short band -> step=3 */
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
773 *xrpnt = 0.0; xrpnt += 3;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
774 }
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
775 if(m >= me)
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
776 break;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
777 mc = *m++;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
778 xrpnt = ((real *) xr) + *m++;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
779 if(*m++ == 0)
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
780 break; /* optimize: field will be set to zero at the end of the function */
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
781 m++; /* cb */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
782 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
783 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
784
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
785 gr_info->maxband[0] = max[0]+1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
786 gr_info->maxband[1] = max[1]+1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
787 gr_info->maxband[2] = max[2]+1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
788 gr_info->maxbandl = max[3]+1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
789
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
790 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
791 int rmax = max[0] > max[1] ? max[0] : max[1];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
792 rmax = (rmax > max[2] ? rmax : max[2]) + 1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
793 gr_info->maxb = rmax ? shortLimit[sfreq][rmax] : longLimit[sfreq][max[3]+1];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
794 }
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
795
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
796 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
797 else {
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
798 /*
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
799 * decoding with 'long' BandIndex table (block_type != 2)
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
800 */
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
801 int *pretab = gr_info->preflag ? pretab1 : pretab2;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
802 int i,max = -1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
803 int cb = 0;
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
804 int *m = map[sfreq][2];
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
805 register real v = 0.0;
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
806 int mc = 0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
807
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
808 /*
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
809 * long hash table values
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
810 */
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
811 for(i=0;i<3;i++) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
812 int lp = l[i];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
813 struct newhuff *h = ht+gr_info->table_select[i];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
814
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
815 for(;lp;lp--,mc--) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
816 int x,y;
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
817
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
818 if(!mc) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
819 mc = *m++;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
820 cb = *m++;
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
821 #ifdef CUT_HF
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
822 if(cb == 21) {
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
823 fprintf(stderr,"c");
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
824 v = 0.0;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
825 }
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
826 else
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
827 #endif
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
828 v = gr_info->pow2gain[((*scf++) + (*pretab++)) << shift];
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
829
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
830 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
831 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
832 register short *val = h->table;
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
833 REFRESH_MASK;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
834 while((y=*val++)<0) {
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
835 if (mask < 0)
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
836 val -= y;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
837 num--;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
838 mask <<= 1;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
839 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
840 x = y >> 4;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
841 y &= 0xf;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
842 }
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
843
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
844 if (x == 15 && h->linbits) {
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
845 max = cb;
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
846 REFRESH_MASK;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
847 x += ((unsigned long) mask) >> (BITSHIFT+8-h->linbits);
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
848 num -= h->linbits+1;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
849 mask <<= h->linbits;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
850 if(mask < 0)
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
851 *xrpnt++ = REAL_MUL(-ispow[x], v);
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
852 else
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
853 *xrpnt++ = REAL_MUL(ispow[x], v);
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
854 mask <<= 1;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
855 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
856 else if(x) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
857 max = cb;
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
858 if(mask < 0)
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
859 *xrpnt++ = REAL_MUL(-ispow[x], v);
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
860 else
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
861 *xrpnt++ = REAL_MUL(ispow[x], v);
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
862 num--;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
863 mask <<= 1;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
864 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
865 else
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
866 *xrpnt++ = 0.0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
867
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
868 if (y == 15 && h->linbits) {
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
869 max = cb;
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
870 REFRESH_MASK;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
871 y += ((unsigned long) mask) >> (BITSHIFT+8-h->linbits);
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
872 num -= h->linbits+1;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
873 mask <<= h->linbits;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
874 if(mask < 0)
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
875 *xrpnt++ = REAL_MUL(-ispow[y], v);
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
876 else
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
877 *xrpnt++ = REAL_MUL(ispow[y], v);
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
878 mask <<= 1;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
879 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
880 else if(y) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
881 max = cb;
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
882 if(mask < 0)
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
883 *xrpnt++ = REAL_MUL(-ispow[y], v);
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
884 else
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
885 *xrpnt++ = REAL_MUL(ispow[y], v);
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
886 num--;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
887 mask <<= 1;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
888 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
889 else
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
890 *xrpnt++ = 0.0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
891 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
892 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
893
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
894 /*
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
895 * short (count1table) values
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
896 */
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
897 for(;l3 && (part2remain+num > 0);l3--) {
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
898 struct newhuff *h = htc+gr_info->count1table_select;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
899 register short *val = h->table,a;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
900
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
901 REFRESH_MASK;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
902 while((a=*val++)<0) {
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
903 if (mask < 0)
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
904 val -= a;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
905 num--;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
906 mask <<= 1;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
907 }
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
908 if(part2remain+num <= 0) {
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
909 num -= part2remain+num;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
910 break;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
911 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
912
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
913 for(i=0;i<4;i++) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
914 if(!(i & 1)) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
915 if(!mc) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
916 mc = *m++;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
917 cb = *m++;
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
918 #ifdef CUT_HF
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
919 if(cb == 21) {
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
920 fprintf(stderr,"c");
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
921 v = 0.0;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
922 }
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
923 else
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
924 #endif
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
925 v = gr_info->pow2gain[((*scf++) + (*pretab++)) << shift];
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
926 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
927 mc--;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
928 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
929 if ( (a & (0x8>>i)) ) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
930 max = cb;
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
931 if(part2remain+num <= 0) {
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
932 break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
933 }
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
934 if(mask < 0)
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
935 *xrpnt++ = -v;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
936 else
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
937 *xrpnt++ = v;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
938 num--;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
939 mask <<= 1;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
940 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
941 else
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
942 *xrpnt++ = 0.0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
943 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
944 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
945
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
946 gr_info->maxbandl = max+1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
947 gr_info->maxb = longLimit[sfreq][gr_info->maxbandl];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
948 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
949
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
950 part2remain += num;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
951 // backbits(num);
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
952 bitindex -= num; wordpointer += (bitindex>>3); bitindex &= 0x7;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
953 num = 0;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
954
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
955 while(xrpnt < &xr[SBLIMIT][0])
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
956 *xrpnt++ = 0.0;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
957
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
958 while( part2remain > 16 ) {
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
959 getbits(16); /* Dismiss stuffing Bits */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
960 part2remain -= 16;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
961 }
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
962 if(part2remain > 0)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
963 getbits(part2remain);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
964 else if(part2remain < 0) {
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
965 fprintf(stderr,"mpg123: Can't rewind stream by %d bits!\n",-part2remain);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
966 return 1; /* -> error */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
967 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
968 return 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
969 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
970
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
971
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
972
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
973
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
974 /*
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
975 * III_stereo: calculate real channel values for Joint-I-Stereo-mode
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
976 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
977 static void III_i_stereo(real xr_buf[2][SBLIMIT][SSLIMIT],int *scalefac,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
978 struct gr_info_s *gr_info,int sfreq,int ms_stereo,int lsf)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
979 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
980 real (*xr)[SBLIMIT*SSLIMIT] = (real (*)[SBLIMIT*SSLIMIT] ) xr_buf;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
981 struct bandInfoStruct *bi = &bandInfo[sfreq];
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
982
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
983 const real *tab1,*tab2;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
984
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
985 int tab;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
986 static const real *tabs[3][2][2] = {
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
987 { { tan1_1,tan2_1 } , { tan1_2,tan2_2 } },
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
988 { { pow1_1[0],pow2_1[0] } , { pow1_2[0],pow2_2[0] } } ,
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
989 { { pow1_1[1],pow2_1[1] } , { pow1_2[1],pow2_2[1] } }
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
990 };
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
991
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
992 tab = lsf + (gr_info->scalefac_compress & lsf);
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
993 tab1 = tabs[tab][ms_stereo][0];
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
994 tab2 = tabs[tab][ms_stereo][1];
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
995 #if 0
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
996 if(lsf) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
997 int p = gr_info->scalefac_compress & 0x1;
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
998 if(ms_stereo) {
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
999 tab1 = pow1_2[p]; tab2 = pow2_2[p];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1000 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1001 else {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1002 tab1 = pow1_1[p]; tab2 = pow2_1[p];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1003 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1004 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1005 else {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1006 if(ms_stereo) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1007 tab1 = tan1_2; tab2 = tan2_2;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1008 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1009 else {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1010 tab1 = tan1_1; tab2 = tan2_1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1011 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1012 }
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1013 #endif
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1014
10388
arpi
parents: 10349
diff changeset
1015 // printf("III_i_st: tab1=%p tab2=%p tab=%d ms=%d \n", tab1, tab2, tab, ms_stereo);
arpi
parents: 10349
diff changeset
1016
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1017 if (gr_info->block_type == 2) {
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1018 int lwin,do_l = 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1019 if( gr_info->mixed_block_flag )
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1020 do_l = 1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1021
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1022 for (lwin=0;lwin<3;lwin++) { /* process each window */
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1023 /* get first band with zero values */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1024 int is_p,sb,idx,sfb = gr_info->maxband[lwin]; /* sfb is minimal 3 for mixed mode */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1025 if(sfb > 3)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1026 do_l = 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1027
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1028 for(;sfb<12;sfb++) {
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1029 is_p = scalefac[sfb*3+lwin-gr_info->mixed_block_flag]; /* scale: 0-15 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1030 if(is_p != 7) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1031 real t1,t2;
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1032 sb = bi->shortDiff[sfb];
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1033 idx = bi->shortIdx[sfb] + lwin;
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1034 t1 = tab1[is_p]; t2 = tab2[is_p];
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1035 for (; sb > 0; sb--,idx+=3) {
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1036 real v = xr[0][idx];
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1037 xr[0][idx] = REAL_MUL(v, t1);
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1038 xr[1][idx] = REAL_MUL(v, t2);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1039 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1040 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1041 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1042
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1043 #if 1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1044 /* in the original: copy 10 to 11 , here: copy 11 to 12
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1045 maybe still wrong??? (copy 12 to 13?) */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1046 is_p = scalefac[11*3+lwin-gr_info->mixed_block_flag]; /* scale: 0-15 */
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1047 sb = bi->shortDiff[12];
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1048 idx = bi->shortIdx[12] + lwin;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1049 #else
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1050 is_p = scalefac[10*3+lwin-gr_info->mixed_block_flag]; /* scale: 0-15 */
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1051 sb = bi->shortDiff[11];
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1052 idx = bi->shortIdx[11] + lwin;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1053 #endif
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1054 if(is_p != 7) {
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1055 real t1,t2;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1056 t1 = tab1[is_p]; t2 = tab2[is_p];
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1057 for ( ; sb > 0; sb--,idx+=3 ) {
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1058 real v = xr[0][idx];
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1059 xr[0][idx] = REAL_MUL(v, t1);
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1060 xr[1][idx] = REAL_MUL(v, t2);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1061 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1062 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1063 } /* end for(lwin; .. ; . ) */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1064
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1065 /* also check l-part, if ALL bands in the three windows are 'empty'
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1066 * and mode = mixed_mode
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1067 */
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1068 if (do_l) {
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1069 int sfb = gr_info->maxbandl;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1070 int idx = bi->longIdx[sfb];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1071
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1072 for ( ; sfb<8; sfb++ ) {
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1073 int sb = bi->longDiff[sfb];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1074 int is_p = scalefac[sfb]; /* scale: 0-15 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1075 if(is_p != 7) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1076 real t1,t2;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1077 t1 = tab1[is_p]; t2 = tab2[is_p];
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1078 for ( ; sb > 0; sb--,idx++) {
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1079 real v = xr[0][idx];
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1080 xr[0][idx] = REAL_MUL(v, t1);
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1081 xr[1][idx] = REAL_MUL(v, t2);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1082 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1083 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1084 else
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1085 idx += sb;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1086 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1087 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1088 }
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1089 else { /* ((gr_info->block_type != 2)) */
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1090 int sfb = gr_info->maxbandl;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1091 int is_p,idx = bi->longIdx[sfb];
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1092
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1093 /* hmm ... maybe the maxbandl stuff for i-stereo is buggy? */
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1094 if(sfb <= 21) {
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1095 for ( ; sfb<21; sfb++) {
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1096 int sb = bi->longDiff[sfb];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1097 is_p = scalefac[sfb]; /* scale: 0-15 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1098 if(is_p != 7) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1099 real t1,t2;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1100 t1 = tab1[is_p]; t2 = tab2[is_p];
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1101 for ( ; sb > 0; sb--,idx++) {
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1102 real v = xr[0][idx];
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1103 xr[0][idx] = REAL_MUL(v, t1);
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1104 xr[1][idx] = REAL_MUL(v, t2);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1105 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1106 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1107 else
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1108 idx += sb;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1109 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1110
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1111 is_p = scalefac[20];
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1112 if(is_p != 7) { /* copy l-band 20 to l-band 21 */
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1113 int sb;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1114 real t1 = tab1[is_p],t2 = tab2[is_p];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1115
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1116 for ( sb = bi->longDiff[21]; sb > 0; sb--,idx++ ) {
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1117 real v = xr[0][idx];
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1118 xr[0][idx] = REAL_MUL(v, t1);
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1119 xr[1][idx] = REAL_MUL(v, t2);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1120 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1121 }
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1122 } /* end: if(sfb <= 21) */
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1123 } /* ... */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1124 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1125
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1126 static void III_antialias(real xr[SBLIMIT][SSLIMIT],struct gr_info_s *gr_info) {
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1127 int sblim;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1128
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1129 if(gr_info->block_type == 2) {
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1130 if(!gr_info->mixed_block_flag)
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1131 return;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1132 sblim = 1;
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1133 }
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1134 else {
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1135 sblim = gr_info->maxb-1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1136 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1137
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1138 /* 31 alias-reduction operations between each pair of sub-bands */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1139 /* with 8 butterflies between each pair */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1140
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1141 {
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1142 int sb;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1143 real *xr1=(real *) xr[1];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1144
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1145 for(sb=sblim;sb;sb--,xr1+=10) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1146 int ss;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1147 real *cs=aa_cs,*ca=aa_ca;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1148 real *xr2 = xr1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1149
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1150 for(ss=7;ss>=0;ss--) { /* upper and lower butterfly inputs */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1151 register real bu = *--xr2,bd = *xr1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1152 *xr2 = (bu * (*cs) ) - (bd * (*ca) );
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1153 *xr1++ = (bd * (*cs++) ) + (bu * (*ca++) );
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1154 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1155 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1156
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1157 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1158 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1159
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1160 #include "dct64.c"
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1161 #include "dct36.c"
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1162 #include "dct12.c"
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1163
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1164 #include "decod386.c"
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1165
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1166 /*
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1167 * III_hybrid
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1168 */
1245
03b7e2955a20 Added newest MMX-optimized decore which speedups decoding at least on 13% for any cpu.
nick
parents: 716
diff changeset
1169
03b7e2955a20 Added newest MMX-optimized decore which speedups decoding at least on 13% for any cpu.
nick
parents: 716
diff changeset
1170 dct36_func_t dct36_func;
03b7e2955a20 Added newest MMX-optimized decore which speedups decoding at least on 13% for any cpu.
nick
parents: 716
diff changeset
1171
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1172 static void III_hybrid(real fsIn[SBLIMIT][SSLIMIT],real tsOut[SSLIMIT][SBLIMIT],
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1173 int ch,struct gr_info_s *gr_info)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1174 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1175 real *tspnt = (real *) tsOut;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1176 static real block[2][2][SBLIMIT*SSLIMIT] = { { { 0, } } };
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1177 static int blc[2]={0,0};
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1178 real *rawout1,*rawout2;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1179 int bt;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1180 int sb = 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1181
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1182 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1183 int b = blc[ch];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1184 rawout1=block[b][ch];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1185 b=-b+1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1186 rawout2=block[b][ch];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1187 blc[ch] = b;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1188 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1189
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1190 if(gr_info->mixed_block_flag) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1191 sb = 2;
1245
03b7e2955a20 Added newest MMX-optimized decore which speedups decoding at least on 13% for any cpu.
nick
parents: 716
diff changeset
1192 (*dct36_func)(fsIn[0],rawout1,rawout2,win[0],tspnt);
03b7e2955a20 Added newest MMX-optimized decore which speedups decoding at least on 13% for any cpu.
nick
parents: 716
diff changeset
1193 (*dct36_func)(fsIn[1],rawout1+18,rawout2+18,win1[0],tspnt+1);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1194 rawout1 += 36; rawout2 += 36; tspnt += 2;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1195 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1196
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1197 bt = gr_info->block_type;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1198 if(bt == 2) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1199 for (; sb<gr_info->maxb; sb+=2,tspnt+=2,rawout1+=36,rawout2+=36) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1200 dct12(fsIn[sb],rawout1,rawout2,win[2],tspnt);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1201 dct12(fsIn[sb+1],rawout1+18,rawout2+18,win1[2],tspnt+1);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1202 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1203 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1204 else {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1205 for (; sb<gr_info->maxb; sb+=2,tspnt+=2,rawout1+=36,rawout2+=36) {
1245
03b7e2955a20 Added newest MMX-optimized decore which speedups decoding at least on 13% for any cpu.
nick
parents: 716
diff changeset
1206 (*dct36_func)(fsIn[sb],rawout1,rawout2,win[bt],tspnt);
03b7e2955a20 Added newest MMX-optimized decore which speedups decoding at least on 13% for any cpu.
nick
parents: 716
diff changeset
1207 (*dct36_func)(fsIn[sb+1],rawout1+18,rawout2+18,win1[bt],tspnt+1);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1208 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1209 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1210
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1211 for(;sb<SBLIMIT;sb++,tspnt++) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1212 int i;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1213 for(i=0;i<SSLIMIT;i++) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1214 tspnt[i*SBLIMIT] = *rawout1++;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1215 *rawout2++ = 0.0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1216 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1217 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1218 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1219
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1220 /*
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1221 * main layer3 handler
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1222 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1223 /* int do_layer3(struct frame *fr,int outmode,struct audio_info_struct *ai) */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1224 static int do_layer3(struct frame *fr,int single){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1225 int gr, ch, ss,clip=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1226 int scalefacs[2][39]; /* max 39 for short[13][3] mode, mixed: 38, long: 22 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1227 struct III_sideinfo sideinfo;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1228 int stereo = fr->stereo;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1229 int ms_stereo,i_stereo;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1230 int sfreq = fr->sampling_frequency;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1231 int stereo1,granules;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1232
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1233 // if (fr->error_protection) getbits(16); /* skip crc */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1234
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1235 if(stereo == 1) { /* stream is mono */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1236 stereo1 = 1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1237 single = 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1238 } else
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1239 if(single >= 0) /* stream is stereo, but force to mono */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1240 stereo1 = 1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1241 else
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1242 stereo1 = 2;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1243
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1244 if(fr->mode == MPG_MD_JOINT_STEREO) {
10388
arpi
parents: 10349
diff changeset
1245 ms_stereo = (fr->mode_ext & 0x2)>>1;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1246 i_stereo = fr->mode_ext & 0x1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1247 } else
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1248 ms_stereo = i_stereo = 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1249
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1250 if(!III_get_side_info(&sideinfo,stereo,ms_stereo,sfreq,single,fr->lsf))
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1251 return -1;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1252
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1253 set_pointer(sideinfo.main_data_begin);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1254
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1255 granules = (fr->lsf) ? 1 : 2;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1256 for (gr=0;gr<granules;gr++){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1257 static real hybridIn[2][SBLIMIT][SSLIMIT];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1258 static real hybridOut[2][SSLIMIT][SBLIMIT];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1259
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1260 { struct gr_info_s *gr_info = &(sideinfo.ch[0].gr[gr]);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1261 long part2bits;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1262 if(fr->lsf)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1263 part2bits = III_get_scale_factors_2(scalefacs[0],gr_info,0);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1264 else
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1265 part2bits = III_get_scale_factors_1(scalefacs[0],gr_info);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1266 if(III_dequantize_sample(hybridIn[0], scalefacs[0],gr_info,sfreq,part2bits))
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1267 return clip;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1268 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1269
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1270 if(stereo == 2) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1271 struct gr_info_s *gr_info = &(sideinfo.ch[1].gr[gr]);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1272
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1273 long part2bits;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1274 if(fr->lsf)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1275 part2bits = III_get_scale_factors_2(scalefacs[1],gr_info,i_stereo);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1276 else
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1277 part2bits = III_get_scale_factors_1(scalefacs[1],gr_info);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1278
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1279 if(III_dequantize_sample(hybridIn[1],scalefacs[1],gr_info,sfreq,part2bits))
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1280 return clip;
10343
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1281
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1282 if(ms_stereo) {
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1283 int i;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1284 int maxb = sideinfo.ch[0].gr[gr].maxb;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1285 if(sideinfo.ch[1].gr[gr].maxb > maxb)
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1286 maxb = sideinfo.ch[1].gr[gr].maxb;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1287 for(i=0;i<SSLIMIT*maxb;i++) {
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1288 real tmp0 = ((real *)hybridIn[0])[i];
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1289 real tmp1 = ((real *)hybridIn[1])[i];
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1290 ((real *)hybridIn[0])[i] = tmp0 + tmp1;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1291 ((real *)hybridIn[1])[i] = tmp0 - tmp1;
b277842a74a2 merged with mpg123 0.59s-pre
arpi
parents: 10321
diff changeset
1292 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1293 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1294
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1295 if(i_stereo)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1296 III_i_stereo(hybridIn,scalefacs[1],gr_info,sfreq,ms_stereo,fr->lsf);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1297
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1298 if(ms_stereo || i_stereo || (single == 3) ) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1299 if(gr_info->maxb > sideinfo.ch[0].gr[gr].maxb)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1300 sideinfo.ch[0].gr[gr].maxb = gr_info->maxb;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1301 else
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1302 gr_info->maxb = sideinfo.ch[0].gr[gr].maxb;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1303 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1304
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1305 switch(single) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1306 case 3: {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1307 register int i;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1308 register real *in0 = (real *) hybridIn[0],*in1 = (real *) hybridIn[1];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1309 for(i=0;i<SSLIMIT*gr_info->maxb;i++,in0++)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1310 *in0 = (*in0 + *in1++); /* *0.5 done by pow-scale */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1311 break; }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1312 case 1: {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1313 register int i;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1314 register real *in0 = (real *) hybridIn[0],*in1 = (real *) hybridIn[1];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1315 for(i=0;i<SSLIMIT*gr_info->maxb;i++)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1316 *in0++ = *in1++;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1317 break; }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1318 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1319
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1320 } // if(stereo == 2)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1321
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1322 for(ch=0;ch<stereo1;ch++) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1323 struct gr_info_s *gr_info = &(sideinfo.ch[ch].gr[gr]);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1324 III_antialias(hybridIn[ch],gr_info);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1325 III_hybrid(hybridIn[ch], hybridOut[ch], ch,gr_info);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1326 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1327
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1328 for(ss=0;ss<SSLIMIT;ss++) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1329 if(single >= 0) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1330 clip += (fr->synth_mono)(hybridOut[0][ss],pcm_sample,&pcm_point);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1331 } else {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1332 int p1 = pcm_point;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1333 clip += (fr->synth)(hybridOut[0][ss],0,pcm_sample,&p1);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1334 clip += (fr->synth)(hybridOut[1][ss],1,pcm_sample,&pcm_point);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1335 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1336 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1337
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1338 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1339
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1340 return clip;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1341 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1342
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1343