Speed improvements (got rid of a couple divide ops), cleanup...
[speexdsp.git] / libspeex / sb_celp.h
1 /* Copyright (C) 2002 Jean-Marc Valin 
2    File: sb_celp.h
3
4    This library is free software; you can redistribute it and/or
5    modify it under the terms of the GNU Lesser General Public
6    License as published by the Free Software Foundation; either
7    version 2.1 of the License, or (at your option) any later version.
8    
9    This library is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12    Lesser General Public License for more details.
13    
14    You should have received a copy of the GNU Lesser General Public
15    License along with this library; if not, write to the Free Software
16    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17
18 */
19
20 #ifndef SB_CELP_H
21 #define SB_CELP_H
22
23 #include "modes.h"
24 #include "bits.h"
25 #include "speex.h"
26
27 /**Structure representing the full state of the encoder*/
28 typedef struct SBEncState {
29    EncState st_low;
30    int    full_frame_size;     /* Length of full-band frames*/
31    int    frame_size;          /* Length of high-band frames*/
32    int    subframeSize;        /* Length of high-band sub-frames*/
33    int    nbSubframes;         /* Number of high-band sub-frames*/
34    int    windowSize;          /* Length of high-band LPC window*/
35    int    lpcSize;             /* Order of high-band LPC analysis */
36    int    first;               /* First frame? */
37    float  lag_factor;          /* Lag-windowing control parameter */
38    float  lpc_floor;           /* Controls LPC analysis noise floor */
39    float  gamma1;              /* Perceptual weighting coef 1 */
40    float  gamma2;              /* Perceptual weighting coef 2 */
41
42    float *stack;               /* Temporary allocation stack */
43    float *x0, *x0d, *x1, *x1d; /* QMF filter signals*/
44    float *high;                /* High-band signal (buffer) */
45    float *y0, *y1;             /* QMF synthesis signals */
46    float *h0_mem, *h1_mem, *g0_mem, *g1_mem; /* QMF memories */
47
48    float *excBuf;              /* High-band excitation */
49    float *exc;                 /* High-band excitation (for QMF only)*/
50    float *buf;                 /* Temporary buffer */
51    float *res;                 /* Zero-input response (ringing) */
52    float *sw;                  /* Perceptually weighted signal */
53    float *target;              /* Weighted target signal (analysis by synthesis) */
54    float *window;              /* LPC analysis window */
55    float *lagWindow;           /* Auto-correlation window */
56    float *autocorr;            /* Auto-correlation (for LPC analysis) */
57    float *rc;                  /* Reflection coefficients (unused) */
58    float *lpc;                 /* LPC coefficients */
59    float *lsp;                 /* LSP coefficients */
60    float *qlsp;                /* Quantized LSPs */
61    float *old_lsp;             /* LSPs of previous frame */
62    float *old_qlsp;            /* Quantized LSPs of previous frame */
63    float *interp_lsp;          /* Interpolated LSPs for current sub-frame */
64    float *interp_qlsp;         /* Interpolated quantized LSPs for current sub-frame */
65    float *interp_lpc;          /* Interpolated LPCs for current sub-frame */
66    float *interp_qlpc;         /* Interpolated quantized LPCs for current sub-frame */
67    float *bw_lpc1;             /* Bandwidth-expanded version of LPCs (#1) */
68    float *bw_lpc2;             /* Bandwidth-expanded version of LPCs (#2) */
69
70    float *mem_sp;              /* Synthesis signal memory */
71    float *mem_sp2;
72    float *mem_sw;              /* Perceptual signal memory */
73 } SBEncState;
74
75
76 /**Structure representing the full state of the decoder*/
77 typedef struct SBDecState {
78    DecState st_low;
79    int    full_frame_size;
80    int    frame_size;
81    int    subframeSize;
82    int    nbSubframes;
83    int    lpcSize;
84    int    first;
85
86    float *stack;
87    float *x0, *x0d, *x1, *x1d;
88    float *high;
89    float *y0, *y1;
90    float *h0_mem, *h1_mem, *g0_mem, *g1_mem;
91
92    float *exc;
93    float *qlsp;
94    float *old_qlsp;
95    float *interp_qlsp;
96    float *interp_qlpc;
97
98    float *mem_sp;
99    float *mem_sw;
100 } SBDecState;
101
102
103 /**Initializes encoder state*/
104 void sb_encoder_init(SBEncState *st, SpeexMode *mode);
105
106 /**De-allocates encoder state resources*/
107 void sb_encoder_destroy(SBEncState *st);
108
109 /**Encodes one frame*/
110 void sb_encode(SBEncState *st, float *in, FrameBits *bits);
111
112
113 /**Initializes decoder state*/
114 void sb_decoder_init(SBDecState *st, SpeexMode *mode);
115
116 /**De-allocates decoder state resources*/
117 void sb_decoder_destroy(SBDecState *st);
118
119 /**Decodes one frame*/
120 void sb_decode(SBDecState *st, FrameBits *bits, float *out);
121
122
123 #endif