shithub: opus

Download patch

ref: aca0be91f45bcccdcb6834a72812e28d8bbaac3b
parent: 77c80ce524825686501953602ce13b4e9da96d05
author: Jean-Marc Valin <[email protected]>
date: Tue Jan 13 18:04:12 EST 2009

Pitch now quantised at the band level, got rid of all the VQ code.

--- a/libcelt/Makefile.am
+++ b/libcelt/Makefile.am
@@ -16,7 +16,7 @@
 # Sources for compilation in the library
 libcelt_la_SOURCES = bands.c celt.c cwrs.c ecintrin.h entcode.c \
 	entdec.c entenc.c header.c kfft_single.c kiss_fft.c kiss_fftr.c laplace.c mdct.c \
-	modes.c pitch.c psy.c quant_bands.c quant_pitch.c rangedec.c rangeenc.c rate.c \
+	modes.c pitch.c psy.c quant_bands.c rangedec.c rangeenc.c rate.c \
 	vq.c
 
 #noinst_HEADERS =
@@ -26,8 +26,8 @@
 noinst_HEADERS = _kiss_fft_guts.h arch.h bands.h fixed_c5x.h fixed_c6x.h \
 	cwrs.h ecintrin.h entcode.h entdec.h entenc.h fixed_generic.h float_cast.h \
 	kfft_double.h kfft_single.h kiss_fft.h kiss_fftr.h laplace.h mdct.h mfrngcod.h \
-	mathops.h modes.h os_support.h pgain_table.h pitch.h psy.h \
-	quant_bands.h quant_pitch.h rate.h stack_alloc.h vq.h
+	mathops.h modes.h os_support.h pitch.h psy.h \
+	quant_bands.h rate.h stack_alloc.h vq.h
 
 noinst_PROGRAMS = testcelt dump_modes
 testcelt_SOURCES = testcelt.c
--- a/libcelt/bands.c
+++ b/libcelt/bands.c
@@ -210,9 +210,10 @@
 
 
 /* Compute the best gain for each "pitch band" */
-void compute_pitch_gain(const CELTMode *m, const celt_norm_t *X, const celt_norm_t *P, celt_pgain_t *gains)
+int compute_pitch_gain(const CELTMode *m, const celt_norm_t *X, const celt_norm_t *P, celt_pgain_t *gains)
 {
    int i;
+   int gain_sum = 0;
    const celt_int16_t *pBands = m->pBands;
    const int C = CHANNELS(m);
 
@@ -234,9 +235,11 @@
          Sxy = Sxx;
       /* We need to be a bit conservative (multiply gain by 0.9), otherwise the
          residual doesn't quantise well */
-      Sxy = MULT16_32_Q15(QCONST16(.9f, 15), Sxy);
+      Sxy = MULT16_32_Q15(QCONST16(.99f, 15), Sxy);
       /* gain = Sxy/Sxx */
       gains[i] = EXTRACT16(celt_div(Sxy,ADD32(SHR32(Sxx, PGAIN_SHIFT),EPSILON)));
+      if (gains[i]>QCONST16(.5,15))
+         gain_sum++;
       /*printf ("%f ", 1-sqrt(1-gain*gain));*/
    }
    /*if(rand()%10==0)
@@ -245,6 +248,7 @@
          printf ("%f ", 1-sqrt(1-gains[i]*gains[i]));
       printf ("\n");
    }*/
+   return gain_sum > 5;
 }
 
 static void intensity_band(celt_norm_t * restrict X, int len)
