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