+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;
+}