8 #include "encode_new.h"
11 int vbrstats_new
[15] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
13 /* There are really only 9 distinct lines in the allocation tables
14 each member of this table is an index into */
15 /* step_index[linenumber][index] */
16 static int step_index
[9][16] = {
17 /*0*/ {0, 1, 3, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17},
18 /*1*/ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,17},
19 /*2*/ {0, 1, 2, 3, 4, 5, 6,17, 0, 0, 0, 0, 0, 0, 0, 0},
20 /*3*/ {0, 1, 2, 17,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
21 /*4*/ {0, 1, 2, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16},
22 /*5*/ {0, 1, 2, 4, 5, 6, 7, 8, 0, 0, 0, 0, 0, 0, 0, 0},
23 /* From ISO13818 Table B.1 */
24 /*6*/ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15},
25 /*7*/ {0, 1, 2, 4, 5, 6, 7, 8, 0, 0, 0, 0, 0, 0, 0, 0},
26 /*8*/ {0, 1, 2, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
29 static int nbal
[9] = {4, 4, 3, 2, 4, 3, 4, 3, 2};
32 /* 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 */
33 /* The number of steps allowed */
34 static int steps
[18] = {0, 3, 5, 7, 9, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767, 65535};
35 /* The power of 2 just under the steps value */
36 static int steps2n
[18]={0, 2, 4, 4, 8, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768};
37 /* The bits per codeword from TableB.4 */
38 static int bits
[18] = {0, 5, 7, 3, 10, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
39 /* Samples per codeword Table B.4 Page 53 */
40 //static int group[18] = {0, 3, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
41 static int group
[18] = {0, 1, 1, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3};
45 /* The sblimits of the 5 allocation tables
47 1 table for MPEG-2 LSF */
48 static int table_sblimit
[5] = {27, 30, 8, 12, 30};
50 /* Each table contains a list of allowable quantization steps.
51 There are only 9 distinct lists of steps.
52 This table gives the index of which of the 9 lists is being used
53 A "-1" entry means that it is above the sblimit for this table */
54 static int line
[5][SBLIMIT
] = {
55 /*00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 */
56 {0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3,-1,-1,-1,-1,-1},
57 {0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3,-1,-1},
58 {4, 4, 5, 5, 5, 5, 5, 5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},
59 {4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},
61 {6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8}
64 /* This is ISO11172 Table B.1 */
65 double scalefactor
[64] = { /* Equation for nth element = 2 / (cuberoot(2) ^ n) */
66 2.00000000000000, 1.58740105196820, 1.25992104989487,
67 1.00000000000000, 0.79370052598410, 0.62996052494744, 0.50000000000000,
68 0.39685026299205, 0.31498026247372, 0.25000000000000, 0.19842513149602,
69 0.15749013123686, 0.12500000000000, 0.09921256574801, 0.07874506561843,
70 0.06250000000000, 0.04960628287401, 0.03937253280921, 0.03125000000000,
71 0.02480314143700, 0.01968626640461, 0.01562500000000, 0.01240157071850,
72 0.00984313320230, 0.00781250000000, 0.00620078535925, 0.00492156660115,
73 0.00390625000000, 0.00310039267963, 0.00246078330058, 0.00195312500000,
74 0.00155019633981, 0.00123039165029, 0.00097656250000, 0.00077509816991,
75 0.00061519582514, 0.00048828125000, 0.00038754908495, 0.00030759791257,
76 0.00024414062500, 0.00019377454248, 0.00015379895629, 0.00012207031250,
77 0.00009688727124, 0.00007689947814, 0.00006103515625, 0.00004844363562,
78 0.00003844973907, 0.00003051757813, 0.00002422181781, 0.00001922486954,
79 0.00001525878906, 0.00001211090890, 0.00000961243477, 0.00000762939453,
80 0.00000605545445, 0.00000480621738, 0.00000381469727, 0.00000302772723,
81 0.00000240310869, 0.00000190734863, 0.00000151386361, 0.00000120155435,
85 /* ISO11172 Table C.5 Layer II Signal to Noise Raios
86 MFC FIX find a reference for these in terms of bits->SNR value
87 Index into table is the steps index
96 static double SNR
[18] = { 0.00, 7.00, 11.00, 16.00, 20.84,
97 25.28, 31.59, 37.75, 43.84,
98 49.89, 55.93, 61.96, 67.98, 74.01,
99 80.03, 86.05, 92.01, 98.01
104 int encode_init(frame_info
*frame
) {
105 int ws
, bsp
, br_per_ch
, sfrq
;
107 bsp
= frame
->header
->bitrate_index
;
108 br_per_ch
= bitrate
[frame
->header
->version
][bsp
] / frame
->nch
;
109 ws
= frame
->header
->sampling_frequency
;
110 sfrq
= s_freq
[frame
->header
->version
][ws
];
111 /* decision rules refer to per-channel bitrates (kbits/sec/chan) */
112 if (frame
->header
->version
== MPEG_AUDIO_ID
) { /* MPEG-1 */
113 if ((sfrq
== 48 && br_per_ch
>= 56)
114 || (br_per_ch
>= 56 && br_per_ch
<= 80))
116 else if (sfrq
!= 48 && br_per_ch
>= 96)
118 else if (sfrq
!= 32 && br_per_ch
<= 48)
122 } else { /* MPEG-2 LSF */
125 fprintf(stdout
,"encode_init: using tablenum %i with sblimit %i\n",tablenum
, table_sblimit
[tablenum
]);
130 int tablenumber
,j
,sblimit
, sb
;
131 fprintf(stdout
,"Tables B.21,b,c,d from ISO11172 and the LSF table from ISO13818\n");
132 for (tablenumber
=0;tablenumber
<NUMTABLES
;tablenumber
++) {
133 /* Print Table Header */
134 fprintf(stdout
,"Tablenum %i\n",tablenumber
);
135 fprintf(stdout
,"sb nbal ");
137 fprintf(stdout
,"%6i ",j
);
138 fprintf(stdout
,"\n");
139 fprintf(stdout
,"-----------------------------------------------------------------------------------------------------------------------\n");
141 sblimit
= table_sblimit
[tablenumber
];
142 for (sb
=0;sb
<SBLIMIT
;sb
++) {
143 int thisline
= line
[tablenumber
][sb
];
144 fprintf(stdout
,"%2i %4i ",sb
,nbal
[thisline
]);
145 if (nbal
[thisline
] != 0)
146 for (j
=0; j
<(1<<nbal
[thisline
]); j
++)
147 fprintf(stdout
,"%6i ", steps
[ step_index
[thisline
][j
] ]);
148 fprintf(stdout
,"\n");
150 fprintf(stdout
,"\n");
155 return (table_sblimit
[tablenum
]);
164 use psy model to determine SMR
167 if (error protection)
170 if (error_protection)
179 void scalefactor_calc_new (double sb_sample
[][3][SCALE_BLOCK
][SBLIMIT
],
180 unsigned int sf_index
[][3][SBLIMIT
], int nch
,
183 /* Optimized to use binary search instead of linear scan through the
184 scalefactor table; guarantees to find scalefactor in only 5
185 jumps/comparisons and not in {0 (lin. best) to 63 (lin. worst)}.
186 Scalefactors for subbands > sblimit are no longer computed.
187 Uses a single sblimit-loop.
188 Patrick De Smet Oct 1999. */
190 /* Using '--' loops to avoid possible "cmp value + bne/beq" compiler */
191 /* inefficiencies. Below loops should compile to "bne/beq" only code */
192 for (ch
= nch
; ch
--;)
193 for (gr
= 3; gr
--;) {
195 for (sb
= sblimit
; sb
--;) {
198 register double temp
;
199 unsigned int scale_fac
;
200 /* Determination of max. over each set of 12 subband samples: */
201 /* PDS TODO: maybe this could/should ??!! be integrated into */
202 /* the subband filtering routines? */
203 register double cur_max
= fabs (sb_sample
[ch
][gr
][SCALE_BLOCK
- 1][sb
]);
204 for (j
= SCALE_BLOCK
- 1; j
--;) {
205 if ((temp
= fabs (sb_sample
[ch
][gr
][j
][sb
])) > cur_max
)
208 /* PDS: binary search in the scalefactor table: */
209 /* This is the real speed up: */
210 for (l
= 16, scale_fac
= 32; l
; l
>>= 1) {
211 if (cur_max
<= scalefactor
[scale_fac
])
216 if (cur_max
> scalefactor
[scale_fac
])
218 sf_index
[ch
][gr
][sb
] = scale_fac
;
219 /* There is a direct way of working out the index, if the
220 maximum value is known but since
221 it involves a log it isn't really speedy.
222 Items in the scalefactor[] table are calculated by:
223 the n'th entry = 2 / (cuberoot(2) ^ n)
224 And so using a bit of maths you get:
225 index = (int)(log(2.0/cur_max) / LNCUBEROOTTWO);
226 fprintf(stdout,"cur_max %.14lf scalefactorindex %i multiple %.14lf\n",cur_max, scale_fac, scalefactor[scale_fac]);
231 INLINE
double mod (double a
)
233 return (a
> 0) ? a
: -a
;
236 /* Combine L&R channels into a mono joint stereo channel */
237 void combine_LR_new (double sb_sample
[2][3][SCALE_BLOCK
][SBLIMIT
],
238 double joint_sample
[3][SCALE_BLOCK
][SBLIMIT
], int sblimit
) {
241 for (sb
= 0; sb
< sblimit
; ++sb
)
242 for (sample
= 0; sample
< SCALE_BLOCK
; ++sample
)
243 for (gr
= 0; gr
< 3; ++gr
)
244 joint_sample
[gr
][sample
][sb
] =
245 .5 * (sb_sample
[0][gr
][sample
][sb
] + sb_sample
[1][gr
][sample
][sb
]);
248 /* PURPOSE:For each subband, puts the smallest scalefactor of the 3
249 associated with a frame into #max_sc#. This is used
250 used by Psychoacoustic Model I.
251 Someone in dist10 source code's history, somebody wrote the following:
252 "(I would recommend changin max_sc to min_sc)"
254 In psy model 1, the *maximum* out of the scale picked here and
255 the maximum SPL within each subband is selected. So I'd think that
256 a maximum here makes heaps of sense.
258 MFC FIX: Feb 2003 - is this only needed for psy model 1?
260 void find_sf_max (unsigned int sf_index
[2][3][SBLIMIT
], frame_info
* frame
,
261 double sf_max
[2][SBLIMIT
])
265 int nch
= frame
->nch
;
266 int sblimit
= frame
->sblimit
;
268 for (ch
= 0; ch
< nch
; ch
++)
269 for (sb
= 0; sb
< sblimit
; sb
++) {
270 for (gr
= 1, lowest_sf_index
= sf_index
[ch
][0][sb
]; gr
< 3; gr
++)
271 if (lowest_sf_index
> sf_index
[ch
][gr
][sb
])
272 lowest_sf_index
= sf_index
[ch
][gr
][sb
];
273 sf_max
[ch
][sb
] = multiple
[lowest_sf_index
];
275 for (sb
= sblimit
; sb
< SBLIMIT
; sb
++)
276 sf_max
[0][sb
] = sf_max
[1][sb
] = 1E-20;
279 /* sf_transmission_pattern
280 PURPOSE:For a given subband, determines whether to send 1, 2, or
281 all 3 of the scalefactors, and fills in the scalefactor
282 select information accordingly
284 This is From ISO11172 Sect C.1.5.2.5 "coding of scalefactors"
286 Table C.4 "LayerII Scalefactors Transmission Pattern"
288 void sf_transmission_pattern (unsigned int sf_index
[2][3][SBLIMIT
],
289 unsigned int sf_selectinfo
[2][SBLIMIT
],
292 int nch
= frame
->nch
;
293 int sblimit
= frame
->sblimit
;
295 int class[2], i
, j
, k
;
296 static int pattern
[5][5] = { {0x123, 0x122, 0x122, 0x133, 0x123},
297 {0x113, 0x111, 0x111, 0x444, 0x113},
298 {0x111, 0x111, 0x111, 0x333, 0x113},
299 {0x222, 0x222, 0x222, 0x333, 0x123},
300 {0x123, 0x122, 0x122, 0x133, 0x123}
303 for (k
= 0; k
< nch
; k
++)
304 for (i
= 0; i
< sblimit
; i
++) {
305 dscf
[0] = (sf_index
[k
][0][i
] - sf_index
[k
][1][i
]);
306 dscf
[1] = (sf_index
[k
][1][i
] - sf_index
[k
][2][i
]);
307 for (j
= 0; j
< 2; j
++) {
310 else if (dscf
[j
] > -3 && dscf
[j
] < 0)
312 else if (dscf
[j
] == 0)
314 else if (dscf
[j
] > 0 && dscf
[j
] < 3)
319 switch (pattern
[class[0]][class[1]]) {
321 sf_selectinfo
[k
][i
] = 0;
324 sf_selectinfo
[k
][i
] = 3;
325 sf_index
[k
][2][i
] = sf_index
[k
][1][i
];
328 sf_selectinfo
[k
][i
] = 3;
329 sf_index
[k
][1][i
] = sf_index
[k
][2][i
];
332 sf_selectinfo
[k
][i
] = 1;
333 sf_index
[k
][1][i
] = sf_index
[k
][0][i
];
336 sf_selectinfo
[k
][i
] = 2;
337 sf_index
[k
][1][i
] = sf_index
[k
][2][i
] = sf_index
[k
][0][i
];
340 sf_selectinfo
[k
][i
] = 2;
341 sf_index
[k
][0][i
] = sf_index
[k
][2][i
] = sf_index
[k
][1][i
];
344 sf_selectinfo
[k
][i
] = 2;
345 sf_index
[k
][0][i
] = sf_index
[k
][1][i
] = sf_index
[k
][2][i
];
348 sf_selectinfo
[k
][i
] = 2;
349 if (sf_index
[k
][0][i
] > sf_index
[k
][2][i
])
350 sf_index
[k
][0][i
] = sf_index
[k
][2][i
];
351 sf_index
[k
][1][i
] = sf_index
[k
][2][i
] = sf_index
[k
][0][i
];
356 void write_header (frame_info
* frame
, Bit_stream_struc
* bs
)
358 frame_header
*header
= frame
->header
;
360 putbits (bs
, 0xfff, 12); /* syncword 12 bits */
361 put1bit (bs
, header
->version
); /* ID 1 bit */
362 putbits (bs
, 4 - header
->lay
, 2); /* layer 2 bits */
363 put1bit (bs
, !header
->error_protection
); /* bit set => no err prot */
364 putbits (bs
, header
->bitrate_index
, 4);
365 putbits (bs
, header
->sampling_frequency
, 2);
366 put1bit (bs
, header
->padding
);
367 put1bit (bs
, header
->extension
); /* private_bit */
368 putbits (bs
, header
->mode
, 2);
369 putbits (bs
, header
->mode_ext
, 2);
370 put1bit (bs
, header
->copyright
);
371 put1bit (bs
, header
->original
);
372 putbits (bs
, header
->emphasis
, 2);
375 /*************************************************************************
376 encode_bit_alloc (Layer II)
378 PURPOSE:Writes bit allocation information onto bitstream
380 4,3,2, or 0 bits depending on the quantization table used.
382 ************************************************************************/
383 void write_bit_alloc (unsigned int bit_alloc
[2][SBLIMIT
],
384 frame_info
* frame
, Bit_stream_struc
* bs
)
387 int nch
= frame
->nch
;
388 int sblimit
= frame
->sblimit
;
389 int jsbound
= frame
->jsbound
;
391 for (sb
= 0; sb
< sblimit
; sb
++) {
393 for (ch
= 0; ch
< ((sb
< jsbound
) ? nch
: 1); ch
++)
394 putbits (bs
, bit_alloc
[ch
][sb
], nbal
[ line
[tablenum
][sb
] ]); // (*alloc)[sb][0].bits);
397 putbits (bs
, bit_alloc
[0][sb
], nbal
[ line
[tablenum
][sb
] ]); //(*alloc)[sb][0].bits);
401 /************************************************************************
404 PURPOSE:The encoded scalar factor information is arranged and
405 queued into the output fifo to be transmitted.
407 The three scale factors associated with
408 a given subband and channel are transmitted in accordance
409 with the scfsi, which is transmitted first.
411 ************************************************************************/
413 void write_scalefactors (unsigned int bit_alloc
[2][SBLIMIT
],
414 unsigned int sf_selectinfo
[2][SBLIMIT
],
415 unsigned int sf_index
[2][3][SBLIMIT
], frame_info
* frame
,
416 Bit_stream_struc
* bs
)
418 int nch
= frame
->nch
;
419 int sblimit
= frame
->sblimit
;
422 /* Write out the scalefactor selection information */
423 for (sb
= 0; sb
< sblimit
; sb
++)
424 for (ch
= 0; ch
< nch
; ch
++)
425 if (bit_alloc
[ch
][sb
])
426 putbits (bs
, sf_selectinfo
[ch
][sb
], 2);
428 for (sb
= 0; sb
< sblimit
; sb
++)
429 for (ch
= 0; ch
< nch
; ch
++)
430 if (bit_alloc
[ch
][sb
]) /* above jsbound, bit_alloc[0][i] == ba[1][i] */
431 switch (sf_selectinfo
[ch
][sb
]) {
433 for (gr
= 0; gr
< 3; gr
++)
434 putbits (bs
, sf_index
[ch
][gr
][sb
], 6);
438 putbits (bs
, sf_index
[ch
][0][sb
], 6);
439 putbits (bs
, sf_index
[ch
][2][sb
], 6);
442 putbits (bs
, sf_index
[ch
][0][sb
], 6);
447 /* ISO11172 Table C.6 Layer II quantization co-efficients */
448 static double a
[18] = {
450 0.750000000, 0.625000000, 0.875000000, 0.562500000, 0.937500000,
451 0.968750000, 0.984375000, 0.992187500, 0.996093750, 0.998046875,
452 0.999023438, 0.999511719, 0.999755859, 0.999877930, 0.999938965,
453 0.999969482, 0.999984741
456 static double b
[18] = {
458 -0.250000000, -0.375000000, -0.125000000, -0.437500000, -0.062500000,
459 -0.031250000, -0.015625000, -0.007812500, -0.003906250, -0.001953125,
460 -0.000976563, -0.000488281, -0.000244141, -0.000122070, -0.000061035,
461 -0.000030518, -0.000015259
464 /************************************************************************
465 subband_quantization (Layer II)
467 PURPOSE:Quantizes subband samples to appropriate number of bits
469 SEMANTICS: Subband samples are divided by their scalefactors, which
470 makes the quantization more efficient. The scaled samples are
471 quantized by the function a*x+b, where a and b are functions of
472 the number of quantization levels. The result is then truncated
473 to the appropriate number of bits and the MSB is inverted.
475 Note that for fractional 2's complement, inverting the MSB for a
476 negative number x is equivalent to adding 1 to it.
478 ************************************************************************/
480 subband_quantization_new (unsigned int sf_index
[2][3][SBLIMIT
],
481 double sb_samples
[2][3][SCALE_BLOCK
][SBLIMIT
],
482 unsigned int j_scale
[3][SBLIMIT
],
483 double j_samps
[3][SCALE_BLOCK
][SBLIMIT
],
484 unsigned int bit_alloc
[2][SBLIMIT
],
485 unsigned int sbband
[2][3][SCALE_BLOCK
][SBLIMIT
],
488 int sb
, j
, ch
, gr
, qnt_coeff_index
, sig
;
489 int nch
= frame
->nch
;
490 int sblimit
= frame
->sblimit
;
491 int jsbound
= frame
->jsbound
;
494 for (gr
= 0; gr
< 3; gr
++)
495 for (j
= 0; j
< SCALE_BLOCK
; j
++)
496 for (sb
= 0; sb
< sblimit
; sb
++)
497 for (ch
= 0; ch
< ((sb
< jsbound
) ? nch
: 1); ch
++)
499 if (bit_alloc
[ch
][sb
]) {
500 /* scale and quantize FLOATing point sample */
501 if (nch
== 2 && sb
>= jsbound
) /* use j-stereo samples */
502 d
= j_samps
[gr
][j
][sb
] / scalefactor
[j_scale
[gr
][sb
]];
504 d
= sb_samples
[ch
][gr
][j
][sb
] / scalefactor
[sf_index
[ch
][gr
][sb
]];
506 /* Check that the wrong scale factor hasn't been chosen -
507 which would result in a scaled sample being > 1.0
508 This error shouldn't ever happen *unless* something went wrong in
512 fprintf (stderr, "Not scaled properly %d %d %d %d\n", ch, gr, j,
517 /* 'index' indicates which "step line" we are using */
518 int index
= line
[tablenum
][sb
];
520 /* Find the "step index" within that line */
521 qnt_coeff_index
= step_index
[index
][bit_alloc
[ch
][sb
]];
523 d
= d
* a
[qnt_coeff_index
] + b
[qnt_coeff_index
];
525 /* extract MSB N-1 bits from the FLOATing point sample */
533 sbband
[ch
][gr
][j
][sb
] = (unsigned int) (d
* (double)steps2n
[qnt_coeff_index
]);
534 /* tag the inverted sign bit to sbband at position N */
535 /* The bit inversion is a must for grouping with 3,5,9 steps
536 so it is done for all subbands */
538 sbband
[ch
][gr
][j
][sb
] |= steps2n
[qnt_coeff_index
];
541 /* Set everything above the sblimit to 0 */
542 for (ch
= 0; ch
< nch
; ch
++)
543 for (gr
= 0; gr
< 3; gr
++)
544 for (sb
= 0; sb
< SCALE_BLOCK
; sb
++)
545 for (j
= sblimit
; j
< SBLIMIT
; j
++)
546 sbband
[ch
][gr
][sb
][j
] = 0;
549 /************************************************************************
552 PURPOSE:Put one frame of subband samples on to the bitstream
554 SEMANTICS: The number of bits allocated per sample is read from
555 the bit allocation information #bit_alloc#. Layer 2
556 supports writing grouped samples for quantization steps
557 that are not a power of 2.
559 ***********************************************************************/
560 void write_samples_new (unsigned int sbband
[2][3][SCALE_BLOCK
][SBLIMIT
],
561 unsigned int bit_alloc
[2][SBLIMIT
],
562 frame_info
* frame
, Bit_stream_struc
* bs
)
565 unsigned int sb
, j
, ch
, gr
, x
, y
;
566 int nch
= frame
->nch
;
567 int sblimit
= frame
->sblimit
;
568 int jsbound
= frame
->jsbound
;
570 for (gr
= 0; gr
< 3; gr
++)
571 for (j
= 0; j
< SCALE_BLOCK
; j
+= 3)
572 for (sb
= 0; sb
< sblimit
; sb
++)
573 for (ch
= 0; ch
< ((sb
< jsbound
) ? nch
: 1); ch
++)
575 if (bit_alloc
[ch
][sb
]) {
576 int thisline
= line
[tablenum
][sb
];
577 int thisstep_index
= step_index
[thisline
][bit_alloc
[ch
][sb
]];
578 /* Check how many samples per codeword */
579 if (group
[thisstep_index
] == 3) {
580 /* Going to send 1 sample per codeword -> 3 samples */
581 for (x
= 0; x
< 3; x
++) {
582 putbits (bs
, sbband
[ch
][gr
][j
+ x
][sb
], bits
[thisstep_index
]);
585 /* ISO11172 Sec C.1.5.2.8
586 If steps=3, 5 or 9, then three consecutive samples are coded
587 as one codeword i.e. only one value (V) is transmitted for this
588 triplet. If the 3 subband samples are x,y,z then
589 V = (steps*steps)*z + steps*y +x
591 y
= steps
[thisstep_index
];
593 sbband
[ch
][gr
][j
][sb
] + sbband
[ch
][gr
][j
+ 1][sb
] * y
+
594 sbband
[ch
][gr
][j
+ 2][sb
] * y
* y
;
595 putbits (bs
, temp
, bits
[thisstep_index
]);
601 //#include "bit_alloc_new.c"
602 /***************************************************************************************/
603 /* Bit Allocation Routines */
606 /************************************************************************
608 * bits_for_nonoise (Layer II)
610 * PURPOSE:Returns the number of bits required to produce a
611 * mask-to-noise ratio better or equal to the noise/no_noise threshold.
614 * bbal = # bits needed for encoding bit allocation
615 * bsel = # bits needed for encoding scalefactor select information
616 * banc = # bits needed for ancillary data (header info included)
618 * For each subband and channel, will add bits until one of the
620 * - Hit maximum number of bits we can allocate for that subband
621 * - MNR is better than or equal to the minimum masking level
623 * Then the bits required for scalefactors, scfsi, bit allocation,
624 * and the subband samples are tallied (#req_bits#) and returned.
626 * (NOISY_MIN_MNR) is the smallest MNR a subband can have before it is
627 * counted as 'noisy' by the logic which chooses the number of JS
630 * Joint stereo is supported.
632 ************************************************************************/
634 int bits_for_nonoise_new (double SMR
[2][SBLIMIT
],
635 unsigned int scfsi
[2][SBLIMIT
], frame_info
* frame
, float min_mnr
,
636 unsigned int bit_alloc
[2][SBLIMIT
])
639 int nch
= frame
->nch
;
640 int sblimit
= frame
->sblimit
;
641 int jsbound
= frame
->jsbound
;
642 int req_bits
= 0, bbal
= 0, berr
= 0, banc
= 32;
643 int maxAlloc
, sel_bits
, sc_bits
, smp_bits
;
644 static int sfsPerScfsi
[] = { 3, 2, 1, 2 }; /* lookup # sfs per scfsi */
647 This works out the basic number of bits just to get a valid (but empty)
649 This needs to be done for every frame, since a joint_stereo frame
650 will change the number of basic bits (depending on the sblimit in
651 the particular js mode that's been selected */
653 /* Make sure there's room for the error protection bits */
654 if (frame
->header
->error_protection
)
659 /* Count the number of bits required to encode the quantization index for both
660 channels in each subband. If we're above the jsbound, then pretend we only
662 for (sb
= 0; sb
< jsbound
; ++sb
)
663 bbal
+= nch
* nbal
[ line
[tablenum
][sb
] ]; //(*alloc)[sb][0].bits;
664 for (sb
= jsbound
; sb
< sblimit
; ++sb
)
665 bbal
+= nbal
[ line
[tablenum
][sb
] ]; //(*alloc)[sb][0].bits;
666 req_bits
= banc
+ bbal
+ berr
;
668 for (sb
= 0; sb
< sblimit
; ++sb
)
669 for (ch
= 0; ch
< ((sb
< jsbound
) ? nch
: 1); ++ch
) {
670 int thisline
= line
[tablenum
][sb
];
672 /* How many possible steps are there to choose from ? */
673 maxAlloc
= (1 << nbal
[ line
[tablenum
][sb
] ]) -1; //(*alloc)[sb][0].bits) - 1;
674 sel_bits
= sc_bits
= smp_bits
= 0;
675 /* Keep choosing the next number of steps (and hence our SNR value)
676 until we have the required MNR value */
677 for (ba
= 0; ba
< maxAlloc
- 1; ++ba
) {
678 int thisstep_index
= step_index
[thisline
][ba
];
679 if ((SNR
[thisstep_index
] - SMR
[ch
][sb
]) >= min_mnr
)
680 break; /* we found enough bits */
682 if (nch
== 2 && sb
>= jsbound
) /* check other JS channel */
683 for (; ba
< maxAlloc
- 1; ++ba
) {
684 int thisstep_index
= step_index
[thisline
][ba
];
685 if ((SNR
[thisstep_index
] - SMR
[1-ch
][sb
]) >= min_mnr
)
689 //smp_bits = SCALE_BLOCK * ((*alloc)[sb][ba].group * (*alloc)[sb][ba].bits);
690 int thisstep_index
= step_index
[thisline
][ba
];
691 smp_bits
= SCALE_BLOCK
* group
[thisstep_index
] * bits
[thisstep_index
];
692 /* scale factor bits required for subband */
694 sc_bits
= 6 * sfsPerScfsi
[scfsi
[ch
][sb
]];
695 if (nch
== 2 && sb
>= jsbound
) {
696 /* each new js sb has L+R scfsis */
698 sc_bits
+= 6 * sfsPerScfsi
[scfsi
[1 - ch
][sb
]];
700 req_bits
+= smp_bits
+ sel_bits
+ sc_bits
;
702 bit_alloc
[ch
][sb
] = ba
;
709 /************************************************************************
711 * main_bit_allocation (Layer II)
713 * PURPOSE:For joint stereo mode, determines which of the 4 joint
714 * stereo modes is needed. Then calls *_a_bit_allocation(), which
715 * allocates bits for each of the subbands until there are no more bits
716 * left, or the MNR is at the noise/no_noise threshold.
720 * For joint stereo mode, joint stereo is changed to stereo if
721 * there are enough bits to encode stereo at or better than the
722 * no-noise threshold (NOISY_MIN_MNR). Otherwise, the system
723 * iteratively allocates less bits by using joint stereo until one
724 * of the following occurs:
725 * - there are no more noisy subbands (MNR >= NOISY_MIN_MNR)
726 * - mode_ext has been reduced to 0, which means that all but the
727 * lowest 4 subbands have been converted from stereo to joint
728 * stereo, and no more subbands may be converted
730 * This function calls *_bits_for_nonoise() and *_a_bit_allocation().
732 ************************************************************************/
733 void main_bit_allocation_new (double SMR
[2][SBLIMIT
],
734 unsigned int scfsi
[2][SBLIMIT
],
735 unsigned int bit_alloc
[2][SBLIMIT
], int *adb
,
736 frame_info
* frame
, options
* glopts
)
739 int mode
, mode_ext
, lay
;
740 int rq_db
; /* av_db = *adb; Not Used MFC Nov 99 */
742 /* these are the tables which specify the limits within which the VBR can vary
743 You can't vary outside these ranges, otherwise a new alloc table would have to
744 be loaded in the middle of encoding. This VBR hack is dodgy - the standard
745 says that LayerII decoders don't have to support a variable bitrate, but Layer3
746 decoders must do so. Hence, it is unlikely that a compliant layer2 decoder would be
747 written to dynmically change allocation tables. *BUT* a layer3 encoder might handle it
748 by default, meaning we could switch tables mid-encode and enjoy a wider range of bitrates
749 for the VBR encoding.
750 None of this needs to be done for LSF, since there is only *one* possible alloc table in LSF
752 int vbrlimits
[2][3][2] = {
764 static int lower
= 10, upper
= 10;
765 static int bitrateindextobits
[15] =
766 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
772 frame_header
*header
= frame
->header
;
774 if (header
->version
== 0) {
775 /* LSF: so can use any bitrate index from 1->15 */
779 if (frame
->actual_mode
== MPG_MD_MONO
)
781 sfreq
= header
->sampling_frequency
;
782 lower
= vbrlimits
[nch
-1][sfreq
][0];
783 upper
= vbrlimits
[nch
-1][sfreq
][1];
785 if (glopts
->verbosity
> 2)
786 fprintf (stdout
, "VBR bitrate index limits [%i -> %i]\n", lower
, upper
);
789 /* set up a conversion table for bitrateindex->bits for this version/sampl freq
790 This will be used to find the best bitrate to cope with the number of bits that
791 are needed (as determined by VBR_bits_for_nonoise) */
793 frame_header
*header
= frame
->header
;
794 for (brindex
= lower
; brindex
<= upper
; brindex
++) {
795 bitrateindextobits
[brindex
] =
796 (int) (1152.0 / s_freq
[header
->version
][header
->sampling_frequency
]) *
797 ((double) bitrate
[header
->version
][brindex
]);
803 if ((mode
= frame
->actual_mode
) == MPG_MD_JOINT_STEREO
) {
804 frame
->header
->mode
= MPG_MD_STEREO
;
805 frame
->header
->mode_ext
= 0;
806 frame
->jsbound
= frame
->sblimit
;
807 if ((rq_db
= bits_for_nonoise_new (SMR
, scfsi
, frame
, 0, bit_alloc
)) > *adb
) {
808 frame
->header
->mode
= MPG_MD_JOINT_STEREO
;
809 mode_ext
= 4; /* 3 is least severe reduction */
810 lay
= frame
->header
->lay
;
813 frame
->jsbound
= js_bound (mode_ext
);
814 rq_db
= bits_for_nonoise_new (SMR
, scfsi
, frame
, 0, bit_alloc
);
816 while ((rq_db
> *adb
) && (mode_ext
> 0));
817 frame
->header
->mode_ext
= mode_ext
;
818 } /* well we either eliminated noisy sbs or mode_ext == 0 */
821 /* decide on which bit allocation method to use */
822 if (glopts
->vbr
== FALSE
) {
823 /* Just do the old bit allocation method */
824 noisy_sbs
= a_bit_allocation_new (SMR
, scfsi
, bit_alloc
, adb
, frame
);
826 /* do the VBR bit allocation method */
827 frame
->header
->bitrate_index
= lower
;
828 *adb
= available_bits (frame
->header
, glopts
);
833 /* Work out how many bits are needed for there to be no noise (ie all MNR > VBRLEVEL) */
835 bits_for_nonoise_new (SMR
, scfsi
, frame
, glopts
->vbrlevel
, bit_alloc
);
837 /* Look up this value in the bitrateindextobits table to find what bitrate we should use for
839 for (brindex
= lower
; brindex
<= upper
; brindex
++) {
840 if (bitrateindextobits
[brindex
] > req
) {
841 /* this method always *overestimates* the bits that are needed
842 i.e. it will usually guess right but
843 when it's wrong it'll guess a higher bitrate than actually required.
844 e.g. on "messages from earth" track 6, the guess was
845 wrong on 75/36341 frames. each time it guessed higher.
847 guessindex
= brindex
;
852 /* Just for sanity */
857 frame
->header
->bitrate_index
= guessindex
;
858 *adb
= available_bits (frame
->header
, glopts
);
860 /* update the statistics */
861 vbrstats_new
[frame
->header
->bitrate_index
]++;
863 if (glopts
->verbosity
> 2) {
864 /* print out the VBR stats every 1000th frame */
865 static int count
= 0;
867 if ((count
++ % 1000) == 0) {
868 for (i
= 1; i
< 15; i
++)
869 fprintf (stdout
, "%4i ", vbrstats_new
[i
]);
870 fprintf (stdout
, "\n");
873 /* Print out *every* frames bitrateindex, bits required, and bits available at this bitrate */
874 if (glopts
->verbosity
> 5)
876 "> bitrate index %2i has %i bits available to encode the %i bits\n",
877 frame
->header
->bitrate_index
, *adb
,
878 bits_for_nonoise_new (SMR
, scfsi
, frame
,
879 glopts
->vbrlevel
, bit_alloc
));
884 VBR_bit_allocation_new (SMR
, scfsi
, bit_alloc
, adb
, frame
, glopts
);
888 void VBR_maxmnr_new (double mnr
[2][SBLIMIT
], char used
[2][SBLIMIT
], int sblimit
,
889 int nch
, int *min_sb
, int *min_ch
, options
* glopts
)
900 /* Keep going until all subbands have reached the MNR level that we specified */
901 for (ch
=0;ch
<nch
;ch
++)
902 for (sb
=0;sb
<sblimit
;sb
++)
903 if (mnr
[ch
][sb
] < glopts
->vbrlevel
) {
906 //fprintf(stdout,".");
912 /* Then start adding bits to whichever is the min MNR */
913 for (ch
= 0; ch
< nch
; ++ch
)
914 for (sb
= 0; sb
< sblimit
; sb
++)
915 if (used
[ch
][sb
] != 2 && small
> mnr
[ch
][sb
]) {
920 //fprintf(stdout,"Min sb: %i\n",*min_sb);
922 /********************
924 VBR_bit_allocation is different to the normal a_bit_allocation in that
925 it is known beforehand that there are definitely enough bits to do what we
926 have to - i.e. a bitrate was specificially chosen in main_bit_allocation so
927 that we have enough bits to encode what we have to.
928 This function should take that into account and just greedily assign
929 the bits, rather than fussing over the minimum MNR subband - we know
930 each subband gets its required bits, why quibble?
931 This function doesn't chew much CPU, so I haven't made any attempt
933 *********************/
934 int VBR_bit_allocation_new (double SMR
[2][SBLIMIT
],
935 unsigned int scfsi
[2][SBLIMIT
],
936 unsigned int bit_alloc
[2][SBLIMIT
], int *adb
,
937 frame_info
* frame
, options
*glopts
)
939 int sb
, min_ch
, min_sb
, oth_ch
, ch
, increment
, scale
, seli
, ba
;
940 int bspl
, bscf
, bsel
, ad
, bbal
= 0;
941 double mnr
[2][SBLIMIT
];
942 char used
[2][SBLIMIT
];
943 int nch
= frame
->nch
;
944 int sblimit
= frame
->sblimit
;
945 int jsbound
= frame
->jsbound
;
946 //al_table *alloc = frame->alloc;
947 static char init
= 0;
948 static int banc
= 32, berr
= 0;
949 static int sfsPerScfsi
[] = { 3, 2, 1, 2 }; /* lookup # sfs per scfsi */
955 if (frame
->header
->error_protection
)
956 berr
= 16; /* added 92-08-11 shn */
959 /* No need to worry about jsbound here as JS is disabled for VBR mode */
960 for (sb
= 0; sb
< sblimit
; sb
++)
961 bbal
+= nch
* nbal
[ line
[tablenum
][sb
] ];
962 *adb
-= bbal
+ berr
+ banc
;
965 for (sb
= 0; sb
< sblimit
; sb
++)
966 for (ch
= 0; ch
< nch
; ch
++) {
967 mnr
[ch
][sb
] = SNR
[0] - SMR
[ch
][sb
];
968 bit_alloc
[ch
][sb
] = 0;
971 bspl
= bscf
= bsel
= 0;
974 /* locate the subband with minimum SMR */
975 VBR_maxmnr_new (mnr
, used
, sblimit
, nch
, &min_sb
, &min_ch
, glopts
);
977 if (min_sb
> -1) { /* there was something to find */
978 int thisline
= line
[tablenum
][min_sb
]; {
979 /* find increase in bit allocation in subband [min] */
980 int nextstep_index
= step_index
[thisline
][bit_alloc
[min_ch
][min_sb
]+1];
981 increment
= SCALE_BLOCK
* group
[nextstep_index
] * bits
[nextstep_index
];
983 if (used
[min_ch
][min_sb
]) {
984 /* If we've already increased the limit on this ch/sb, then
985 subtract the last thing that we added */
986 thisstep_index
= step_index
[thisline
][bit_alloc
[min_ch
][min_sb
]];
987 increment
-= SCALE_BLOCK
* group
[thisstep_index
] * bits
[thisstep_index
];
990 /* scale factor bits required for subband [min] */
991 oth_ch
= 1 - min_ch
; /* above js bound, need both chans */
992 if (used
[min_ch
][min_sb
])
994 else { /* this channel had no bits or scfs before */
996 scale
= 6 * sfsPerScfsi
[scfsi
[min_ch
][min_sb
]];
997 if (nch
== 2 && min_sb
>= jsbound
) {
998 /* each new js sb has L+R scfsis */
1000 scale
+= 6 * sfsPerScfsi
[scfsi
[oth_ch
][min_sb
]];
1004 /* check to see enough bits were available for */
1005 /* increasing resolution in the minimum band */
1006 if (ad
>= bspl
+ bscf
+ bsel
+ seli
+ scale
+ increment
) {
1007 /* Then there are enough bits to have another go at allocating */
1008 ba
= ++bit_alloc
[min_ch
][min_sb
]; /* next up alloc */
1009 bspl
+= increment
; /* bits for subband sample */
1010 bscf
+= scale
; /* bits for scale factor */
1011 bsel
+= seli
; /* bits for scfsi code */
1012 used
[min_ch
][min_sb
] = 1; /* subband has bits */
1013 thisstep_index
= step_index
[thisline
][ba
];
1014 mnr
[min_ch
][min_sb
] = SNR
[thisstep_index
] - SMR
[min_ch
][min_sb
];
1015 /* Check if this min_sb subband has been fully allocated max bits */
1016 if (ba
>= (1 << nbal
[ line
[tablenum
][min_sb
] ]) -1 ) //(*alloc)[min_sb][0].bits) - 1)
1017 used
[min_ch
][min_sb
] = 2; /* don't let this sb get any more bits */
1019 used
[min_ch
][min_sb
] = 2; /* can't increase this alloc */
1022 while (min_sb
> -1); /* until could find no channel */
1024 /* Calculate the number of bits left */
1025 ad
-= bspl
+ bscf
+ bsel
;
1027 for (ch
= 0; ch
< nch
; ch
++)
1028 for (sb
= sblimit
; sb
< SBLIMIT
; sb
++)
1029 bit_alloc
[ch
][sb
] = 0;
1036 /************************************************************************
1038 * a_bit_allocation (Layer II)
1040 * PURPOSE:Adds bits to the subbands with the lowest mask-to-noise
1041 * ratios, until the maximum number of bits for the subband has
1045 * 1. Find the subband and channel with the smallest MNR (#min_sb#,
1047 * 2. Calculate the increase in bits needed if we increase the bit
1048 * allocation to the next higher level
1049 * 3. If there are enough bits available for increasing the resolution
1050 * in #min_sb#, #min_ch#, and the subband has not yet reached its
1051 * maximum allocation, update the bit allocation, MNR, and bits
1052 available accordingly
1053 * 4. Repeat until there are no more bits left, or no more available
1054 * subbands. (A subband is still available until the maximum
1055 * number of bits for the subband has been allocated, or there
1056 * aren't enough bits to go to the next higher resolution in the
1059 ************************************************************************/
1061 void maxmnr_new (double mnr
[2][SBLIMIT
], char used
[2][SBLIMIT
], int sblimit
,
1062 int nch
, int *min_sb
, int *min_ch
)
1070 for (ch
= 0; ch
< nch
; ++ch
)
1071 for (sb
= 0; sb
< sblimit
; sb
++)
1072 if (used
[ch
][sb
] != 2 && small
> mnr
[ch
][sb
]) {
1073 small
= mnr
[ch
][sb
];
1078 int a_bit_allocation_new (double SMR
[2][SBLIMIT
],
1079 unsigned int scfsi
[2][SBLIMIT
],
1080 unsigned int bit_alloc
[2][SBLIMIT
], int *adb
,
1083 int sb
, min_ch
, min_sb
, oth_ch
, ch
, increment
, scale
, seli
, ba
;
1084 int bspl
, bscf
, bsel
, ad
, bbal
= 0;
1085 double mnr
[2][SBLIMIT
];
1086 char used
[2][SBLIMIT
];
1087 int nch
= frame
->nch
;
1088 int sblimit
= frame
->sblimit
;
1089 int jsbound
= frame
->jsbound
;
1090 //al_table *alloc = frame->alloc;
1091 static char init
= 0;
1092 static int banc
= 32, berr
= 0;
1093 static int sfsPerScfsi
[] = { 3, 2, 1, 2 }; /* lookup # sfs per scfsi */
1099 if (frame
->header
->error_protection
)
1100 berr
= 16; /* added 92-08-11 shn */
1103 for (sb
= 0; sb
< jsbound
; sb
++)
1104 bbal
+= nch
* nbal
[ line
[tablenum
][sb
] ]; //(*alloc)[sb][0].bits;
1105 for (sb
= jsbound
; sb
< sblimit
; sb
++)
1106 bbal
+= nbal
[ line
[tablenum
][sb
] ]; //(*alloc)[sb][0].bits;
1107 *adb
-= bbal
+ berr
+ banc
;
1110 for (sb
= 0; sb
< sblimit
; sb
++)
1111 for (ch
= 0; ch
< nch
; ch
++) {
1112 mnr
[ch
][sb
] = SNR
[0] - SMR
[ch
][sb
];
1113 bit_alloc
[ch
][sb
] = 0;
1116 bspl
= bscf
= bsel
= 0;
1119 /* locate the subband with minimum SMR */
1120 maxmnr_new (mnr
, used
, sblimit
, nch
, &min_sb
, &min_ch
);
1122 if (min_sb
> -1) { /* there was something to find */
1123 int thisline
= line
[tablenum
][min_sb
]; {
1124 /* find increase in bit allocation in subband [min] */
1125 int nextstep_index
= step_index
[thisline
][bit_alloc
[min_ch
][min_sb
]+1];
1126 increment
= SCALE_BLOCK
* group
[nextstep_index
] * bits
[nextstep_index
];
1128 if (used
[min_ch
][min_sb
]) {
1129 /* If we've already increased the limit on this ch/sb, then
1130 subtract the last thing that we added */
1131 thisstep_index
= step_index
[thisline
][bit_alloc
[min_ch
][min_sb
]];
1132 increment
-= SCALE_BLOCK
* group
[thisstep_index
] * bits
[thisstep_index
];
1135 /* scale factor bits required for subband [min] */
1136 oth_ch
= 1 - min_ch
; /* above js bound, need both chans */
1137 if (used
[min_ch
][min_sb
])
1139 else { /* this channel had no bits or scfs before */
1141 scale
= 6 * sfsPerScfsi
[scfsi
[min_ch
][min_sb
]];
1142 if (nch
== 2 && min_sb
>= jsbound
) {
1143 /* each new js sb has L+R scfsis */
1145 scale
+= 6 * sfsPerScfsi
[scfsi
[oth_ch
][min_sb
]];
1149 /* check to see enough bits were available for */
1150 /* increasing resolution in the minimum band */
1151 if (ad
>= bspl
+ bscf
+ bsel
+ seli
+ scale
+ increment
) {
1152 /* Then there are enough bits to have another go at allocating */
1153 ba
= ++bit_alloc
[min_ch
][min_sb
]; /* next up alloc */
1154 bspl
+= increment
; /* bits for subband sample */
1155 bscf
+= scale
; /* bits for scale factor */
1156 bsel
+= seli
; /* bits for scfsi code */
1157 used
[min_ch
][min_sb
] = 1; /* subband has bits */
1158 thisstep_index
= step_index
[thisline
][ba
];
1159 mnr
[min_ch
][min_sb
] = SNR
[thisstep_index
] - SMR
[min_ch
][min_sb
];
1160 /* Check if this min_sb subband has been fully allocated max bits */
1161 if (ba
>= (1 << nbal
[ line
[tablenum
][min_sb
] ]) -1 ) //(*alloc)[min_sb][0].bits) - 1)
1162 used
[min_ch
][min_sb
] = 2; /* don't let this sb get any more bits */
1164 used
[min_ch
][min_sb
] = 2; /* can't increase this alloc */
1166 if (min_sb
>= jsbound
&& nch
== 2) {
1167 /* above jsbound, alloc applies L+R */
1168 ba
= bit_alloc
[oth_ch
][min_sb
] = bit_alloc
[min_ch
][min_sb
];
1169 used
[oth_ch
][min_sb
] = used
[min_ch
][min_sb
];
1170 thisstep_index
= step_index
[thisline
][ba
];
1171 mnr
[oth_ch
][min_sb
] = SNR
[thisstep_index
] - SMR
[oth_ch
][min_sb
];
1172 //mnr[oth_ch][min_sb] = SNR[(*alloc)[min_sb][ba].quant + 1] - SMR[oth_ch][min_sb];
1177 while (min_sb
> -1); /* until could find no channel */
1179 /* Calculate the number of bits left */
1180 ad
-= bspl
+ bscf
+ bsel
;
1182 for (ch
= 0; ch
< nch
; ch
++)
1183 for (sb
= sblimit
; sb
< SBLIMIT
; sb
++)
1184 bit_alloc
[ch
][sb
] = 0;