summaryrefslogtreecommitdiff
path: root/codec2.c
diff options
context:
space:
mode:
Diffstat (limited to 'codec2.c')
-rw-r--r--codec2.c43
1 files changed, 28 insertions, 15 deletions
diff --git a/codec2.c b/codec2.c
index 840fe21..2697356 100644
--- a/codec2.c
+++ b/codec2.c
@@ -29,6 +29,7 @@
29#include <assert.h> 29#include <assert.h>
30#include <stdio.h> 30#include <stdio.h>
31#include <stdlib.h> 31#include <stdlib.h>
32#include <stdbool.h>
32#include <string.h> 33#include <string.h>
33#include <math.h> 34#include <math.h>
34 35
@@ -114,12 +115,25 @@ struct CODEC2 * codec2_create(int mode)
114 struct CODEC2 *c2; 115 struct CODEC2 *c2;
115 int i,l; 116 int i,l;
116 117
117#ifndef CORTEX_M4 118 // ALL POSSIBLE MODES MUST BE CHECKED HERE!
118 if (( CODEC2_MODE_ACTIVE(CODEC2_MODE_450, mode)) || 119 // we test if the desired mode is enabled at compile time
119 ( CODEC2_MODE_ACTIVE(CODEC2_MODE_450PWB, mode)) ) { 120 // and return NULL if not
121
122 if (false == ( CODEC2_MODE_ACTIVE(CODEC2_MODE_3200, mode)
123 || CODEC2_MODE_ACTIVE(CODEC2_MODE_2400, mode)
124 || CODEC2_MODE_ACTIVE(CODEC2_MODE_1600, mode)
125 || CODEC2_MODE_ACTIVE(CODEC2_MODE_1400, mode)
126 || CODEC2_MODE_ACTIVE(CODEC2_MODE_1300, mode)
127 || CODEC2_MODE_ACTIVE(CODEC2_MODE_1200, mode)
128 || CODEC2_MODE_ACTIVE(CODEC2_MODE_700, mode)
129 || CODEC2_MODE_ACTIVE(CODEC2_MODE_700B, mode)
130 || CODEC2_MODE_ACTIVE(CODEC2_MODE_700C, mode)
131 || CODEC2_MODE_ACTIVE(CODEC2_MODE_450, mode)
132 || CODEC2_MODE_ACTIVE(CODEC2_MODE_450PWB, mode)
133 ) )
134 {
120 return NULL; 135 return NULL;
121 } 136 }
122#endif
123 137
124 c2 = (struct CODEC2*)MALLOC(sizeof(struct CODEC2)); 138 c2 = (struct CODEC2*)MALLOC(sizeof(struct CODEC2));
125 if (c2 == NULL) 139 if (c2 == NULL)
@@ -221,14 +235,15 @@ struct CODEC2 * codec2_create(int mode)
221 int k; 235 int k;
222 for(k=0; k<NEWAMP1_K; k++) { 236 for(k=0; k<NEWAMP1_K; k++) {
223 c2->prev_rate_K_vec_[k] = 0.0; 237 c2->prev_rate_K_vec_[k] = 0.0;
238 c2->eq[k] = 0.0;
224 } 239 }
240 c2->eq_en = 0;
225 c2->Wo_left = 0.0; 241 c2->Wo_left = 0.0;
226 c2->voicing_left = 0;; 242 c2->voicing_left = 0;;
227 c2->phase_fft_fwd_cfg = codec2_fft_alloc(NEWAMP1_PHASE_NFFT, 0, NULL, NULL); 243 c2->phase_fft_fwd_cfg = codec2_fft_alloc(NEWAMP1_PHASE_NFFT, 0, NULL, NULL);
228 c2->phase_fft_inv_cfg = codec2_fft_alloc(NEWAMP1_PHASE_NFFT, 1, NULL, NULL); 244 c2->phase_fft_inv_cfg = codec2_fft_alloc(NEWAMP1_PHASE_NFFT, 1, NULL, NULL);
229 } 245 }
230 246
231#ifndef CORTEX_M4
232 /* newamp2 initialisation */ 247 /* newamp2 initialisation */
233 248
234 if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_450, c2->mode)) { 249 if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_450, c2->mode)) {
@@ -255,7 +270,6 @@ struct CODEC2 * codec2_create(int mode)
255 c2->phase_fft_fwd_cfg = codec2_fft_alloc(NEWAMP2_PHASE_NFFT, 0, NULL, NULL); 270 c2->phase_fft_fwd_cfg = codec2_fft_alloc(NEWAMP2_PHASE_NFFT, 0, NULL, NULL);
256 c2->phase_fft_inv_cfg = codec2_fft_alloc(NEWAMP2_PHASE_NFFT, 1, NULL, NULL); 271 c2->phase_fft_inv_cfg = codec2_fft_alloc(NEWAMP2_PHASE_NFFT, 1, NULL, NULL);
257 } 272 }
258#endif
259 273
260 c2->fmlfeat = NULL; 274 c2->fmlfeat = NULL;
261 275
@@ -302,7 +316,6 @@ struct CODEC2 * codec2_create(int mode)
302 c2->decode = codec2_decode_1200; 316 c2->decode = codec2_decode_1200;
303 } 317 }
304 318
305#ifndef CORTEX_M4
306 if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_700, c2->mode)) 319 if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_700, c2->mode))
307 { 320 {
308 c2->encode = codec2_encode_700; 321 c2->encode = codec2_encode_700;
@@ -314,13 +327,13 @@ struct CODEC2 * codec2_create(int mode)
314 c2->encode = codec2_encode_700b; 327 c2->encode = codec2_encode_700b;
315 c2->decode = codec2_decode_700b; 328 c2->decode = codec2_decode_700b;
316 } 329 }
317#endif 330
318 if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_700C, c2->mode)) 331 if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_700C, c2->mode))
319 { 332 {
320 c2->encode = codec2_encode_700c; 333 c2->encode = codec2_encode_700c;
321 c2->decode = codec2_decode_700c; 334 c2->decode = codec2_decode_700c;
322 } 335 }
323#ifndef CORTEX_M4 336
324 if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_450, c2->mode)) 337 if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_450, c2->mode))
325 { 338 {
326 c2->encode = codec2_encode_450; 339 c2->encode = codec2_encode_450;
@@ -334,7 +347,6 @@ struct CODEC2 * codec2_create(int mode)
334 c2->decode = codec2_decode_450pwb; 347 c2->decode = codec2_decode_450pwb;
335 } 348 }
336 349
337#endif
338 350
339 return c2; 351 return c2;
340} 352}
@@ -1518,7 +1530,6 @@ void codec2_decode_1200(struct CODEC2 *c2, short speech[], const unsigned char *
1518} 1530}
1519 1531
1520 1532
1521#ifndef CORTEX_M4
1522/*---------------------------------------------------------------------------*\ 1533/*---------------------------------------------------------------------------*\
1523 1534
1524 FUNCTION....: codec2_encode_700 1535 FUNCTION....: codec2_encode_700
@@ -1926,7 +1937,6 @@ void codec2_decode_700b(struct CODEC2 *c2, short speech[], const unsigned char *
1926 for(i=0; i<LPC_ORD_LOW; i++) 1937 for(i=0; i<LPC_ORD_LOW; i++)
1927 c2->prev_lsps_dec[i] = lsps[3][i]; 1938 c2->prev_lsps_dec[i] = lsps[3][i];
1928} 1939}
1929#endif
1930 1940
1931 1941
1932/*---------------------------------------------------------------------------*\ 1942/*---------------------------------------------------------------------------*\
@@ -1987,7 +1997,7 @@ void codec2_encode_700c(struct CODEC2 *c2, unsigned char * bits, short speech[])
1987 K, 1997 K,
1988 &mean, 1998 &mean,
1989 rate_K_vec_no_mean, 1999 rate_K_vec_no_mean,
1990 rate_K_vec_no_mean_, &c2->se); 2000 rate_K_vec_no_mean_, &c2->se, c2->eq, c2->eq_en);
1991 c2->nse += K; 2001 c2->nse += K;
1992 2002
1993#ifndef CORTEX_M4 2003#ifndef CORTEX_M4
@@ -2092,7 +2102,6 @@ float codec2_energy_700c(struct CODEC2 *c2, const unsigned char * bits)
2092 return POW10F(mean/10.0); 2102 return POW10F(mean/10.0);
2093} 2103}
2094 2104
2095#ifndef CORTEX_M4
2096float codec2_energy_450(struct CODEC2 *c2, const unsigned char * bits) 2105float codec2_energy_450(struct CODEC2 *c2, const unsigned char * bits)
2097{ 2106{
2098 int indexes[4]; 2107 int indexes[4];
@@ -2418,7 +2427,6 @@ void codec2_decode_450pwb(struct CODEC2 *c2, short speech[], const unsigned char
2418 } 2427 }
2419} 2428}
2420 2429
2421#endif
2422 2430
2423/*---------------------------------------------------------------------------* \ 2431/*---------------------------------------------------------------------------* \
2424 2432
@@ -2719,3 +2727,8 @@ float *codec2_enable_user_ratek(struct CODEC2 *codec2_state, int *K) {
2719void codec2_700c_post_filter(struct CODEC2 *codec2_state, int en) { 2727void codec2_700c_post_filter(struct CODEC2 *codec2_state, int en) {
2720 codec2_state->post_filter_en = en; 2728 codec2_state->post_filter_en = en;
2721} 2729}
2730
2731void codec2_700c_eq(struct CODEC2 *codec2_state, int en) {
2732 codec2_state->eq_en = en;
2733 codec2_state->se = 0.0; codec2_state->nse = 0;
2734}