OLD | NEW |
1 /* Copyright (c) 2007-2008 CSIRO | 1 /* Copyright (c) 2007-2008 CSIRO |
2 Copyright (c) 2007-2009 Xiph.Org Foundation | 2 Copyright (c) 2007-2009 Xiph.Org Foundation |
3 Written by Jean-Marc Valin */ | 3 Written by Jean-Marc Valin */ |
4 /* | 4 /* |
5 Redistribution and use in source and binary forms, with or without | 5 Redistribution and use in source and binary forms, with or without |
6 modification, are permitted provided that the following conditions | 6 modification, are permitted provided that the following conditions |
7 are met: | 7 are met: |
8 | 8 |
9 - Redistributions of source code must retain the above copyright | 9 - Redistributions of source code must retain the above copyright |
10 notice, this list of conditions and the following disclaimer. | 10 notice, this list of conditions and the following disclaimer. |
(...skipping 400 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
411 int q2; | 411 int q2; |
412 opus_val16 offset; | 412 opus_val16 offset; |
413 q2 = error[i+c*m->nbEBands]<0 ? 0 : 1; | 413 q2 = error[i+c*m->nbEBands]<0 ? 0 : 1; |
414 ec_enc_bits(enc, q2, 1); | 414 ec_enc_bits(enc, q2, 1); |
415 #ifdef FIXED_POINT | 415 #ifdef FIXED_POINT |
416 offset = SHR16(SHL16(q2,DB_SHIFT)-QCONST16(.5f,DB_SHIFT),fine_quant[
i]+1); | 416 offset = SHR16(SHL16(q2,DB_SHIFT)-QCONST16(.5f,DB_SHIFT),fine_quant[
i]+1); |
417 #else | 417 #else |
418 offset = (q2-.5f)*(1<<(14-fine_quant[i]-1))*(1.f/16384); | 418 offset = (q2-.5f)*(1<<(14-fine_quant[i]-1))*(1.f/16384); |
419 #endif | 419 #endif |
420 oldEBands[i+c*m->nbEBands] += offset; | 420 oldEBands[i+c*m->nbEBands] += offset; |
| 421 error[i+c*m->nbEBands] -= offset; |
421 bits_left--; | 422 bits_left--; |
422 } while (++c < C); | 423 } while (++c < C); |
423 } | 424 } |
424 } | 425 } |
425 } | 426 } |
426 | 427 |
427 void unquant_coarse_energy(const CELTMode *m, int start, int end, opus_val16 *ol
dEBands, int intra, ec_dec *dec, int C, int LM) | 428 void unquant_coarse_energy(const CELTMode *m, int start, int end, opus_val16 *ol
dEBands, int intra, ec_dec *dec, int C, int LM) |
428 { | 429 { |
429 const unsigned char *prob_model = e_prob_model[LM][intra]; | 430 const unsigned char *prob_model = e_prob_model[LM][intra]; |
430 int i, c; | 431 int i, c; |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
540 } | 541 } |
541 } | 542 } |
542 | 543 |
543 void amp2Log2(const CELTMode *m, int effEnd, int end, | 544 void amp2Log2(const CELTMode *m, int effEnd, int end, |
544 celt_ener *bandE, opus_val16 *bandLogE, int C) | 545 celt_ener *bandE, opus_val16 *bandLogE, int C) |
545 { | 546 { |
546 int c, i; | 547 int c, i; |
547 c=0; | 548 c=0; |
548 do { | 549 do { |
549 for (i=0;i<effEnd;i++) | 550 for (i=0;i<effEnd;i++) |
| 551 { |
550 bandLogE[i+c*m->nbEBands] = | 552 bandLogE[i+c*m->nbEBands] = |
551 celt_log2(SHL32(bandE[i+c*m->nbEBands],2)) | 553 celt_log2(bandE[i+c*m->nbEBands]) |
552 - SHL16((opus_val16)eMeans[i],6); | 554 - SHL16((opus_val16)eMeans[i],6); |
| 555 #ifdef FIXED_POINT |
| 556 /* Compensate for bandE[] being Q12 but celt_log2() taking a Q14 input.
*/ |
| 557 bandLogE[i+c*m->nbEBands] += QCONST16(2.f, DB_SHIFT); |
| 558 #endif |
| 559 } |
553 for (i=effEnd;i<end;i++) | 560 for (i=effEnd;i<end;i++) |
554 bandLogE[c*m->nbEBands+i] = -QCONST16(14.f,DB_SHIFT); | 561 bandLogE[c*m->nbEBands+i] = -QCONST16(14.f,DB_SHIFT); |
555 } while (++c < C); | 562 } while (++c < C); |
556 } | 563 } |
OLD | NEW |