Started the decoder part, I think we now update filters in a better way
[speexdsp.git] / libspeex / speex.h
1 /* Copyright (C) 2002 Jean-Marc Valin 
2    File: speex.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 SPEEX_H
21 #define SPEEX_H
22
23 /**Structure representing the full state of the encoder*/
24 typedef struct EncState {
25    int    first;          /* Is this the first frame? */
26    int    frameSize;      /* Size of frames */
27    int    subframeSize;   /* Size of sub-frames */
28    int    nbSubframes;    /* Number of sub-frames */
29    int    windowSize;     /* Analysis (LPC) window length */
30    int    lpcSize;        /* LPC order */
31    int    bufSize;        /* Buffer size */
32    float  gamma1;         /* Perceptual filter: A(z/gamma1) */
33    float  gamma2;         /* Perceptual filter: A(z/gamma2) */
34    float *inBuf;          /* Input buffer (original signal) */
35    float *frame;          /* Start of original frame */
36    float *wBuf;           /* "Weighted" buffer */
37    float *wframe;         /* Start of "weighted" frame */
38    float *excBuf;         /* Excitation buffer */
39    float *exc;            /* Start of excitation frame */
40    float *resBuf;         /* Excitation buffer */
41    float *res;            /* Start of excitation frame */
42    float *tBuf;           /* "weighted target" buffer */
43    float *tframe;         /* Start of "weighted target" frame */
44    float *window;         /* Temporary (Hanning) window */
45    float *buf2;           /* 2nd temporary buffer */
46    float *autocorr;       /* auto-correlation */
47    float *lagWindow;      /* Window applied to auto-correlation */
48    float *lpc;            /* LPCs for current frame */
49    float *lsp;            /* LSPs for current frame */
50    float *qlsp;           /* Quantized LSPs for current frame */
51    float *old_lsp;        /* LSPs for previous frame */
52    float *old_qlsp;       /* Quantized LSPs for previous frame */
53    float *interp_lsp;     /* Interpolated LSPs */
54    float *interp_qlsp;    /* Interpolated quantized LSPs */
55    float *interp_lpc;     /* Interpolated LPCs */
56    float *interp_qlpc;    /* Interpolated quantized LPCs */
57    float *bw_lpc1;        /* LPCs after bandwidth expansion by gamma1 for perceptual weighting*/
58    float *bw_lpc2;        /* LPCs after bandwidth expansion by gamma2 for perceptual weighting*/
59    float *bw_az;          /* Convolution of bw_lpc2 and interp_qlpc */
60    float *rc;             /* Reflection coefficients */
61    float *mem1, *mem2, *mem3, *mem4, *mem5, *mem6, *mem7;
62    float *dmem1, *dmem2;
63 } EncState;
64
65 typedef struct DecState {
66    int    first;          /* Is this the first frame? */
67    int    frameSize;      /* Size of frames */
68    int    subframeSize;   /* Size of sub-frames */
69    int    nbSubframes;    /* Number of sub-frames */
70    int    windowSize;     /* Analysis (LPC) window length */
71    int    lpcSize;        /* LPC order */
72    int    bufSize;        /* Buffer size */
73    float *inBuf;          /* Input buffer (original signal) */
74    float *frame;          /* Start of original frame */
75    float *excBuf;         /* Excitation buffer */
76    float *exc;            /* Start of excitation frame */
77    float *qlsp;           /* Quantized LSPs for current frame */
78    float *old_qlsp;       /* Quantized LSPs for previous frame */
79    float *interp_qlsp;    /* Interpolated quantized LSPs */
80    float *interp_qlpc;    /* Interpolated quantized LPCs */
81
82 } DecState;
83
84 /**Initializes encoder state*/
85 void encoder_init(EncState *st);
86 /**De-allocates encoder state resources*/
87 void encoder_destroy(EncState *st);
88 /**Encodes one frame*/
89 void encode(EncState *st, float *in, int *outSize, void *bits);
90
91 void decoder_init(DecState *st);
92 void decoder_destroy(DecState *st);
93 void decode(DecState *st, float *bits, float *out);
94
95
96
97 #endif