Passing the mode to the intra prediction functions so the single-channel case
authorJean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Mon, 21 Apr 2008 11:59:37 +0000 (21:59 +1000)
committerJean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Mon, 21 Apr 2008 11:59:37 +0000 (21:59 +1000)
can be optimised

libcelt/bands.c
libcelt/vq.c
libcelt/vq.h

index 0251dc4..c951400 100644 (file)
@@ -329,9 +329,9 @@ void quant_bands(const CELTMode *m, celt_norm_t * restrict X, celt_norm_t *P, ce
       {
          q -= 1;
          if (q<0)
-            intra_fold(X+C*eBands[i], eBands[i+1]-eBands[i], norm, P+C*eBands[i], C, eBands[i], eBands[m->nbEBands+1]);
+            intra_fold(m, X+C*eBands[i], eBands[i+1]-eBands[i], norm, P+C*eBands[i], eBands[i], eBands[m->nbEBands+1]);
          else
-            intra_prediction(X+C*eBands[i], W+C*eBands[i], eBands[i+1]-eBands[i], q, norm, P+C*eBands[i], C, eBands[i], enc);
+            intra_prediction(m, X+C*eBands[i], W+C*eBands[i], eBands[i+1]-eBands[i], q, norm, P+C*eBands[i], eBands[i], enc);
       }
       
       if (q > 0)
@@ -387,9 +387,9 @@ void unquant_bands(const CELTMode *m, celt_norm_t * restrict X, celt_norm_t *P,
       {
          q -= 1;
          if (q<0)
-            intra_fold(X+C*eBands[i], eBands[i+1]-eBands[i], norm, P+C*eBands[i], C, eBands[i], eBands[m->nbEBands+1]);
+            intra_fold(m, X+C*eBands[i], eBands[i+1]-eBands[i], norm, P+C*eBands[i], eBands[i], eBands[m->nbEBands+1]);
          else
-            intra_unquant(X+C*eBands[i], eBands[i+1]-eBands[i], q, norm, P+C*eBands[i], C, eBands[i], dec);
+            intra_unquant(m, X+C*eBands[i], eBands[i+1]-eBands[i], q, norm, P+C*eBands[i], eBands[i], dec);
       }
       
       if (q > 0)
index 667796e..886763f 100644 (file)
@@ -267,7 +267,7 @@ static const celt_word16_t pg[11] = {1.f, .75f, .65f, 0.6f, 0.6f, .6f, .55f, .55
 #define MAX_INTRA 32
 #define LOG_MAX_INTRA 5
 
-void intra_prediction(celt_norm_t * restrict x, celt_mask_t *W, int N, int K, celt_norm_t *Y, celt_norm_t * restrict P, int C, int N0, ec_enc *enc)
+void intra_prediction(const CELTMode *m, celt_norm_t * restrict x, celt_mask_t *W, int N, int K, celt_norm_t *Y, celt_norm_t * restrict P, int N0, ec_enc *enc)
 {
    int i,j,c;
    int best=0;
@@ -280,6 +280,7 @@ void intra_prediction(celt_norm_t * restrict x, celt_mask_t *W, int N, int K, ce
    int max_pos = N0-N;
    celt_word32_t yy=0;
    VARDECL(celt_norm_t, Xr);
+   const int C = CHANNELS(m);
    SAVE_STACK;
 
    ALLOC(Xr, C*N, celt_norm_t);
@@ -382,7 +383,7 @@ void intra_prediction(celt_norm_t * restrict x, celt_mask_t *W, int N, int K, ce
    RESTORE_STACK;
 }
 
-void intra_unquant(celt_norm_t *x, int N, int K, celt_norm_t *Y, celt_norm_t * restrict P, int C, int N0, ec_dec *dec)
+void intra_unquant(const CELTMode *m, celt_norm_t *x, int N, int K, celt_norm_t *Y, celt_norm_t * restrict P, int N0, ec_dec *dec)
 {
    int j, c;
    int sign;
@@ -390,6 +391,7 @@ void intra_unquant(celt_norm_t *x, int N, int K, celt_norm_t *Y, celt_norm_t * r
    int best;
    celt_word32_t E;
    celt_word16_t pred_gain;
+   const int C = CHANNELS(m);
    int max_pos = N0-N;
    if (max_pos > MAX_INTRA)
       max_pos = MAX_INTRA;
@@ -430,12 +432,13 @@ void intra_unquant(celt_norm_t *x, int N, int K, celt_norm_t *Y, celt_norm_t * r
    }
 }
 
-void intra_fold(celt_norm_t *x, int N, celt_norm_t *Y, celt_norm_t * restrict P, int C, int N0, int Nmax)
+void intra_fold(const CELTMode *m, celt_norm_t *x, int N, celt_norm_t *Y, celt_norm_t * restrict P, int N0, int Nmax)
 {
    int i, j;
    celt_word32_t E;
    celt_word16_t g;
-   
+   const int C = CHANNELS(m);
+
    E = EPSILON;
    if (N0 >= (Nmax>>1))
    {
index 434bfc5..8b2cd16 100644 (file)
@@ -38,7 +38,7 @@
 
 #include "entenc.h"
 #include "entdec.h"
-
+#include "modes.h"
 
 /** Algebraic pulse-vector quantiser. The signal x is replaced by the sum of 
   * the pitch and a combination of pulses such that its norm is still equal 
@@ -73,11 +73,11 @@ void alg_unquant(celt_norm_t *X, int N, int K, celt_norm_t *P, ec_dec *dec);
  * @param N0 Number of valid offsets
  * @param enc Entropy encoder state
  */
-void intra_prediction(celt_norm_t * restrict x, celt_mask_t *W, int N, int K, celt_norm_t *Y, celt_norm_t * restrict P, int B, int N0, ec_enc *enc);
+void intra_prediction(const CELTMode *m, celt_norm_t * restrict x, celt_mask_t *W, int N, int K, celt_norm_t *Y, celt_norm_t * restrict P, int N0, ec_enc *enc);
 
-void intra_unquant(celt_norm_t *x, int N, int K, celt_norm_t *Y, celt_norm_t *P, int B, int N0, ec_dec *dec);
+void intra_unquant(const CELTMode *m, celt_norm_t *x, int N, int K, celt_norm_t *Y, celt_norm_t *P, int N0, ec_dec *dec);
 
 /** Encode the entire band as a "fold" from other parts of the spectrum. No bits required (only use is case of an emergency!) */
-void intra_fold(celt_norm_t *x, int N, celt_norm_t *Y, celt_norm_t *P, int B, int N0, int Nmax);
+void intra_fold(const CELTMode *m, celt_norm_t *x, int N, celt_norm_t *Y, celt_norm_t *P, int N0, int Nmax);
 
 #endif /* VQ_H */