1
/* MPEG/WAVE Sound library
3
(C) 1997 by Jung woo-jae */
6
// It's for MPEG Layer 2
10
#include "synthesis.h"
14
#include "mpeg2tables.h"
17
// workaround for buggy mpeg2 streams.
18
// tested with 12 monkey cdi, worgked fine.
19
// problem was: the stream produced ints
20
// with access out of the tables
21
// if we have such an access we set it to a zero entry
23
static int checkCodeRange(int code,const REAL* group) {
26
cout << "group null"<<endl;
31
if (group == group5bits) {
33
// redirect to zero value
38
if (group == group7bits) {
44
if (group == group10bits) {
50
DEBUG_LAYER(cout << "unknown group found!"<<endl;)
65
void Mpegtoraw::extractlayer2(void) {
66
int inputstereo=mpegAudioHeader->getInputstereo();
67
int tableindex=mpegAudioHeader->getTableindex();
68
int subbandnumber=mpegAudioHeader->getSubbandnumber();
69
int stereobound=mpegAudioHeader->getStereobound();
71
REAL fraction[MAXCHANNEL][3][MAXSUBBAND];
72
unsigned int bitalloc[MAXCHANNEL][MAXSUBBAND],
73
scaleselector[MAXCHANNEL][MAXSUBBAND];
74
REAL scalefactor[2][3][MAXSUBBAND];
76
const REAL *group[MAXCHANNEL][MAXSUBBAND];
77
unsigned int codelength[MAXCHANNEL][MAXSUBBAND];
78
REAL factor[MAXCHANNEL][MAXSUBBAND];
79
REAL c[MAXCHANNEL][MAXSUBBAND],d[MAXCHANNEL][MAXSUBBAND];
81
int s=stereobound,n=subbandnumber;
87
register const int *t=bitalloclengthtable[tableindex];
90
bitalloc[LS][i]=getbits(*t);
91
bitalloc[RS][i]=getbits(*t);
94
bitalloc[LS][i]=bitalloc[RS][i]=getbits(*t);
102
for(register int i=0;i<n;i++)
104
if(bitalloc[LS][i])scaleselector[LS][i]=getbits(2);
105
if(bitalloc[RS][i])scaleselector[RS][i]=getbits(2);
108
for(register int i=0;i<n;i++)
109
if(bitalloc[LS][i])scaleselector[LS][i]=getbits(2);
118
if((j=bitalloc[LS][i]))
122
group[LS][i]=grouptableA[j];
123
codelength[LS][i]=codelengthtableA[j];
124
factor[LS][i]=factortableA[j];
132
group[LS][i]=grouptableB1[j];
133
codelength[LS][i]=codelengthtableB1[j];
134
factor[LS][i]=factortableB1[j];
135
c[LS][i]=ctableB1[j];
136
d[LS][i]=dtableB1[j];
140
group[LS][i]=grouptableB234[j];
143
codelength[LS][i]=codelengthtableB2[j];
144
factor[LS][i]=factortableB2[j];
145
c[LS][i]=ctableB2[j];
146
d[LS][i]=dtableB2[j];
150
codelength[LS][i]=codelengthtableB3[j];
151
factor[LS][i]=factortableB3[j];
152
c[LS][i]=ctableB3[j];
153
d[LS][i]=dtableB3[j];
157
codelength[LS][i]=codelengthtableB4[j];
158
factor[LS][i]=factortableB4[j];
159
c[LS][i]=ctableB4[j];
160
d[LS][i]=dtableB4[j];
166
switch(scaleselector[LS][i])
168
case 0:scalefactor[LS][0][i]=scalefactorstable[getbits(6)];
169
scalefactor[LS][1][i]=scalefactorstable[getbits(6)];
170
scalefactor[LS][2][i]=scalefactorstable[getbits(6)];
172
case 1:scalefactor[LS][0][i]=
173
scalefactor[LS][1][i]=scalefactorstable[getbits(6)];
174
scalefactor[LS][2][i]=scalefactorstable[getbits(6)];
176
case 2:scalefactor[LS][0][i]=
177
scalefactor[LS][1][i]=
178
scalefactor[LS][2][i]=scalefactorstable[getbits(6)];
180
case 3:scalefactor[LS][0][i]=scalefactorstable[getbits(6)];
181
scalefactor[LS][1][i]=
182
scalefactor[LS][2][i]=scalefactorstable[getbits(6)];
185
cout << "scaleselector left default never happens"<<endl;
191
if(inputstereo && (j=bitalloc[RS][i]))
195
group[RS][i]=grouptableA[j];
196
codelength[RS][i]=codelengthtableA[j];
197
factor[RS][i]=factortableA[j];
205
group[RS][i]=grouptableB1[j];
206
codelength[RS][i]=codelengthtableB1[j];
207
factor[RS][i]=factortableB1[j];
208
c[RS][i]=ctableB1[j];
209
d[RS][i]=dtableB1[j];
213
group[RS][i]=grouptableB234[j];
216
codelength[RS][i]=codelengthtableB2[j];
217
factor[RS][i]=factortableB2[j];
218
c[RS][i]=ctableB2[j];
219
d[RS][i]=dtableB2[j];
223
codelength[RS][i]=codelengthtableB3[j];
224
factor[RS][i]=factortableB3[j];
225
c[RS][i]=ctableB3[j];
226
d[RS][i]=dtableB3[j];
230
codelength[RS][i]=codelengthtableB4[j];
231
factor[RS][i]=factortableB4[j];
232
c[RS][i]=ctableB4[j];
233
d[RS][i]=dtableB4[j];
239
switch(scaleselector[RS][i])
241
case 0 : scalefactor[RS][0][i]=scalefactorstable[getbits(6)];
242
scalefactor[RS][1][i]=scalefactorstable[getbits(6)];
243
scalefactor[RS][2][i]=scalefactorstable[getbits(6)];
245
case 1 : scalefactor[RS][0][i]=
246
scalefactor[RS][1][i]=scalefactorstable[getbits(6)];
247
scalefactor[RS][2][i]=scalefactorstable[getbits(6)];
249
case 2 : scalefactor[RS][0][i]=
250
scalefactor[RS][1][i]=
251
scalefactor[RS][2][i]=scalefactorstable[getbits(6)];
253
case 3 : scalefactor[RS][0][i]=scalefactorstable[getbits(6)];
254
scalefactor[RS][1][i]=
255
scalefactor[RS][2][i]=scalefactorstable[getbits(6)];
258
cout << "scaleselector right default never happens"<<endl;
273
for(int l=0;l<SCALEBLOCK;l++)
282
register const REAL *s;
283
int code=getbits(codelength[LS][i]);
289
// bugfix for bad streams
290
code=checkCodeRange(code,group[LS][i]);
291
if (code == -1) return;
295
fraction[LS][0][i]=s[0];
296
fraction[LS][1][i]=s[1];
297
fraction[LS][2][i]=s[2];
302
REAL(getbits(codelength[LS][i]))*factor[LS][i]-1.0;
304
REAL(getbits(codelength[LS][i]))*factor[LS][i]-1.0;
306
REAL(getbits(codelength[LS][i]))*factor[LS][i]-1.0;
309
else fraction[LS][0][i]=fraction[LS][1][i]=fraction[LS][2][i]=0.0;
312
if(inputstereo && bitalloc[RS][i])
317
int code=getbits(codelength[RS][i]);
321
// bugfix for bad streams
322
code=checkCodeRange(code,group[RS][i]);
323
if (code == -1) return;
327
fraction[RS][0][i]=s[0];
328
fraction[RS][1][i]=s[1];
329
fraction[RS][2][i]=s[2];
334
REAL(getbits(codelength[RS][i]))*factor[RS][i]-1.0;
336
REAL(getbits(codelength[RS][i]))*factor[RS][i]-1.0;
338
REAL(getbits(codelength[RS][i]))*factor[RS][i]-1.0;
341
else fraction[RS][0][i]=fraction[RS][1][i]=fraction[RS][2][i]=0.0;
351
register const REAL *s;
352
int code=getbits(codelength[LS][i]);
356
// bugfix for bad streams
357
code=checkCodeRange(code,group[LS][i]);
358
if (code == -1) return;
362
fraction[LS][0][i]=fraction[RS][0][i]=s[0];
363
fraction[LS][1][i]=fraction[RS][1][i]=s[1];
364
fraction[LS][2][i]=fraction[RS][2][i]=s[2];
368
fraction[LS][0][i]=fraction[RS][0][i]=
369
REAL(getbits(codelength[LS][i]))*factor[LS][i]-1.0;
370
fraction[LS][1][i]=fraction[RS][1][i]=
371
REAL(getbits(codelength[LS][i]))*factor[LS][i]-1.0;
372
fraction[LS][2][i]=fraction[RS][2][i]=
373
REAL(getbits(codelength[LS][i]))*factor[LS][i]-1.0;
376
else fraction[LS][0][i]=fraction[LS][1][i]=fraction[LS][2][i]=
377
fraction[RS][0][i]=fraction[RS][1][i]=fraction[RS][2][i]=0.0;
391
fraction[LS][0][i]=(fraction[LS][0][i]+d[LS][i])*c[LS][i];
392
fraction[LS][1][i]=(fraction[LS][1][i]+d[LS][i])*c[LS][i];
393
fraction[LS][2][i]=(fraction[LS][2][i]+d[LS][i])*c[LS][i];
396
register REAL t=scalefactor[LS][l>>2][i];
397
fraction[LS][0][i]*=t;
398
fraction[LS][1][i]*=t;
399
fraction[LS][2][i]*=t;
406
fraction[RS][0][i]=(fraction[RS][0][i]+d[RS][i])*c[LS][i];
407
fraction[RS][1][i]=(fraction[RS][1][i]+d[RS][i])*c[LS][i];
408
fraction[RS][2][i]=(fraction[RS][2][i]+d[RS][i])*c[LS][i];
411
register REAL t=scalefactor[RS][l>>2][i];
412
fraction[RS][0][i]*=t;
413
fraction[RS][1][i]*=t;
414
fraction[RS][2][i]*=t;
423
fraction[LS][0][i]=(fraction[LS][0][i]+d[LS][i])*c[LS][i];
424
fraction[LS][1][i]=(fraction[LS][1][i]+d[LS][i])*c[LS][i];
425
fraction[LS][2][i]=(fraction[LS][2][i]+d[LS][i])*c[LS][i];
428
register REAL t=scalefactor[LS][l>>2][i];
429
fraction[LS][0][i]*=t;
430
fraction[LS][1][i]*=t;
431
fraction[LS][2][i]*=t;
435
for(;i<MAXSUBBAND;i++)
436
fraction[LS][0][i]=fraction[LS][1][i]=fraction[LS][2][i]=
437
fraction[RS][0][i]=fraction[RS][1][i]=fraction[RS][2][i]=0.0;
440
synthesis->doSynth(lDownSample,lOutputStereo,
441
fraction[LS][i],fraction[RS][i]);