shithub: opus

Download patch

ref: 4b087df592128c6964c9639709de68e38ca8c070
parent: dd4bf63ae34e94cbacc60289314bcacd891c1fe6
author: Jean-Marc Valin <[email protected]>
date: Tue Nov 30 16:08:31 EST 2010

Increasing resolution of the alloc trim

--- a/libcelt/celt.c
+++ b/libcelt/celt.c
@@ -53,7 +53,8 @@
 #include <stdarg.h>
 #include "plc.h"
 
-static const int trim_cdf[7] = {0, 4, 11, 65, 119, 125, 128};
+static const int trim_cdf[12] = {0, 2, 4, 9, 19, 41, 87, 109, 119, 124, 126, 128};
+
 #define COMBFILTER_MAXPERIOD 1024
 #define COMBFILTER_MINPERIOD 16
 
@@ -599,7 +600,7 @@
       const celt_word16 *bandLogE, int nbEBands, int LM, int C, int N0)
 {
    int i;
-   int trim_index = 2;
+   int trim_index = 5;
    if (C==2)
    {
       celt_word16 sum = 0; /* Q10 */
@@ -615,8 +616,10 @@
       sum = MULT16_16_Q15(QCONST16(1.f/8, 15), sum);
       /*printf ("%f\n", sum);*/
       if (sum > QCONST16(.995f,10))
-         trim_index-=3;
+         trim_index-=4;
       else if (sum > QCONST16(.92f,10))
+         trim_index-=3;
+      else if (sum > QCONST16(.85f,10))
          trim_index-=2;
       else if (sum > QCONST16(.8f,10))
          trim_index-=1;
--- a/libcelt/rate.c
+++ b/libcelt/rate.c
@@ -289,7 +289,7 @@
       thresh[j] = 2*(C*(m->eBands[j+1]-m->eBands[j])<<LM<<BITRES)>>3;
    /* Tilt of the allocation curve */
    for (j=start;j<end;j++)
-      trim_offset[j] = C*(m->eBands[j+1]-m->eBands[j])*(2*alloc_trim-1-2*LM)*(m->nbEBands-j-1)
+      trim_offset[j] = C*(m->eBands[j+1]-m->eBands[j])*(alloc_trim-2-2*LM)*(m->nbEBands-j-1)
             <<(LM+BITRES)>>6;
 
    lo = 0;