Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mumble-voip/celt-0.7.0.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Marc Valin <jean-marc.valin@usherbrooke.ca>2009-11-09 07:51:54 +0300
committerJean-Marc Valin <jean-marc.valin@usherbrooke.ca>2009-11-09 07:51:54 +0300
commit9319e3e6dfbace947968bef8a4b2290d034f0b1e (patch)
treeea26e3aa6f6615ab165df5be6306358bf252b6d5
parent294863bbea2d218d58c294b7b9ff60f221494c3d (diff)
Removing original freq-domain pitch code
-rw-r--r--libcelt/Makefile.am10
-rw-r--r--libcelt/cwrs.c4
-rw-r--r--libcelt/dump_modes.c16
-rw-r--r--libcelt/modes.c13
-rw-r--r--libcelt/modes.h3
-rw-r--r--libcelt/pitch.c205
6 files changed, 10 insertions, 241 deletions
diff --git a/libcelt/Makefile.am b/libcelt/Makefile.am
index 7c574cc..b2a61e8 100644
--- a/libcelt/Makefile.am
+++ b/libcelt/Makefile.am
@@ -15,18 +15,16 @@ lib_LTLIBRARIES = libcelt.la
# 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 rangedec.c rangeenc.c rate.c \
+ entdec.c entenc.c header.c kiss_fft.c laplace.c mdct.c \
+ modes.c pitch.c quant_bands.c rangedec.c rangeenc.c rate.c \
vq.c
-#noinst_HEADERS =
-
libcelt_la_LDFLAGS = -version-info @CELT_LT_CURRENT@:@CELT_LT_REVISION@:@CELT_LT_AGE@
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 pitch.h psy.h \
+ kfft_double.h kiss_fft.h laplace.h mdct.h mfrngcod.h \
+ mathops.h modes.h os_support.h pitch.h \
quant_bands.h rate.h stack_alloc.h vq.h
noinst_PROGRAMS = testcelt dump_modes
diff --git a/libcelt/cwrs.c b/libcelt/cwrs.c
index 15135af..f150ca0 100644
--- a/libcelt/cwrs.c
+++ b/libcelt/cwrs.c
@@ -446,8 +446,6 @@ static celt_uint32 ncwrs_urow(unsigned _n,unsigned _k,celt_uint32 *_u){
return _u[_k]+_u[_k+1];
}
-#ifndef SMALL_FOOTPRINT
-
/*Returns the _i'th combination of _k elements (at most 32767) chosen from a
set of size 1 with associated sign bits.
_y: Returns the vector of pulses.*/
@@ -457,6 +455,8 @@ static inline void cwrsi1(int _k,celt_uint32 _i,int *_y){
_y[0]=_k+s^s;
}
+#ifndef SMALL_FOOTPRINT
+
/*Returns the _i'th combination of _k elements (at most 32767) chosen from a
set of size 2 with associated sign bits.
_y: Returns the vector of pulses.*/
diff --git a/libcelt/dump_modes.c b/libcelt/dump_modes.c
index fbe50a9..25dc651 100644
--- a/libcelt/dump_modes.c
+++ b/libcelt/dump_modes.c
@@ -83,16 +83,6 @@ void dump_modes(FILE *file, CELTMode **modes, int nb_modes)
fprintf(file, "#endif\n");
fprintf(file, "\n");
- fprintf(file, "#ifndef DEF_PSY%d\n", mode->Fs);
- fprintf(file, "#define DEF_PSY%d\n", mode->Fs);
- fprintf (file, "static const celt_word16 psy_decayR_%d[%d] = {\n", mode->Fs, MAX_PERIOD/2);
- for (j=0;j<MAX_PERIOD/2;j++)
- fprintf (file, WORD16 ", ", mode->psy.decayR[j]);
- fprintf (file, "};\n");
- fprintf(file, "#endif\n");
- fprintf(file, "\n");
-
-
fprintf(file, "#ifndef DEF_ALLOC_VECTORS%d_%d\n", mode->Fs, mode->mdctSize);
fprintf(file, "#define DEF_ALLOC_VECTORS%d_%d\n", mode->Fs, mode->mdctSize);
fprintf (file, "static const celt_int16 allocVectors%d_%d[%d] = {\n", mode->Fs, mode->mdctSize, mode->nbEBands*mode->nbAllocVectors);
@@ -114,8 +104,8 @@ void dump_modes(FILE *file, CELTMode **modes, int nb_modes)
int k;
if (j==0 || (mode->bits[j] != mode->bits[j-1]))
{
- fprintf (file, "static const celt_int16 allocCache_band%d_%d_%d[MAX_PULSES] = {\n", j, mode->Fs, mode->mdctSize);
- for (k=0;k<MAX_PULSES;k++)
+ fprintf (file, "static const celt_int16 allocCache_band%d_%d_%d[MAX_PSEUDO] = {\n", j, mode->Fs, mode->mdctSize);
+ for (k=0;k<MAX_PSEUDO;k++)
fprintf (file, "%2d, ", mode->bits[j][k]);
fprintf (file, "};\n");
} else {
@@ -145,13 +135,11 @@ void dump_modes(FILE *file, CELTMode **modes, int nb_modes)
fprintf(file, "allocVectors%d_%d,\t/* allocVectors */\n", mode->Fs, mode->mdctSize);
fprintf(file, "allocCache%d_%d,\t/* bits */\n", mode->Fs, mode->mdctSize);
fprintf(file, "{%d, 0, 0},\t/* mdct */\n", 2*mode->mdctSize);
- fprintf(file, "0,\t/* fft */\n");
fprintf(file, "window%d,\t/* window */\n", mode->overlap);
fprintf(file, "%d,\t/* nbShortMdcts */\n", mode->nbShortMdcts);
fprintf(file, "%d,\t/* shortMdctSize */\n", mode->shortMdctSize);
fprintf(file, "{%d, 0, 0},\t/* shortMdct */\n", 2*mode->mdctSize);
fprintf(file, "window%d,\t/* shortWindow */\n", mode->overlap);
- fprintf(file, "{psy_decayR_%d},\t/* psy */\n", mode->Fs);
fprintf(file, "0,\t/* prob */\n");
fprintf(file, "0x%x,\t/* marker */\n", 0xa110ca7e);
fprintf(file, "};\n");
diff --git a/libcelt/modes.c b/libcelt/modes.c
index 3faae9c..fd1bf61 100644
--- a/libcelt/modes.c
+++ b/libcelt/modes.c
@@ -367,16 +367,9 @@ CELTMode *celt_mode_create(celt_int32 Fs, int frame_size, int *error)
if (mode->bits==NULL)
goto failure;
-#ifndef SHORTCUTS
- psydecay_init(&mode->psy, MAX_PERIOD/2, mode->Fs);
- if (mode->psy.decayR==NULL)
- goto failure;
-#endif
-
#endif /* !STATIC_MODES */
mdct_init(&mode->mdct, 2*mode->mdctSize);
- mode->fft = pitch_state_alloc(MAX_PERIOD);
mode->shortMdctSize = mode->mdctSize/mode->nbShortMdcts;
mdct_init(&mode->shortMdct, 2*mode->shortMdctSize);
@@ -384,7 +377,7 @@ CELTMode *celt_mode_create(celt_int32 Fs, int frame_size, int *error)
mode->prob = quant_prob_alloc(mode);
if ((mode->mdct.trig==NULL) || (mode->shortMdct.trig==NULL)
#ifndef ENABLE_TI_DSPLIB55
- || (mode->mdct.kfft==NULL) || (mode->fft==NULL) || (mode->shortMdct.kfft==NULL)
+ || (mode->mdct.kfft==NULL) || (mode->shortMdct.kfft==NULL)
#endif
|| (mode->prob==NULL))
goto failure;
@@ -442,13 +435,9 @@ void celt_mode_destroy(CELTMode *mode)
celt_free((celt_word16*)mode->window);
-#ifndef SHORTCUTS
- psydecay_clear(&mode->psy);
-#endif
#endif
mdct_clear(&mode->mdct);
mdct_clear(&mode->shortMdct);
- pitch_state_free(mode->fft);
quant_prob_free(mode->prob);
mode->marker_end = MODEFREED;
celt_free((CELTMode *)mode);
diff --git a/libcelt/modes.h b/libcelt/modes.h
index b810370..891387a 100644
--- a/libcelt/modes.h
+++ b/libcelt/modes.h
@@ -98,7 +98,6 @@ struct CELTMode {
/* Stuff that could go in the {en,de}coder, but we save space this way */
mdct_lookup mdct;
- kiss_fftr_cfg fft;
const celt_word16 *window;
@@ -107,8 +106,6 @@ struct CELTMode {
mdct_lookup shortMdct;
const celt_word16 *shortWindow;
- struct PsyDecay psy;
-
int *prob;
celt_uint32 marker_end;
};
diff --git a/libcelt/pitch.c b/libcelt/pitch.c
index fc68d38..f04934e 100644
--- a/libcelt/pitch.c
+++ b/libcelt/pitch.c
@@ -40,214 +40,11 @@
#include "config.h"
#endif
-/*#include "_kiss_fft_guts.h"
-#include "kiss_fftr.h"*/
-#include "kfft_single.h"
-
#include "pitch.h"
-#include "psy.h"
#include "os_support.h"
-#include "mathops.h"
#include "modes.h"
#include "stack_alloc.h"
-
-kiss_fftr_cfg pitch_state_alloc(int max_lag)
-{
- return real16_fft_alloc(max_lag);
-}
-
-void pitch_state_free(kiss_fftr_cfg st)
-{
- real16_fft_free(st);
-}
-
-#ifdef FIXED_POINT
-static void normalise16(celt_word16 *x, int len, celt_word16 val)
-{
- int i;
- celt_word16 maxabs;
- maxabs = celt_maxabs16(x,len);
- if (maxabs > val)
- {
- int shift = 0;
- while (maxabs > val)
- {
- maxabs >>= 1;
- shift++;
- }
- if (shift==0)
- return;
- i=0;
- do{
- x[i] = SHR16(x[i], shift);
- } while (++i<len);
- } else {
- int shift=0;
- if (maxabs == 0)
- return;
- val >>= 1;
- while (maxabs < val)
- {
- val >>= 1;
- shift++;
- }
- if (shift==0)
- return;
- i=0;
- do{
- x[i] = SHL16(x[i], shift);
- } while (++i<len);
- }
-}
-#else
-#define normalise16(x,len,val)
-#endif
-
-#define INPUT_SHIFT 15
-
-void find_spectral_pitch(const CELTMode *m, kiss_fftr_cfg fft, const struct PsyDecay *decay, const celt_sig * restrict x, const celt_sig * restrict y, const celt_word16 * restrict window, celt_word16 * restrict spectrum, int len, int max_pitch, int *pitch, int _C)
-{
- int c, i;
- VARDECL(celt_word16, _X);
- VARDECL(celt_word16, _Y);
- const celt_word16 * restrict wptr;
-#ifndef SHORTCUTS
- VARDECL(celt_mask, curve);
-#endif
- celt_word16 * restrict X, * restrict Y;
- celt_word16 * restrict Xptr, * restrict Yptr;
- const celt_sig * restrict yptr;
- int n2;
- int L2;
- const int C = CHANNELS(_C);
- const int overlap = OVERLAP(m);
- const int lag = MAX_PERIOD;
- SAVE_STACK;
- n2 = lag>>1;
- L2 = len>>1;
- ALLOC(_X, lag, celt_word16);
- X = _X;
-#ifndef SHORTCUTS
- ALLOC(curve, n2, celt_mask);
-#endif
- CELT_MEMSET(X,0,lag);
- /* Sum all channels of the current frame and copy into X in bit-reverse order */
- for (c=0;c<C;c++)
- {
- const celt_sig * restrict xptr = &x[c];
- for (i=0;i<L2;i++)
- {
- X[2*BITREV(fft,i)] += SHR32(*xptr,INPUT_SHIFT);
- xptr += C;
- X[2*BITREV(fft,i)+1] += SHR32(*xptr,INPUT_SHIFT);
- xptr += C;
- }
- }
- /* Applying the window in the bit-reverse domain. It's a bit weird, but it
- can help save memory */
- wptr = window;
- for (i=0;i<overlap>>1;i++)
- {
- X[2*BITREV(fft,i)] = MULT16_16_Q15(wptr[0], X[2*BITREV(fft,i)]);
- X[2*BITREV(fft,i)+1] = MULT16_16_Q15(wptr[1], X[2*BITREV(fft,i)+1]);
- X[2*BITREV(fft,L2-i-1)] = MULT16_16_Q15(wptr[1], X[2*BITREV(fft,L2-i-1)]);
- X[2*BITREV(fft,L2-i-1)+1] = MULT16_16_Q15(wptr[0], X[2*BITREV(fft,L2-i-1)+1]);
- wptr += 2;
- }
- normalise16(X, lag, 8192);
- /*for (i=0;i<lag;i++) printf ("%d ", X[i]);printf ("\n");*/
- /* Forward real FFT (in-place) */
- real16_fft_inplace(fft, X, lag);
-
- if (spectrum)
- {
- for (i=0;i<lag/4;i++)
- {
- spectrum[2*i] = X[4*i];
- spectrum[2*i+1] = X[4*i+1];
- }
- }
-#ifndef SHORTCUTS
- compute_masking(decay, X, curve, lag);
-#endif
-
- /* Deferred allocation to reduce peak stack usage */
- ALLOC(_Y, lag, celt_word16);
- Y = _Y;
- yptr = &y[0];
- /* Copy first channel of the past audio into Y in bit-reverse order */
- for (i=0;i<n2;i++)
- {
- Y[2*BITREV(fft,i)] = SHR32(*yptr,INPUT_SHIFT);
- yptr += C;
- Y[2*BITREV(fft,i)+1] = SHR32(*yptr,INPUT_SHIFT);
- yptr += C;
- }
- /* Add remaining channels into Y in bit-reverse order */
- for (c=1;c<C;c++)
- {
- yptr = &y[c];
- for (i=0;i<n2;i++)
- {
- Y[2*BITREV(fft,i)] += SHR32(*yptr,INPUT_SHIFT);
- yptr += C;
- Y[2*BITREV(fft,i)+1] += SHR32(*yptr,INPUT_SHIFT);
- yptr += C;
- }
- }
- normalise16(Y, lag, 8192);
- /* Forward real FFT (in-place) */
- real16_fft_inplace(fft, Y, lag);
-
- /* Compute cross-spectrum using the inverse masking curve as weighting */
- Xptr = &X[2];
- Yptr = &Y[2];
- for (i=1;i<n2;i++)
- {
- celt_word16 Xr, Xi, n;
- /* weight = 1/sqrt(curve) */
- Xr = Xptr[0];
- Xi = Xptr[1];
-#ifdef SHORTCUTS
- /*n = SHR32(32767,(celt_ilog2(EPSILON+curve[i])>>1));*/
- n = 1+(8192>>(celt_ilog2(1+MULT16_16(Xr,Xr)+MULT16_16(Xi,Xi))>>1));
- /* Pre-multiply X by n, so we can keep everything in 16 bits */
- Xr = MULT16_16_16(n, Xr);
- Xi = MULT16_16_16(n, Xi);
-#else
- {
- celt_word32 t;
-#ifdef FIXED_POINT
- int k;
-#endif
- t = EPSILON+curve[i];
-#ifdef FIXED_POINT
- k = celt_ilog2(t)>>1;
-#endif
- t = VSHR32(t, (k-7)<<1);
- n = celt_rsqrt_norm(t);
- /* Pre-multiply X by n, so we can keep everything in 16 bits */
- Xr = EXTRACT16(PSHR32(MULT16_16(n, Xr),3+k));
- Xi = EXTRACT16(PSHR32(MULT16_16(n, Xi),3+k));
- }
-#endif
- /* Cross-spectrum between X and conj(Y) */
- *Xptr++ = ADD16(MULT16_16_Q15(Xr, Yptr[0]), MULT16_16_Q15(Xi,Yptr[1]));
- *Xptr++ = SUB16(MULT16_16_Q15(Xr, Yptr[1]), MULT16_16_Q15(Xi,Yptr[0]));
- Yptr += 2;
- }
- /*printf ("\n");*/
- X[0] = X[1] = 0;
- /*for (i=0;i<lag;i++) printf ("%d ", X[i]);printf ("\n");*/
- normalise16(X, lag, 50);
- /* Inverse half-complex to real FFT gives us the correlation */
- real16_ifft(fft, X, Y, lag);
-
- /* The peak in the correlation gives us the pitch */
- *pitch = find_max16(Y, max_pitch);
- /*printf ("%d ", *pitch);*/
- RESTORE_STACK;
-}
+#include "mathops.h"
void find_best_pitch(celt_word32 *xcorr, celt_word32 maxcorr, celt_word16 *y, int yshift, int len, int max_pitch, int best_pitch[2])
{