@@ -402,7 +406,17 @@
       } else if (pitch_used && eBands[i] < m->pitchEnd)
       {
          if (eBands[i] == pBands[pband+1])
+         {
+            int enabled = 0;
             pband++;
+            if (pgains[pband] > QCONST16(.5,15))
+               enabled = 1;
+            ec_enc_bits(enc, enabled, 1);
+            if (enabled)
+               pgains[pband] = QCONST16(.9,15);
+            else
+               pgains[pband] = 0;
+         }
          for (j=C*eBands[i];j<C*eBands[i+1];j++)
             P[j] = MULT16_16_Q15(pgains[pband], P[j]);
       } else {
@@ -496,7 +510,15 @@
       } else if (pitch_used && eBands[i] < m->pitchEnd)
       {
          if (eBands[i] == pBands[pband+1])
+         {
+            int enabled = 0;
             pband++;
+            enabled = ec_dec_bits(dec, 1);
+            if (enabled)
+               pgains[pband] = QCONST16(.9,15);
+            else
+               pgains[pband] = 0;
+         }
          for (j=C*eBands[i];j<C*eBands[i+1];j++)
             P[j] = MULT16_16_Q15(pgains[pband], P[j]);
       } else {
--- a/libcelt/bands.h
+++ b/libcelt/bands.h
@@ -76,7 +76,7 @@
  * @param gains Gain computed for each pitch band (returned)
  * @param bank Square root of the energy for each band
  */
-void compute_pitch_gain(const CELTMode *m, const celt_norm_t *X, const celt_norm_t *P, celt_pgain_t *gains);
+int compute_pitch_gain(const CELTMode *m, const celt_norm_t *X, const celt_norm_t *P, celt_pgain_t *gains);
 
 /** Quantisation/encoding of the residual spectrum
  * @param m Mode data 
--- a/libcelt/celt.c
+++ b/libcelt/celt.c
@@ -44,7 +44,6 @@
 #include "bands.h"
 #include "modes.h"
 #include "entcode.h"
-#include "quant_pitch.h"
 #include "quant_bands.h"
 #include "psy.h"
 #include "rate.h"
@@ -440,8 +439,8 @@
 #ifndef FIXED_POINT
          float gain_1;
 #endif
-         ec_enc_bits(&enc, 0, 1); //Pitch off
-         ec_enc_bits(&enc, 1, 1); //Transient on
+         ec_enc_bits(&enc, 0, 1); /*Pitch off */
+         ec_enc_bits(&enc, 1, 1); /*Transient on */
          ec_enc_bits(&enc, transient_shift, 2);
          if (transient_shift)
             ec_enc_uint(&enc, transient_time, N+st->overlap);
@@ -557,23 +556,19 @@
       pitch_power = bandEp[0]+bandEp[1]+bandEp[2];
       /* Check if we can safely use the pitch (i.e. effective gain isn't too high) */
       curr_power = bandE[0]+bandE[1]+bandE[2];
-      id=-1;
       if ((MULT16_32_Q15(QCONST16(.1f, 15),curr_power) + QCONST32(10.f,ENER_SHIFT) < pitch_power))
       {
          /* Pitch prediction */
-         compute_pitch_gain(st->mode, X, P, gains);
-         id = quant_pitch(gains, st->mode->nbPBands);
-      } 
-      if (id == -1)
+         has_pitch = compute_pitch_gain(st->mode, X, P, gains);
+      } else {
          has_pitch = 0;
+      }
    }
    
    if (has_pitch) 
    {  
-      unquant_pitch(id, gains, st->mode->nbPBands);
       ec_enc_bits(&enc, has_pitch, 1); /* Pitch flag */
       ec_enc_bits(&enc, has_fold, 1); /* Folding flag */
-      ec_enc_bits(&enc, id, 7);
       ec_enc_uint(&enc, pitch_index, MAX_PERIOD-(2*N-2*N4));
    } else {
       if (!shortBlocks)
@@ -618,6 +613,8 @@
    for (i=0;i<st->mode->nbEBands;i++)
       offsets[i] = 0;
    bits = nbCompressedBytes*8 - ec_enc_tell(&enc, 0) - 1;
+   if (has_pitch)
+      bits -= st->mode->nbPBands;
 #ifndef STDIN_TUNING
    compute_allocation(st->mode, offsets, stereo_mode, bits, pulses, fine_quant);
 #endif
@@ -991,10 +988,6 @@
    
    if (has_pitch)
    {
-      int id;
-      /* Get the pitch gains and index */
-      id = ec_dec_bits(&dec, 7);
-      unquant_pitch(id, gains, st->mode->nbPBands);
       pitch_index = ec_dec_uint(&dec, MAX_PERIOD-(2*N-2*N4));
       st->last_pitch_index = pitch_index;
    } else {
@@ -1016,6 +1009,8 @@
       offsets[i] = 0;
 
    bits = len*8 - ec_dec_tell(&dec, 0) - 1;
+   if (has_pitch)
+      bits -= st->mode->nbPBands;
    compute_allocation(st->mode, offsets, stereo_mode, bits, pulses, fine_quant);
    /*bits = ec_dec_tell(&dec, 0);
    compute_fine_allocation(st->mode, fine_quant, (20*C+len*8/5-(ec_dec_tell(&dec, 0)-bits))/C);*/
--- a/libcelt/pgain_table.h
+++ /dev/null
@@ -1,133 +1,0 @@
-/* Each row contains 8 values for the pitch table. The lowest index value is
-   stored in the MSB (i.e. big endian ordering) */
-celt_uint16_t pgain_table[512] = {
-0x0000, 0x0000, 0x0000, 0x0000, 
-0x140d, 0x0908, 0x5b11, 0x0f07, 
-0x8380, 0x7608, 0x0807, 0x0705, 
-0x6078, 0x0605, 0x0706, 0x0504, 
-0x8378, 0x4118, 0x520f, 0x0d06, 
-0x4c06, 0x3105, 0x0706, 0x0704, 
-0x0f4c, 0x0606, 0x0b0b, 0x0b06, 
-0x837d, 0x4538, 0x0c09, 0x0906, 
-0x7c05, 0x0425, 0x0605, 0x0604, 
-0x8c87, 0x837f, 0x7064, 0x293a, 
-0x8c87, 0x827a, 0x715f, 0x1008, 
-0x4a05, 0x0404, 0x0504, 0x0704, 
-0x8322, 0x0403, 0x0504, 0x0504, 
-0x1968, 0x0b68, 0x130e, 0x0b05, 
-0x710d, 0x3d08, 0x3508, 0x0804, 
-0x7c46, 0x4446, 0x0d0a, 0x0705, 
-0x8a81, 0x7647, 0x203f, 0x0f09, 
-0x8155, 0x0637, 0x0706, 0x0504, 
-0x8b84, 0x7e7a, 0x460d, 0x0b07, 
-0x0a27, 0x0705, 0x0607, 0x0809, 
-0x7d06, 0x2504, 0x0505, 0x0604, 
-0x8980, 0x3c74, 0x684f, 0x170c, 
-0x7c32, 0x3406, 0x0606, 0x0604, 
-0x2905, 0x0504, 0x0505, 0x0606, 
-0x151e, 0x1a6e, 0x5713, 0x0e07, 
-0x6128, 0x0505, 0x0605, 0x0604, 
-0x8c88, 0x8685, 0x7a6f, 0x6715, 
-0x7b08, 0x4b05, 0x0507, 0x0504, 
-0x8277, 0x6612, 0x0e13, 0x470b, 
-0x6804, 0x0403, 0x0405, 0x0604, 
-0x8241, 0x0404, 0x0405, 0x0504, 
-0x7908, 0x064a, 0x0608, 0x0604, 
-0x4c72, 0x450a, 0x0a08, 0x0804, 
-0x4909, 0x0807, 0x3507, 0x0704, 
-0x857c, 0x4871, 0x0f0c, 0x0906, 
-0x7e6e, 0x0f60, 0x510f, 0x0a06, 
-0x8278, 0x231a, 0x4250, 0x5514, 
-0x7e28, 0x2370, 0x5944, 0x150a, 
-0x7a2f, 0x0631, 0x0806, 0x0704, 
-0x8981, 0x7b77, 0x1460, 0x5b14, 
-0x8680, 0x0504, 0x0505, 0x0604, 
-0x206d, 0x645b, 0x5c1a, 0x0e07, 
-0x877d, 0x7614, 0x6763, 0x6226, 
-0x8d88, 0x8482, 0x795d, 0x3b0c, 
-0x4c0a, 0x0631, 0x0707, 0x0704, 
-0x8481, 0x3c05, 0x0808, 0x0705, 
-0x0a0b, 0x0908, 0x0b37, 0x0f08, 
-0x8c86, 0x817c, 0x483f, 0x110a, 
-0x494e, 0x090a, 0x4109, 0x0803, 
-0x730e, 0x0909, 0x590b, 0x0a04, 
-0x7f30, 0x6b73, 0x1e46, 0x4518, 
-0x8a81, 0x7b4b, 0x6215, 0x0a07, 
-0x7f77, 0x0a6a, 0x0908, 0x0805, 
-0x7a60, 0x0d0a, 0x0a0d, 0x4107, 
-0x8377, 0x3166, 0x191f, 0x4e0e, 
-0x0f09, 0x3607, 0x0809, 0x0a08, 
-0x8983, 0x7b23, 0x6452, 0x150d, 
-0x4639, 0x3e07, 0x0909, 0x0704, 
-0x0e06, 0x0731, 0x0608, 0x0908, 
-0x480a, 0x6508, 0x0908, 0x0704, 
-0x1c13, 0x7165, 0x190f, 0x0906, 
-0x8170, 0x1c6a, 0x1c4d, 0x190d, 
-0x7a0f, 0x0708, 0x0932, 0x0a04, 
-0x7c40, 0x0806, 0x3107, 0x0604, 
-0x7809, 0x3636, 0x0807, 0x0804, 
-0x8c85, 0x817f, 0x7423, 0x0e0a, 
-0x440f, 0x0967, 0x0a09, 0x0805, 
-0x8442, 0x7574, 0x664f, 0x190d, 
-0x1716, 0x5511, 0x4c0e, 0x0b05, 
-0x4b5c, 0x0a41, 0x0908, 0x0704, 
-0x7c6d, 0x0c08, 0x0a3a, 0x0905, 
-0x773f, 0x0a6a, 0x0908, 0x0704, 
-0x897f, 0x7753, 0x4836, 0x3b0e, 
-0x720f, 0x4e70, 0x0c0c, 0x0705, 
-0x8430, 0x7276, 0x6b5c, 0x5c1c, 
-0x7740, 0x700a, 0x0808, 0x0704, 
-0x8c86, 0x8280, 0x495d, 0x4b0d, 
-0x8361, 0x0304, 0x0505, 0x0404, 
-0x0c08, 0x0708, 0x090b, 0x350b, 
-0x867d, 0x751d, 0x6623, 0x480e, 
-0x3a33, 0x0606, 0x0707, 0x0704, 
-0x8877, 0x4879, 0x6f64, 0x5e22, 
-0x2467, 0x625e, 0x0c0c, 0x0a06, 
-0x8b84, 0x807d, 0x6d3c, 0x5638, 
-0x8303, 0x0303, 0x0405, 0x0604, 
-0x887d, 0x4973, 0x5613, 0x0c08, 
-0x847c, 0x6b0c, 0x1143, 0x0f08, 
-0x7c08, 0x0506, 0x2b06, 0x0604, 
-0x7b09, 0x0872, 0x0908, 0x0704, 
-0x6f11, 0x0a50, 0x4409, 0x0904, 
-0x7f5c, 0x2805, 0x0606, 0x0504, 
-0x0e53, 0x3f0a, 0x0b0b, 0x0a05, 
-0x0d77, 0x0a0a, 0x0a0d, 0x0a05, 
-0x7e1d, 0x636b, 0x5915, 0x1208, 
-0x0c0b, 0x0806, 0x2d09, 0x0a08, 
-0x8a86, 0x7e79, 0x0f11, 0x0906, 
-0x7f76, 0x0809, 0x3f08, 0x0704, 
-0x0b0c, 0x0769, 0x0a0c, 0x0f08, 
-0x8676, 0x1475, 0x6050, 0x521b, 
-0x400f, 0x423c, 0x0b07, 0x0804, 
-0x7423, 0x6712, 0x5611, 0x0b05, 
-0x1062, 0x0f11, 0x4d0c, 0x0b05, 
-0x8983, 0x7e75, 0x1a1e, 0x4510, 
-0x815a, 0x5206, 0x0b08, 0x0705, 
-0x8880, 0x7925, 0x1958, 0x541a, 
-0x1340, 0x0b3d, 0x0b0b, 0x0a05, 
-0x0e0e, 0x6a0b, 0x090b, 0x0b07, 
-0x824e, 0x716c, 0x1811, 0x0a06, 
-0x867e, 0x7911, 0x490e, 0x0907, 
-0x8a84, 0x7f4e, 0x6f66, 0x5718, 
-0x2966, 0x696b, 0x565c, 0x4c14, 
-0x5e4e, 0x0505, 0x0507, 0x0504, 
-0x8b84, 0x7f7b, 0x6b22, 0x490b, 
-0x7719, 0x1663, 0x5856, 0x591a, 
-0x3869, 0x0706, 0x0808, 0x0704, 
-0x7b09, 0x7206, 0x0808, 0x0704, 
-0x8981, 0x7b79, 0x1753, 0x160d, 
-0x771b, 0x541c, 0x2d4c, 0x4215, 
-0x8d87, 0x8583, 0x7b75, 0x6d49, 
-0x1b67, 0x6f0a, 0x120c, 0x0b04, 
-0x8a82, 0x7e7a, 0x3667, 0x6044, 
-0x8882, 0x7a42, 0x120a, 0x0907, 
-0x460c, 0x0807, 0x0a2f, 0x0905, 
-0x8071, 0x1c1b, 0x5f4a, 0x130b, 
-0x160d, 0x0a3f, 0x3e0c, 0x0905, 
-0x750f, 0x6f44, 0x0c0b, 0x0805, 
-0x827c, 0x0733, 0x0806, 0x0704, 
-0x0e0f, 0x4259, 0x0c0b, 0x0b05, 
-};
-
--- a/libcelt/quant_pitch.c
+++ /dev/null
@@ -1,117 +1,0 @@
-/* (C) 2007-2008 Jean-Marc Valin, CSIRO
-*/
-/*
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions
-   are met:
-   
-   - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-   
-   - Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-   
-   - Neither the name of the Xiph.org Foundation nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
-   
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "quant_pitch.h"
-#include <math.h>
-#include "pgain_table.h"
-#include "arch.h"
-#include "mathops.h"
-
-#ifdef FIXED_POINT
-#define PGAIN_ODD(codebook, i) ((celt_word16_t)(((codebook)[(i)]&0x00ffU)<<7))
-#define PGAIN_EVEN(codebook, i) ((celt_word16_t)(((codebook)[(i)]&0xff00U)>>1))
-#define PGAIN_ODD14(codebook, i) ((celt_word16_t)(((codebook)[(i)]&0x00ffU)<<6))
-#define PGAIN_EVEN14(codebook, i) ((celt_word16_t)(((codebook)[(i)]&0xff00U)>>2))
-
-#else
-#define PGAIN_ODD(codebook, i) ((1.f/32768.f)*(celt_word16_t)(((codebook)[(i)]&0x00ffU)<<7))
-#define PGAIN_EVEN(codebook, i) ((1.f/32768.f)*(celt_word16_t)(((codebook)[(i)]&0xff00U)>>1) )
-#define PGAIN_ODD14(codebook, i) PGAIN_ODD(codebook, i)
-#define PGAIN_EVEN14(codebook, i) PGAIN_EVEN(codebook, i)
-#endif
-
-#define PGAIN(codebook, i) ((i)&1 ? PGAIN_ODD(codebook, (i)>>1) : PGAIN_EVEN(codebook, (i)>>1))
-
-
-#define Q1515ONE MULT16_16(Q15ONE,Q15ONE)
-
-/** Taken from Speex.Finds the index of the entry in a codebook that best matches the input*/
-int vq_index(const celt_pgain_t *in, const celt_uint16_t *codebook, int len, int entries)
-{
-   int i,j;
-   int ind = 0;
-   celt_word32_t min_dist=VERY_LARGE32;
-   int best_index=0;
-   for (i=0;i<entries;i++)
-   {
-      celt_word32_t dist=0;
-      const celt_pgain_t *inp = in;
-      j=0; do {
-         celt_pgain_t tmp1 = SUB16(*inp++,PGAIN_EVEN14(codebook, ind));
-         celt_pgain_t tmp2 = SUB16(*inp++,PGAIN_ODD14(codebook, ind));
-         ind++;
-         dist = MAC16_16(dist, tmp1, tmp1);
-         dist = MAC16_16(dist, tmp2, tmp2);
-      } while (++j<len>>1);
-      if (dist<min_dist)
-      {
-         min_dist=dist;
-         best_index=i;
-      }
-   }
-   return best_index;
-}
-
-int quant_pitch(celt_pgain_t *gains, int len)
-{
-   int i, id;
-   celt_word32_t gain_sum = 0;
-   /*for (i=0;i<len;i++) printf ("%f ", gains[i]);printf ("\n");*/
-   /* Convert to a representation where the MSE criterion should be near-optimal */
-   for (i=0;i<len;i++)
-   {
-      gains[i] = SHR16(Q15ONE-celt_sqrt(Q1515ONE-MULT16_16(gains[i],gains[i])),1);
-      gain_sum = ADD32(gain_sum, EXTEND32(gains[i]));
-   }
-   /* Is it worth encoding the pitch? */
-   if (gain_sum > QCONST32(.3f,15))
-   {
-      id = vq_index(gains, pgain_table, len, 128);
-      /* FIXME: Remove when we're not waisting a transmitted index on 0 gains */
-      if (id==0)
-        id = -1;
-   } else {
-      id = -1;
-   }
-   return id;
-}
-
-/** Returns the pitch gain vector corresponding to a certain id */
-void unquant_pitch(int id, celt_pgain_t *gains, int len)
-{
-   int i;
-   for (i=0;i<len;i++)
-      gains[i] = celt_sqrt(Q1515ONE-MULT16_16(Q15ONE-PGAIN(pgain_table,id*len+i),Q15ONE-PGAIN(pgain_table,id*len+i)));
-}
--- a/libcelt/quant_pitch.h
+++ /dev/null
@@ -1,44 +1,0 @@
-/* (C) 2007 Jean-Marc Valin, CSIRO
-*/
-/*
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions
-   are met:
-   
-   - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-   
-   - Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-   
-   - Neither the name of the Xiph.org Foundation nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
-   
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#ifndef QUANT_PITCH_H
-#define QUANT_PITCH_H
-
-#include "arch.h"
-#include "entenc.h"
-#include "entdec.h"
-
-/** If this returns -1, the gain is zero (don't encode the pitch index) */
-int quant_pitch(celt_pgain_t *gains, int len);
-
-void unquant_pitch(int id, celt_pgain_t *gains, int len);
-
-#endif /* QUANT_PITCH_H */