Implements OPUS_{GET,SET}_LSB_DEPTH
[opus.git] / celt / quant_bands.c
1 /* Copyright (c) 2007-2008 CSIRO
2    Copyright (c) 2007-2009 Xiph.Org Foundation
3    Written by Jean-Marc Valin */
4 /*
5    Redistribution and use in source and binary forms, with or without
6    modification, are permitted provided that the following conditions
7    are met:
8
9    - Redistributions of source code must retain the above copyright
10    notice, this list of conditions and the following disclaimer.
11
12    - Redistributions in binary form must reproduce the above copyright
13    notice, this list of conditions and the following disclaimer in the
14    documentation and/or other materials provided with the distribution.
15
16    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17    ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19    A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
20    OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
21    EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
23    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
24    LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
25    NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29 #ifdef HAVE_CONFIG_H
30 #include "config.h"
31 #endif
32
33 #include "quant_bands.h"
34 #include "laplace.h"
35 #include <math.h>
36 #include "os_support.h"
37 #include "arch.h"
38 #include "mathops.h"
39 #include "stack_alloc.h"
40 #include "rate.h"
41
42 #ifdef FIXED_POINT
43 /* Mean energy in each band quantized in Q4 */
44 const signed char eMeans[25] = {
45       103,100, 92, 85, 81,
46        77, 72, 70, 78, 75,
47        73, 71, 78, 74, 69,
48        72, 70, 74, 76, 71,
49        60, 60, 60, 60, 60
50 };
51 #else
52 /* Mean energy in each band quantized in Q4 and converted back to float */
53 const opus_val16 eMeans[25] = {
54       6.437500f, 6.250000f, 5.750000f, 5.312500f, 5.062500f,
55       4.812500f, 4.500000f, 4.375000f, 4.875000f, 4.687500f,
56       4.562500f, 4.437500f, 4.875000f, 4.625000f, 4.312500f,
57       4.500000f, 4.375000f, 4.625000f, 4.750000f, 4.437500f,
58       3.750000f, 3.750000f, 3.750000f, 3.750000f, 3.750000f
59 };
60 #endif
61 /* prediction coefficients: 0.9, 0.8, 0.65, 0.5 */
62 #ifdef FIXED_POINT
63 static const opus_val16 pred_coef[4] = {29440, 26112, 21248, 16384};
64 static const opus_val16 beta_coef[4] = {30147, 22282, 12124, 6554};
65 static const opus_val16 beta_intra = 4915;
66 #else
67 static const opus_val16 pred_coef[4] = {29440/32768., 26112/32768., 21248/32768., 16384/32768.};
68 static const opus_val16 beta_coef[4] = {30147/32768., 22282/32768., 12124/32768., 6554/32768.};
69 static const opus_val16 beta_intra = 4915/32768.;
70 #endif
71
72 /*Parameters of the Laplace-like probability models used for the coarse energy.
73   There is one pair of parameters for each frame size, prediction type
74    (inter/intra), and band number.
75   The first number of each pair is the probability of 0, and the second is the
76    decay rate, both in Q8 precision.*/
77 static const unsigned char e_prob_model[4][2][42] = {
78    /*120 sample frames.*/
79    {
80       /*Inter*/
81       {
82           72, 127,  65, 129,  66, 128,  65, 128,  64, 128,  62, 128,  64, 128,
83           64, 128,  92,  78,  92,  79,  92,  78,  90,  79, 116,  41, 115,  40,
84          114,  40, 132,  26, 132,  26, 145,  17, 161,  12, 176,  10, 177,  11
85       },
86       /*Intra*/
87       {
88           24, 179,  48, 138,  54, 135,  54, 132,  53, 134,  56, 133,  55, 132,
89           55, 132,  61, 114,  70,  96,  74,  88,  75,  88,  87,  74,  89,  66,
90           91,  67, 100,  59, 108,  50, 120,  40, 122,  37,  97,  43,  78,  50
91       }
92    },
93    /*240 sample frames.*/
94    {
95       /*Inter*/
96       {
97           83,  78,  84,  81,  88,  75,  86,  74,  87,  71,  90,  73,  93,  74,
98           93,  74, 109,  40, 114,  36, 117,  34, 117,  34, 143,  17, 145,  18,
99          146,  19, 162,  12, 165,  10, 178,   7, 189,   6, 190,   8, 177,   9
100       },
101       /*Intra*/
102       {
103           23, 178,  54, 115,  63, 102,  66,  98,  69,  99,  74,  89,  71,  91,
104           73,  91,  78,  89,  86,  80,  92,  66,  93,  64, 102,  59, 103,  60,
105          104,  60, 117,  52, 123,  44, 138,  35, 133,  31,  97,  38,  77,  45
106       }
107    },
108    /*480 sample frames.*/
109    {
110       /*Inter*/
111       {
112           61,  90,  93,  60, 105,  42, 107,  41, 110,  45, 116,  38, 113,  38,
113          112,  38, 124,  26, 132,  27, 136,  19, 140,  20, 155,  14, 159,  16,
114          158,  18, 170,  13, 177,  10, 187,   8, 192,   6, 175,   9, 159,  10
115       },
116       /*Intra*/
117       {
118           21, 178,  59, 110,  71,  86,  75,  85,  84,  83,  91,  66,  88,  73,
119           87,  72,  92,  75,  98,  72, 105,  58, 107,  54, 115,  52, 114,  55,
120          112,  56, 129,  51, 132,  40, 150,  33, 140,  29,  98,  35,  77,  42
121       }
122    },
123    /*960 sample frames.*/
124    {
125       /*Inter*/
126       {
127           42, 121,  96,  66, 108,  43, 111,  40, 117,  44, 123,  32, 120,  36,
128          119,  33, 127,  33, 134,  34, 139,  21, 147,  23, 152,  20, 158,  25,
129          154,  26, 166,  21, 173,  16, 184,  13, 184,  10, 150,  13, 139,  15
130       },
131       /*Intra*/
132       {
133           22, 178,  63, 114,  74,  82,  84,  83,  92,  82, 103,  62,  96,  72,
134           96,  67, 101,  73, 107,  72, 113,  55, 118,  52, 125,  52, 118,  52,
135          117,  55, 135,  49, 137,  39, 157,  32, 145,  29,  97,  33,  77,  40
136       }
137    }
138 };
139
140 static const unsigned char small_energy_icdf[3]={2,1,0};
141
142 static opus_val32 loss_distortion(const opus_val16 *eBands, opus_val16 *oldEBands, int start, int end, int len, int C)
143 {
144    int c, i;
145    opus_val32 dist = 0;
146    c=0; do {
147       for (i=start;i<end;i++)
148       {
149          opus_val16 d = SUB16(SHR16(eBands[i+c*len], 3), SHR16(oldEBands[i+c*len], 3));
150          dist = MAC16_16(dist, d,d);
151       }
152    } while (++c<C);
153    return MIN32(200,SHR32(dist,2*DB_SHIFT-6));
154 }
155
156 static int quant_coarse_energy_impl(const CELTMode *m, int start, int end,
157       const opus_val16 *eBands, opus_val16 *oldEBands,
158       opus_int32 budget, opus_int32 tell,
159       const unsigned char *prob_model, opus_val16 *error, ec_enc *enc,
160       int C, int LM, int intra, opus_val16 max_decay)
161 {
162    int i, c;
163    int badness = 0;
164    opus_val32 prev[2] = {0,0};
165    opus_val16 coef;
166    opus_val16 beta;
167
168    if (tell+3 <= budget)
169       ec_enc_bit_logp(enc, intra, 3);
170    if (intra)
171    {
172       coef = 0;
173       beta = beta_intra;
174    } else {
175       beta = beta_coef[LM];
176       coef = pred_coef[LM];
177    }
178
179    /* Encode at a fixed coarse resolution */
180    for (i=start;i<end;i++)
181    {
182       c=0;
183       do {
184          int bits_left;
185          int qi, qi0;
186          opus_val32 q;
187          opus_val16 x;
188          opus_val32 f, tmp;
189          opus_val16 oldE;
190          opus_val16 decay_bound;
191          x = eBands[i+c*m->nbEBands];
192          oldE = MAX16(-QCONST16(9.f,DB_SHIFT), oldEBands[i+c*m->nbEBands]);
193 #ifdef FIXED_POINT
194          f = SHL32(EXTEND32(x),7) - PSHR32(MULT16_16(coef,oldE), 8) - prev[c];
195          /* Rounding to nearest integer here is really important! */
196          qi = (f+QCONST32(.5f,DB_SHIFT+7))>>(DB_SHIFT+7);
197          decay_bound = EXTRACT16(MAX32(-QCONST16(28.f,DB_SHIFT),
198                SUB32((opus_val32)oldEBands[i+c*m->nbEBands],max_decay)));
199 #else
200          f = x-coef*oldE-prev[c];
201          /* Rounding to nearest integer here is really important! */
202          qi = (int)floor(.5f+f);
203          decay_bound = MAX16(-QCONST16(28.f,DB_SHIFT), oldEBands[i+c*m->nbEBands]) - max_decay;
204 #endif
205          /* Prevent the energy from going down too quickly (e.g. for bands
206             that have just one bin) */
207          if (qi < 0 && x < decay_bound)
208          {
209             qi += (int)SHR16(SUB16(decay_bound,x), DB_SHIFT);
210             if (qi > 0)
211                qi = 0;
212          }
213          qi0 = qi;
214          /* If we don't have enough bits to encode all the energy, just assume
215              something safe. */
216          tell = ec_tell(enc);
217          bits_left = budget-tell-3*C*(end-i);
218          if (i!=start && bits_left < 30)
219          {
220             if (bits_left < 24)
221                qi = IMIN(1, qi);
222             if (bits_left < 16)
223                qi = IMAX(-1, qi);
224          }
225          if (budget-tell >= 15)
226          {
227             int pi;
228             pi = 2*IMIN(i,20);
229             ec_laplace_encode(enc, &qi,
230                   prob_model[pi]<<7, prob_model[pi+1]<<6);
231          }
232          else if(budget-tell >= 2)
233          {
234             qi = IMAX(-1, IMIN(qi, 1));
235             ec_enc_icdf(enc, 2*qi^-(qi<0), small_energy_icdf, 2);
236          }
237          else if(budget-tell >= 1)
238          {
239             qi = IMIN(0, qi);
240             ec_enc_bit_logp(enc, -qi, 1);
241          }
242          else
243             qi = -1;
244          error[i+c*m->nbEBands] = PSHR32(f,7) - SHL16(qi,DB_SHIFT);
245          badness += abs(qi0-qi);
246          q = (opus_val32)SHL32(EXTEND32(qi),DB_SHIFT);
247
248          tmp = PSHR32(MULT16_16(coef,oldE),8) + prev[c] + SHL32(q,7);
249 #ifdef FIXED_POINT
250          tmp = MAX32(-QCONST32(28.f, DB_SHIFT+7), tmp);
251 #endif
252          oldEBands[i+c*m->nbEBands] = PSHR32(tmp, 7);
253          prev[c] = prev[c] + SHL32(q,7) - MULT16_16(beta,PSHR32(q,8));
254       } while (++c < C);
255    }
256    return badness;
257 }
258
259 void quant_coarse_energy(const CELTMode *m, int start, int end, int effEnd,
260       const opus_val16 *eBands, opus_val16 *oldEBands, opus_uint32 budget,
261       opus_val16 *error, ec_enc *enc, int C, int LM, int nbAvailableBytes,
262       int force_intra, opus_val32 *delayedIntra, int two_pass, int loss_rate)
263 {
264    int intra;
265    opus_val16 max_decay;
266    VARDECL(opus_val16, oldEBands_intra);
267    VARDECL(opus_val16, error_intra);
268    ec_enc enc_start_state;
269    opus_uint32 tell;
270    int badness1=0;
271    opus_int32 intra_bias;
272    opus_val32 new_distortion;
273    SAVE_STACK;
274
275    intra = force_intra || (!two_pass && *delayedIntra>2*C*(end-start) && nbAvailableBytes > (end-start)*C);
276    intra_bias = (opus_int32)((budget**delayedIntra*loss_rate)/(C*512));
277    new_distortion = loss_distortion(eBands, oldEBands, start, effEnd, m->nbEBands, C);
278
279    tell = ec_tell(enc);
280    if (tell+3 > budget)
281       two_pass = intra = 0;
282
283    /* Encode the global flags using a simple probability model
284       (first symbols in the stream) */
285
286 #ifdef FIXED_POINT
287       max_decay = MIN32(QCONST16(16.f,DB_SHIFT), SHL32(EXTEND32(nbAvailableBytes),DB_SHIFT-3));
288 #else
289    max_decay = MIN32(16.f, .125f*nbAvailableBytes);
290 #endif
291
292    enc_start_state = *enc;
293
294    ALLOC(oldEBands_intra, C*m->nbEBands, opus_val16);
295    ALLOC(error_intra, C*m->nbEBands, opus_val16);
296    OPUS_COPY(oldEBands_intra, oldEBands, C*m->nbEBands);
297
298    if (two_pass || intra)
299    {
300       badness1 = quant_coarse_energy_impl(m, start, end, eBands, oldEBands_intra, budget,
301             tell, e_prob_model[LM][1], error_intra, enc, C, LM, 1, max_decay);
302    }
303
304    if (!intra)
305    {
306       unsigned char *intra_buf;
307       ec_enc enc_intra_state;
308       opus_int32 tell_intra;
309       opus_uint32 nstart_bytes;
310       opus_uint32 nintra_bytes;
311       int badness2;
312       VARDECL(unsigned char, intra_bits);
313
314       tell_intra = ec_tell_frac(enc);
315
316       enc_intra_state = *enc;
317
318       nstart_bytes = ec_range_bytes(&enc_start_state);
319       nintra_bytes = ec_range_bytes(&enc_intra_state);
320       intra_buf = ec_get_buffer(&enc_intra_state) + nstart_bytes;
321       ALLOC(intra_bits, nintra_bytes-nstart_bytes, unsigned char);
322       /* Copy bits from intra bit-stream */
323       OPUS_COPY(intra_bits, intra_buf, nintra_bytes - nstart_bytes);
324
325       *enc = enc_start_state;
326
327       badness2 = quant_coarse_energy_impl(m, start, end, eBands, oldEBands, budget,
328             tell, e_prob_model[LM][intra], error, enc, C, LM, 0, max_decay);
329
330       if (two_pass && (badness1 < badness2 || (badness1 == badness2 && ((opus_int32)ec_tell_frac(enc))+intra_bias > tell_intra)))
331       {
332          *enc = enc_intra_state;
333          /* Copy intra bits to bit-stream */
334          OPUS_COPY(intra_buf, intra_bits, nintra_bytes - nstart_bytes);
335          OPUS_COPY(oldEBands, oldEBands_intra, C*m->nbEBands);
336          OPUS_COPY(error, error_intra, C*m->nbEBands);
337          intra = 1;
338       }
339    } else {
340       OPUS_COPY(oldEBands, oldEBands_intra, C*m->nbEBands);
341       OPUS_COPY(error, error_intra, C*m->nbEBands);
342    }
343
344    if (intra)
345       *delayedIntra = new_distortion;
346    else
347       *delayedIntra = ADD32(MULT16_32_Q15(MULT16_16_Q15(pred_coef[LM], pred_coef[LM]),*delayedIntra),
348             new_distortion);
349
350    RESTORE_STACK;
351 }
352
353 void quant_fine_energy(const CELTMode *m, int start, int end, opus_val16 *oldEBands, opus_val16 *error, int *fine_quant, ec_enc *enc, int C)
354 {
355    int i, c;
356
357    /* Encode finer resolution */
358    for (i=start;i<end;i++)
359    {
360       opus_int16 frac = 1<<fine_quant[i];
361       if (fine_quant[i] <= 0)
362          continue;
363       c=0;
364       do {
365          int q2;
366          opus_val16 offset;
367 #ifdef FIXED_POINT
368          /* Has to be without rounding */
369          q2 = (error[i+c*m->nbEBands]+QCONST16(.5f,DB_SHIFT))>>(DB_SHIFT-fine_quant[i]);
370 #else
371          q2 = (int)floor((error[i+c*m->nbEBands]+.5f)*frac);
372 #endif
373          if (q2 > frac-1)
374             q2 = frac-1;
375          if (q2<0)
376             q2 = 0;
377          ec_enc_bits(enc, q2, fine_quant[i]);
378 #ifdef FIXED_POINT
379          offset = SUB16(SHR32(SHL32(EXTEND32(q2),DB_SHIFT)+QCONST16(.5f,DB_SHIFT),fine_quant[i]),QCONST16(.5f,DB_SHIFT));
380 #else
381          offset = (q2+.5f)*(1<<(14-fine_quant[i]))*(1.f/16384) - .5f;
382 #endif
383          oldEBands[i+c*m->nbEBands] += offset;
384          error[i+c*m->nbEBands] -= offset;
385          /*printf ("%f ", error[i] - offset);*/
386       } while (++c < C);
387    }
388 }
389
390 void quant_energy_finalise(const CELTMode *m, int start, int end, opus_val16 *oldEBands, opus_val16 *error, int *fine_quant, int *fine_priority, int bits_left, ec_enc *enc, int C)
391 {
392    int i, prio, c;
393
394    /* Use up the remaining bits */
395    for (prio=0;prio<2;prio++)
396    {
397       for (i=start;i<end && bits_left>=C ;i++)
398       {
399          if (fine_quant[i] >= MAX_FINE_BITS || fine_priority[i]!=prio)
400             continue;
401          c=0;
402          do {
403             int q2;
404             opus_val16 offset;
405             q2 = error[i+c*m->nbEBands]<0 ? 0 : 1;
406             ec_enc_bits(enc, q2, 1);
407 #ifdef FIXED_POINT
408             offset = SHR16(SHL16(q2,DB_SHIFT)-QCONST16(.5f,DB_SHIFT),fine_quant[i]+1);
409 #else
410             offset = (q2-.5f)*(1<<(14-fine_quant[i]-1))*(1.f/16384);
411 #endif
412             oldEBands[i+c*m->nbEBands] += offset;
413             bits_left--;
414          } while (++c < C);
415       }
416    }
417 }
418
419 void unquant_coarse_energy(const CELTMode *m, int start, int end, opus_val16 *oldEBands, int intra, ec_dec *dec, int C, int LM)
420 {
421    const unsigned char *prob_model = e_prob_model[LM][intra];
422    int i, c;
423    opus_val32 prev[2] = {0, 0};
424    opus_val16 coef;
425    opus_val16 beta;
426    opus_int32 budget;
427    opus_int32 tell;
428
429    if (intra)
430    {
431       coef = 0;
432       beta = beta_intra;
433    } else {
434       beta = beta_coef[LM];
435       coef = pred_coef[LM];
436    }
437
438    budget = dec->storage*8;
439
440    /* Decode at a fixed coarse resolution */
441    for (i=start;i<end;i++)
442    {
443       c=0;
444       do {
445          int qi;
446          opus_val32 q;
447          opus_val32 tmp;
448          /* It would be better to express this invariant as a
449             test on C at function entry, but that isn't enough
450             to make the static analyzer happy. */
451          celt_assert(c<2);
452          tell = ec_tell(dec);
453          if(budget-tell>=15)
454          {
455             int pi;
456             pi = 2*IMIN(i,20);
457             qi = ec_laplace_decode(dec,
458                   prob_model[pi]<<7, prob_model[pi+1]<<6);
459          }
460          else if(budget-tell>=2)
461          {
462             qi = ec_dec_icdf(dec, small_energy_icdf, 2);
463             qi = (qi>>1)^-(qi&1);
464          }
465          else if(budget-tell>=1)
466          {
467             qi = -ec_dec_bit_logp(dec, 1);
468          }
469          else
470             qi = -1;
471          q = (opus_val32)SHL32(EXTEND32(qi),DB_SHIFT);
472
473          oldEBands[i+c*m->nbEBands] = MAX16(-QCONST16(9.f,DB_SHIFT), oldEBands[i+c*m->nbEBands]);
474          tmp = PSHR32(MULT16_16(coef,oldEBands[i+c*m->nbEBands]),8) + prev[c] + SHL32(q,7);
475 #ifdef FIXED_POINT
476          tmp = MAX32(-QCONST32(28.f, DB_SHIFT+7), tmp);
477 #endif
478          oldEBands[i+c*m->nbEBands] = PSHR32(tmp, 7);
479          prev[c] = prev[c] + SHL32(q,7) - MULT16_16(beta,PSHR32(q,8));
480       } while (++c < C);
481    }
482 }
483
484 void unquant_fine_energy(const CELTMode *m, int start, int end, opus_val16 *oldEBands, int *fine_quant, ec_dec *dec, int C)
485 {
486    int i, c;
487    /* Decode finer resolution */
488    for (i=start;i<end;i++)
489    {
490       if (fine_quant[i] <= 0)
491          continue;
492       c=0;
493       do {
494          int q2;
495          opus_val16 offset;
496          q2 = ec_dec_bits(dec, fine_quant[i]);
497 #ifdef FIXED_POINT
498          offset = SUB16(SHR32(SHL32(EXTEND32(q2),DB_SHIFT)+QCONST16(.5f,DB_SHIFT),fine_quant[i]),QCONST16(.5f,DB_SHIFT));
499 #else
500          offset = (q2+.5f)*(1<<(14-fine_quant[i]))*(1.f/16384) - .5f;
501 #endif
502          oldEBands[i+c*m->nbEBands] += offset;
503       } while (++c < C);
504    }
505 }
506
507 void unquant_energy_finalise(const CELTMode *m, int start, int end, opus_val16 *oldEBands, int *fine_quant,  int *fine_priority, int bits_left, ec_dec *dec, int C)
508 {
509    int i, prio, c;
510
511    /* Use up the remaining bits */
512    for (prio=0;prio<2;prio++)
513    {
514       for (i=start;i<end && bits_left>=C ;i++)
515       {
516          if (fine_quant[i] >= MAX_FINE_BITS || fine_priority[i]!=prio)
517             continue;
518          c=0;
519          do {
520             int q2;
521             opus_val16 offset;
522             q2 = ec_dec_bits(dec, 1);
523 #ifdef FIXED_POINT
524             offset = SHR16(SHL16(q2,DB_SHIFT)-QCONST16(.5f,DB_SHIFT),fine_quant[i]+1);
525 #else
526             offset = (q2-.5f)*(1<<(14-fine_quant[i]-1))*(1.f/16384);
527 #endif
528             oldEBands[i+c*m->nbEBands] += offset;
529             bits_left--;
530          } while (++c < C);
531       }
532    }
533 }
534
535 void log2Amp(const CELTMode *m, int start, int end,
536       celt_ener *eBands, const opus_val16 *oldEBands, int C)
537 {
538    int c, i;
539    c=0;
540    do {
541       for (i=0;i<start;i++)
542          eBands[i+c*m->nbEBands] = 0;
543       for (;i<end;i++)
544       {
545          opus_val16 lg = ADD16(oldEBands[i+c*m->nbEBands],
546                          SHL16((opus_val16)eMeans[i],6));
547          eBands[i+c*m->nbEBands] = PSHR32(celt_exp2(lg),4);
548       }
549       for (;i<m->nbEBands;i++)
550          eBands[i+c*m->nbEBands] = 0;
551    } while (++c < C);
552 }
553
554 void amp2Log2(const CELTMode *m, int effEnd, int end,
555       celt_ener *bandE, opus_val16 *bandLogE, int C)
556 {
557    int c, i;
558    c=0;
559    do {
560       for (i=0;i<effEnd;i++)
561          bandLogE[i+c*m->nbEBands] =
562                celt_log2(SHL32(bandE[i+c*m->nbEBands],2))
563                - SHL16((opus_val16)eMeans[i],6);
564       for (i=effEnd;i<end;i++)
565          bandLogE[c*m->nbEBands+i] = -QCONST16(14.f,DB_SHIFT);
566    } while (++c < C);
567 }