speex.[ch] renamed to nb_celp.[ch] for consistency
[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 "speex_bits.h"
25 #include "nb_celp.h"
26
27 /**Structure representing the full state of the encoder*/
28 typedef struct SBEncState {
29    SpeexMode *mode;
30    void *st_low;
31    int    full_frame_size;     /* Length of full-band frames*/
32    int    frame_size;          /* Length of high-band frames*/
33    int    subframeSize;        /* Length of high-band sub-frames*/
34    int    nbSubframes;         /* Number of high-band sub-frames*/
35    int    windowSize;          /* Length of high-band LPC window*/
36    int    lpcSize;             /* Order of high-band LPC analysis */
37    int    bufSize;             /* Buffer size */
38    int    first;               /* First frame? */
39    float  lag_factor;          /* Lag-windowing control parameter */
40    float  lpc_floor;           /* Controls LPC analysis noise floor */
41    float  gamma1;              /* Perceptual weighting coef 1 */
42    float  gamma2;              /* Perceptual weighting coef 2 */
43
44    float *stack;               /* Temporary allocation stack */
45    float *x0, *x0d, *x1, *x1d; /* QMF filter signals*/
46    float *high;                /* High-band signal (buffer) */
47    float *y0, *y1;             /* QMF synthesis signals */
48    float *h0_mem, *h1_mem, *g0_mem, *g1_mem; /* QMF memories */
49
50    float *excBuf;              /* High-band excitation */
51    float *exc;                 /* High-band excitation (for QMF only)*/
52    float *buf;                 /* Temporary buffer */
53    float *res;                 /* Zero-input response (ringing) */
54    float *sw;                  /* Perceptually weighted signal */
55    float *target;              /* Weighted target signal (analysis by synthesis) */
56    float *window;              /* LPC analysis window */
57    float *lagWindow;           /* Auto-correlation window */
58    float *autocorr;            /* Auto-correlation (for LPC analysis) */
59    float *rc;                  /* Reflection coefficients (unused) */
60    float *lpc;                 /* LPC coefficients */
61    float *lsp;                 /* LSP coefficients */
62    float *qlsp;                /* Quantized LSPs */
63    float *old_lsp;             /* LSPs of previous frame */
64    float *old_qlsp;            /* Quantized LSPs of previous frame */
65    float *interp_lsp;          /* Interpolated LSPs for current sub-frame */
66    float *interp_qlsp;         /* Interpolated quantized LSPs for current sub-frame */
67    float *interp_lpc;          /* Interpolated LPCs for current sub-frame */
68    float *interp_qlpc;         /* Interpolated quantized LPCs for current sub-frame */
69    float *bw_lpc1;             /* Bandwidth-expanded version of LPCs (#1) */
70    float *bw_lpc2;             /* Bandwidth-expanded version of LPCs (#2) */
71
72    float *mem_sp;              /* Synthesis signal memory */
73    float *mem_sp2;
74    float *mem_sw;              /* Perceptual signal memory */
75 } SBEncState;
76
77
78 /**Structure representing the full state of the decoder*/
79 typedef struct SBDecState {
80    SpeexMode *mode;
81    void *st_low;
82    int    full_frame_size;
83    int    frame_size;
84    int    subframeSize;
85    int    nbSubframes;
86    int    lpcSize;
87    int    first;
88    float  pf_gamma;
89    int    pf_order;
90
91    float *stack;
92    float *x0, *x0d, *x1, *x1d;
93    float *high;
94    float *y0, *y1;
95    float *h0_mem, *h1_mem, *g0_mem, *g1_mem;
96
97    float *exc;
98    float *pf_exc;
99    float *pf_window;
100    float *pf_autocorr;
101    float *pf_lpc;
102    float *pf_bwlpc;
103    float *qlsp;
104    float *old_qlsp;
105    float *interp_qlsp;
106    float *interp_qlpc;
107
108    float *mem_sp;
109    float *mem_pf_exc1;
110    float *mem_pf_exc2;
111    float *mem_pf_sp;
112 } SBDecState;
113
114
115 /**Initializes encoder state*/
116 void *sb_encoder_init(SpeexMode *m);
117
118 /**De-allocates encoder state resources*/
119 void sb_encoder_destroy(void *state);
120
121 /**Encodes one frame*/
122 void sb_encode(void *state, float *in, FrameBits *bits);
123
124
125 /**Initializes decoder state*/
126 void *sb_decoder_init(SpeexMode *m);
127
128 /**De-allocates decoder state resources*/
129 void sb_decoder_destroy(void *state);
130
131 /**Decodes one frame*/
132 void sb_decode(void *state, FrameBits *bits, float *out);
133
134
135 #endif