1 #include "common.h"
2 #include "decoder.h"
3 #include "decode_ml.h"
4 
5 /* these arrays are in decode.c */
6 extern double c[17];
7 extern double d[17];
8 
II_decode_bitalloc_ml(Bit_stream * bs,frame_params * fr_ps,unsigned int bit_alloc_ml[7][SBLIMIT],int * m)9 void II_decode_bitalloc_ml (Bit_stream * bs,
10 			    frame_params * fr_ps,
11 			    unsigned int bit_alloc_ml[7][SBLIMIT], int *m)
12 {
13   int i, j;
14   int sblimit_ml = fr_ps->sblimit_ml;
15   al_table *alloc_ml = fr_ps->alloc_ml;
16 
17   /* JR: no dynamic crosstalk for multilingual channels */
18   /* JR: no phantom center coding for multilingual channels */
19   /* JR: no joint coding for multilingual channels */
20   /* JR: they're really simple, aren't they? */
21 
22   for (i = 0; i < sblimit_ml; i++)
23     for (j = 0; j < *m; j++)
24       bit_alloc_ml[j][i] = (char) getbits (bs, (*alloc_ml)[i][0].bits);
25   for (i = sblimit_ml; i < SBLIMIT; i++)
26     for (j = 0; j < *m; j++)
27       bit_alloc_ml[j][i] = 0;
28 }
29 
II_decode_scale_ml(Bit_stream * bs,frame_params * fr_ps,unsigned int scfsi[7][SBLIMIT],unsigned int bit_alloc[7][SBLIMIT],unsigned int scale_index[7][3][SBLIMIT],int * m)30 void II_decode_scale_ml (Bit_stream * bs,
31 			 frame_params * fr_ps,
32 			 unsigned int scfsi[7][SBLIMIT],
33 			 unsigned int bit_alloc[7][SBLIMIT],
34 			 unsigned int scale_index[7][3][SBLIMIT], int *m)
35 {
36   int i, j;
37   //MFC  int px, pci;
38   int sblimit_ml = fr_ps->sblimit_ml;
39 
40 
41   for (i = 0; i < sblimit_ml; i++)
42     for (j = 0; j < *m; j++)	/* 2 bit scfsi */
43       if (bit_alloc[j][i]) {
44 	scfsi[j][i] = (char) getbits (bs, 2);
45       } else
46 	scfsi[j][i] = 4;
47   for (i = sblimit_ml; i < SBLIMIT; i++)
48     for (j = 0; j < *m; j++)
49       scfsi[j][i] = 4;
50 
51   for (i = 0; i < sblimit_ml; i++)
52     for (j = 0; j < *m; j++) {
53       if (bit_alloc[j][i])
54 	switch (scfsi[j][i]) {
55 	  /* all three scale factors transmitted */
56 	case 0:
57 	  scale_index[j][0][i] = getbits (bs, 6);
58 	  scale_index[j][1][i] = getbits (bs, 6);
59 	  scale_index[j][2][i] = getbits (bs, 6);
60 	  break;
61 	  /* scale factor 1 & 3 transmitted */
62 	case 1:
63 	  scale_index[j][0][i] = scale_index[j][1][i] = getbits (bs, 6);
64 	  scale_index[j][2][i] = getbits (bs, 6);
65 	  break;
66 	  /* scale factor 1 & 2 transmitted */
67 	case 3:
68 	  scale_index[j][0][i] = getbits (bs, 6);
69 	  scale_index[j][1][i] = scale_index[j][2][i] = getbits (bs, 6);
70 	  break;
71 	  /* only one scale factor transmitted */
72 	case 2:
73 	  scale_index[j][0][i] =
74 	    scale_index[j][1][i] = scale_index[j][2][i] = getbits (bs, 6);
75 	  break;
76 	default:
77 	  scale_index[j][0][i] =
78 	    scale_index[j][1][i] = scale_index[j][2][i] = SCALE_RANGE - 1;
79 	  break;
80       } else {
81 	scale_index[j][0][i] = scale_index[j][1][i] =
82 	  scale_index[j][2][i] = SCALE_RANGE - 1;
83       }
84     }
85 
86   for (i = sblimit_ml; i < SBLIMIT; i++)
87     for (j = 0; j < *m; j++) {
88       scale_index[j][0][i] = scale_index[j][1][i] =
89 	scale_index[j][2][i] = SCALE_RANGE - 1;
90     }
91 }
92 
93 
II_buffer_sample_ml(Bit_stream * bs,frame_params * fr_ps,unsigned int sample_ml[7][3][SBLIMIT],unsigned int bit_alloc_ml[7][SBLIMIT],int * n_ml_ch)94 void II_buffer_sample_ml (Bit_stream * bs,
95 			  frame_params * fr_ps,
96 			  unsigned int sample_ml[7][3][SBLIMIT],
97 			  unsigned int bit_alloc_ml[7][SBLIMIT], int *n_ml_ch)
98 {
99   int i, j, k, m;
100   unsigned int nlevels, c = 0;
101   int sblimit_ml = fr_ps->sblimit_ml;
102   al_table *alloc_ml = fr_ps->alloc_ml;
103 
104   for (i = 0; i < sblimit_ml; i++) {
105     for (j = 0; j < *n_ml_ch; j++) {
106       if (bit_alloc_ml[j][i]) {
107 	/* JR: no dynamic crosstalk for multilingual channels */
108 	/* check for grouping in subband */
109 	if ((*alloc_ml)[i][bit_alloc_ml[j][i]].group == 3) {
110 
111 	  for (m = 0; m < 3; m++) {
112 	    k = (*alloc_ml)[i][bit_alloc_ml[j][i]].bits;
113 	    sample_ml[j][m][i] = (unsigned int) getbits (bs, k);
114 	  }
115 
116 	} else {		/* bit_alloc = 3, 5, 9 */
117 	  nlevels = (*alloc_ml)[i][bit_alloc_ml[j][i]].steps;
118 	  k = (*alloc_ml)[i][bit_alloc_ml[j][i]].bits;
119 	  c = (unsigned int) getbits (bs, k);
120 	  for (k = 0; k < 3; k++) {
121 	    sample_ml[j][k][i] = c % nlevels;
122 	    c /= nlevels;
123 	  }
124 	}
125       } else {			/* for no sample transmitted */
126 	for (k = 0; k < 3; k++)
127 	  sample_ml[j][k][i] = 0;
128       }
129     }
130   }
131 
132   for (i = sblimit_ml; i < SBLIMIT; i++)
133     for (j = 0; j < *n_ml_ch; j++)
134       for (k = 0; k < 3; k++)
135 	sample_ml[j][k][i] = 0;
136 }
137 
138 
II_dequantize_sample_ml(unsigned int sample_ml[7][3][SBLIMIT],unsigned int bit_alloc_ml[7][SBLIMIT],double fraction_ml[7][SBLIMIT][3][12],frame_params * fr_ps,int * n_ml_ch,int * z)139 void II_dequantize_sample_ml (unsigned int sample_ml[7][3][SBLIMIT],
140 			      unsigned int bit_alloc_ml[7][SBLIMIT],
141 			      double fraction_ml[7][SBLIMIT][3][12],
142 			      frame_params * fr_ps, int *n_ml_ch, int *z)
143 {
144   int i, j, k, x;
145   int sblimit_ml = fr_ps->sblimit_ml;
146   al_table *alloc_ml = fr_ps->alloc_ml;
147 
148   for (i = 0; i < sblimit_ml; i++) {
149     for (j = 0; j < 3; j++)
150       for (k = 0; k < *n_ml_ch; k++)
151 	if (bit_alloc_ml[k][i]) {
152 	  /* JR: ditto */
153 	  /* locate MSB in the sample */
154 	  x = 0;
155 	  while ((1L << x) < (*alloc_ml)[i][bit_alloc_ml[k][i]].steps)
156 	    x++;
157 	  /* MSB inversion */
158 	  if (((sample_ml[k][j][i] >> (x - 1)) & 1) == 1)
159 	    fraction_ml[k][i][j][*z] = 0.0;
160 	  else
161 	    fraction_ml[k][i][j][*z] = -1.0;
162 
163 	  /* Form a 2's complement sample */
164 	  fraction_ml[k][i][j][*z] +=
165 	    (double) (sample_ml[k][j][i] & ((1 << (x - 1)) - 1)) /
166 	    (double) (1L << (x - 1));
167 
168 	  /* Dequantize the sample */
169 	  fraction_ml[k][i][j][*z] +=
170 	    d[(*alloc_ml)[i][bit_alloc_ml[k][i]].quant];
171 	  fraction_ml[k][i][j][*z] *=
172 	    c[(*alloc_ml)[i][bit_alloc_ml[k][i]].quant];
173 	} /* if bit_alloc */
174 	else
175 	  fraction_ml[k][i][j][*z] = 0.0;
176   }
177   for (i = sblimit_ml; i < SBLIMIT; i++)
178     for (j = 0; j < 3; j++)
179       for (k = 0; k < *n_ml_ch; k++)
180 	fraction_ml[k][i][j][*z] = 0.0;
181 }
182 
183 
II_denormalize_sample_ml(double fraction_ml[7][SBLIMIT][3][12],unsigned int scale_index_ml[7][3][SBLIMIT],frame_params * fr_ps,int x,int * n_ml_ch,int * z)184 void II_denormalize_sample_ml (double fraction_ml[7][SBLIMIT][3][12],
185 			       unsigned int scale_index_ml[7][3][SBLIMIT],
186 			       frame_params * fr_ps,
187 			       int x, int *n_ml_ch, int *z)
188 {
189   int i, j;
190   int sblimit_ml = fr_ps->sblimit_ml;
191 
192   for (i = 0; i < sblimit_ml; i++)
193     for (j = 0; j < *n_ml_ch; j++) {
194       fraction_ml[j][i][0][*z] *= multiple[scale_index_ml[j][x][i]];
195       fraction_ml[j][i][1][*z] *= multiple[scale_index_ml[j][x][i]];
196       fraction_ml[j][i][2][*z] *= multiple[scale_index_ml[j][x][i]];
197     }
198 }
199