return 9;
}
+static int compute_high_band_values(struct private_wmadec_data *pwd,
+ int bsize, int nb_coefs[MAX_CHANNELS])
+{
+ int ch;
+
+ if (pwd->use_noise_coding) {
+ for (ch = 0; ch < pwd->ahi.channels; ch++) {
+ if (pwd->channel_coded[ch]) {
+ int i, m, a;
+ m = pwd->exponent_high_sizes[bsize];
+ for (i = 0; i < m; i++) {
+ a = get_bit(&pwd->gb);
+ pwd->high_band_coded[ch][i] = a;
+ /* if noise coding, the coefficients are not transmitted */
+ if (a)
+ nb_coefs[ch] -=
+ pwd->
+ exponent_high_bands[bsize]
+ [i];
+ }
+ }
+ }
+ for (ch = 0; ch < pwd->ahi.channels; ch++) {
+ if (pwd->channel_coded[ch]) {
+ int i, n, val;
+
+ n = pwd->exponent_high_sizes[bsize];
+ val = (int) 0x80000000;
+ for (i = 0; i < n; i++) {
+ if (pwd->high_band_coded[ch][i]) {
+ if (val == (int) 0x80000000) {
+ val =
+ get_bits(&pwd->gb,
+ 7) - 19;
+ } else {
+ int code =
+ get_vlc(&pwd->gb,
+ pwd->
+ hgain_vlc.
+ table,
+ HGAINVLCBITS,
+ HGAINMAX);
+ if (code < 0)
+ return -1;
+ val += code - 18;
+ }
+ pwd->high_band_values[ch][i] =
+ val;
+ }
+ }
+ }
+ }
+ }
+ return 1;
+}
/**
* @return 0 if OK. 1 if last block of frame. return -1 if
* unrecorrable error.
for (ch = 0; ch < pwd->ahi.channels; ch++)
nb_coefs[ch] = n;
- /* complex coding */
- if (pwd->use_noise_coding) {
- for (ch = 0; ch < pwd->ahi.channels; ch++) {
- if (pwd->channel_coded[ch]) {
- int i, m, a;
- m = pwd->exponent_high_sizes[bsize];
- for (i = 0; i < m; i++) {
- a = get_bit(&pwd->gb);
- pwd->high_band_coded[ch][i] = a;
- /* if noise coding, the coefficients are not transmitted */
- if (a)
- nb_coefs[ch] -=
- pwd->
- exponent_high_bands[bsize]
- [i];
- }
- }
- }
- for (ch = 0; ch < pwd->ahi.channels; ch++) {
- if (pwd->channel_coded[ch]) {
- int i, val;
-
- n = pwd->exponent_high_sizes[bsize];
- val = (int) 0x80000000;
- for (i = 0; i < n; i++) {
- if (pwd->high_band_coded[ch][i]) {
- if (val == (int) 0x80000000) {
- val =
- get_bits(&pwd->gb,
- 7) - 19;
- } else {
- code =
- get_vlc(&pwd->gb,
- pwd->
- hgain_vlc.
- table,
- HGAINVLCBITS,
- HGAINMAX);
- if (code < 0)
- return -1;
- val += code - 18;
- }
- pwd->high_band_values[ch][i] =
- val;
- }
- }
- }
- }
- }
+ if (compute_high_band_values(pwd, bsize, nb_coefs) < 0)
+ return -1;
/* exponents can be reused in short blocks. */
if ((pwd->block_len_bits == pwd->frame_len_bits) || get_bit(&pwd->gb)) {