Asterisk - The Open Source Telephony Project GIT-master-a358458
Functions
iLBC_decode.c File Reference
#include <math.h>
#include <stdlib.h>
#include "iLBC_define.h"
#include "StateConstructW.h"
#include "LPCdecode.h"
#include "iCBConstruct.h"
#include "doCPLC.h"
#include "helpfun.h"
#include "constants.h"
#include "packing.h"
#include "string.h"
#include "enhancer.h"
#include "hpOutput.h"
#include "syntFilter.h"
Include dependency graph for iLBC_decode.c:

Go to the source code of this file.

Functions

void Decode (iLBC_Dec_Inst_t *iLBCdec_inst, float *decresidual, int start, int idxForMax, int *idxVec, float *syntdenum, int *cb_index, int *gain_index, int *extra_cb_index, int *extra_gain_index, int state_first)
 
void iLBC_decode (float *decblock, unsigned char *bytes, iLBC_Dec_Inst_t *iLBCdec_inst, int mode)
 
short initDecode (iLBC_Dec_Inst_t *iLBCdec_inst, int mode, int use_enhancer)
 

Function Documentation

◆ Decode()

void Decode ( iLBC_Dec_Inst_t iLBCdec_inst,
float *  decresidual,
int  start,
int  idxForMax,
int *  idxVec,
float *  syntdenum,
int *  cb_index,
int *  gain_index,
int *  extra_cb_index,
int *  extra_gain_index,
int  state_first 
)

Definition at line 118 of file iLBC_decode.c.

144 {
145 float reverseDecresidual[BLOCKL_MAX], mem[CB_MEML];
146 int k, meml_gotten, Nfor, Nback, i;
147 int diff, start_pos;
148 int subcount, subframe;
149
150
151
152
153
154
155 diff = STATE_LEN - iLBCdec_inst->state_short_len;
156
157 if (state_first == 1) {
158 start_pos = (start-1)*SUBL;
159 } else {
160 start_pos = (start-1)*SUBL + diff;
161 }
162
163 /* decode scalar part of start state */
164
165 StateConstructW(idxForMax, idxVec,
166 &syntdenum[(start-1)*(LPC_FILTERORDER+1)],
167 &decresidual[start_pos], iLBCdec_inst->state_short_len);
168
169
170 if (state_first) { /* put adaptive part in the end */
171
172 /* setup memory */
173
174 memset(mem, 0,
175 (CB_MEML-iLBCdec_inst->state_short_len)*sizeof(float));
176 memcpy(mem+CB_MEML-iLBCdec_inst->state_short_len,
177 decresidual+start_pos,
178 iLBCdec_inst->state_short_len*sizeof(float));
179
180 /* construct decoded vector */
181
183 &decresidual[start_pos+iLBCdec_inst->state_short_len],
184 extra_cb_index, extra_gain_index, mem+CB_MEML-stMemLTbl,
185 stMemLTbl, diff, CB_NSTAGES);
186
187 }
188 else {/* put adaptive part in the beginning */
189
190 /* create reversed vectors for prediction */
191
192 for (k=0; k<diff; k++) {
193 reverseDecresidual[k] =
194 decresidual[(start+1)*SUBL-1-
195 (k+iLBCdec_inst->state_short_len)];
196 }
197
198 /* setup memory */
199
200 meml_gotten = iLBCdec_inst->state_short_len;
201 for (k=0; k<meml_gotten; k++){
202 mem[CB_MEML-1-k] = decresidual[start_pos + k];
203
204
205
206
207
208 }
209 memset(mem, 0, (CB_MEML-k)*sizeof(float));
210
211 /* construct decoded vector */
212
213 iCBConstruct(reverseDecresidual, extra_cb_index,
214 extra_gain_index, mem+CB_MEML-stMemLTbl, stMemLTbl,
215 diff, CB_NSTAGES);
216
217 /* get decoded residual from reversed vector */
218
219 for (k=0; k<diff; k++) {
220 decresidual[start_pos-1-k] = reverseDecresidual[k];
221 }
222 }
223
224 /* counter for predicted sub-frames */
225
226 subcount=0;
227
228 /* forward prediction of sub-frames */
229
230 Nfor = iLBCdec_inst->nsub-start-1;
231
232 if ( Nfor > 0 ){
233
234 /* setup memory */
235
236 memset(mem, 0, (CB_MEML-STATE_LEN)*sizeof(float));
237 memcpy(mem+CB_MEML-STATE_LEN, decresidual+(start-1)*SUBL,
238 STATE_LEN*sizeof(float));
239
240 /* loop over sub-frames to encode */
241
242 for (subframe=0; subframe<Nfor; subframe++) {
243
244 /* construct decoded vector */
245
246 iCBConstruct(&decresidual[(start+1+subframe)*SUBL],
247 cb_index+subcount*CB_NSTAGES,
248 gain_index+subcount*CB_NSTAGES,
249 mem+CB_MEML-memLfTbl[subcount],
250 memLfTbl[subcount], SUBL, CB_NSTAGES);
251
252 /* update memory */
253
254 memmove(mem, mem+SUBL, (CB_MEML-SUBL)*sizeof(float));
255 memcpy(mem+CB_MEML-SUBL,
256
257
258
259
260
261 &decresidual[(start+1+subframe)*SUBL],
262 SUBL*sizeof(float));
263
264 subcount++;
265
266 }
267
268 }
269
270 /* backward prediction of sub-frames */
271
272 Nback = start-1;
273
274 if ( Nback > 0 ) {
275
276 /* setup memory */
277
278 meml_gotten = SUBL*(iLBCdec_inst->nsub+1-start);
279
280 if ( meml_gotten > CB_MEML ) {
281 meml_gotten=CB_MEML;
282 }
283 for (k=0; k<meml_gotten; k++) {
284 mem[CB_MEML-1-k] = decresidual[(start-1)*SUBL + k];
285 }
286 memset(mem, 0, (CB_MEML-k)*sizeof(float));
287
288 /* loop over subframes to decode */
289
290 for (subframe=0; subframe<Nback; subframe++) {
291
292 /* construct decoded vector */
293
294 iCBConstruct(&reverseDecresidual[subframe*SUBL],
295 cb_index+subcount*CB_NSTAGES,
296 gain_index+subcount*CB_NSTAGES,
297 mem+CB_MEML-memLfTbl[subcount], memLfTbl[subcount],
299
300 /* update memory */
301
302 memmove(mem, mem+SUBL, (CB_MEML-SUBL)*sizeof(float));
303 memcpy(mem+CB_MEML-SUBL,
304 &reverseDecresidual[subframe*SUBL],
305 SUBL*sizeof(float));
306
307 subcount++;
308 }
309
310
311
312
313
314 /* get decoded residual from reversed vector */
315
316 for (i=0; i<SUBL*Nback; i++)
317 decresidual[SUBL*Nback - i - 1] =
318 reverseDecresidual[i];
319 }
320 }
void StateConstructW(int idxForMax, int *idxVec, float *syntDenum, float *out, int len)
int stMemLTbl
Definition: constants.c:137
int memLfTbl[NASUB_MAX]
Definition: constants.c:138
void iCBConstruct(float *decvector, int *index, int *gain_index, float *mem, int lMem, int veclen, int nStages)
Definition: iCBConstruct.c:66
#define STATE_LEN
Definition: iLBC_define.h:34
#define BLOCKL_MAX
Definition: iLBC_define.h:21
#define CB_NSTAGES
Definition: iLBC_define.h:56
#define CB_MEML
Definition: iLBC_define.h:58
#define SUBL
Definition: iLBC_define.h:33
#define LPC_FILTERORDER
Definition: iLBC_define.h:40

References BLOCKL_MAX, CB_MEML, CB_NSTAGES, iCBConstruct(), LPC_FILTERORDER, memLfTbl, iLBC_Dec_Inst_t_::nsub, STATE_LEN, iLBC_Dec_Inst_t_::state_short_len, StateConstructW(), stMemLTbl, and SUBL.

Referenced by iLBC_decode().

◆ iLBC_decode()

void iLBC_decode ( float *  decblock,
unsigned char *  bytes,
iLBC_Dec_Inst_t iLBCdec_inst,
int  mode 
)

Definition at line 326 of file iLBC_decode.c.

333 {
334 float data[BLOCKL_MAX];
335 float lsfdeq[LPC_FILTERORDER*LPC_N_MAX];
336 float PLCresidual[BLOCKL_MAX], PLClpc[LPC_FILTERORDER + 1];
337 float zeros[BLOCKL_MAX], one[LPC_FILTERORDER + 1];
338 int k, i, start, idxForMax, pos, lastpart, ulp;
339 int lag, ilag;
340 float cc, maxcc;
341 int idxVec[STATE_LEN];
342 int gain_index[NASUB_MAX*CB_NSTAGES],
343 extra_gain_index[CB_NSTAGES];
344 int cb_index[CB_NSTAGES*NASUB_MAX], extra_cb_index[CB_NSTAGES];
345 int lsf_i[LSF_NSPLIT*LPC_N_MAX];
346 int state_first;
347 int last_bit;
348 unsigned char *pbytes;
349 float weightdenum[(LPC_FILTERORDER + 1)*NSUB_MAX];
350 int order_plus_one;
351 float syntdenum[NSUB_MAX*(LPC_FILTERORDER+1)];
352 float decresidual[BLOCKL_MAX];
353
354 if (mode>0) { /* the data are good */
355
356 /* decode data */
357
358 pbytes=bytes;
359 pos=0;
360
361
362
363
364
365
366 /* Set everything to zero before decoding */
367
368 for (k=0; k<LSF_NSPLIT*LPC_N_MAX; k++) {
369 lsf_i[k]=0;
370 }
371 start=0;
372 state_first=0;
373 idxForMax=0;
374 for (k=0; k<iLBCdec_inst->state_short_len; k++) {
375 idxVec[k]=0;
376 }
377 for (k=0; k<CB_NSTAGES; k++) {
378 extra_cb_index[k]=0;
379 }
380 for (k=0; k<CB_NSTAGES; k++) {
381 extra_gain_index[k]=0;
382 }
383 for (i=0; i<iLBCdec_inst->nasub; i++) {
384 for (k=0; k<CB_NSTAGES; k++) {
385 cb_index[i*CB_NSTAGES+k]=0;
386 }
387 }
388 for (i=0; i<iLBCdec_inst->nasub; i++) {
389 for (k=0; k<CB_NSTAGES; k++) {
390 gain_index[i*CB_NSTAGES+k]=0;
391 }
392 }
393
394 /* loop over ULP classes */
395
396 for (ulp=0; ulp<3; ulp++) {
397
398 /* LSF */
399 for (k=0; k<LSF_NSPLIT*iLBCdec_inst->lpc_n; k++){
400 unpack( &pbytes, &lastpart,
401 iLBCdec_inst->ULP_inst->lsf_bits[k][ulp], &pos);
402 packcombine(&lsf_i[k], lastpart,
403 iLBCdec_inst->ULP_inst->lsf_bits[k][ulp]);
404 }
405
406 /* Start block info */
407
408 unpack( &pbytes, &lastpart,
409 iLBCdec_inst->ULP_inst->start_bits[ulp], &pos);
410 packcombine(&start, lastpart,
411 iLBCdec_inst->ULP_inst->start_bits[ulp]);
412
413 unpack( &pbytes, &lastpart,
414
415
416
417
418
419 iLBCdec_inst->ULP_inst->startfirst_bits[ulp], &pos);
420 packcombine(&state_first, lastpart,
421 iLBCdec_inst->ULP_inst->startfirst_bits[ulp]);
422
423 unpack( &pbytes, &lastpart,
424 iLBCdec_inst->ULP_inst->scale_bits[ulp], &pos);
425 packcombine(&idxForMax, lastpart,
426 iLBCdec_inst->ULP_inst->scale_bits[ulp]);
427
428 for (k=0; k<iLBCdec_inst->state_short_len; k++) {
429 unpack( &pbytes, &lastpart,
430 iLBCdec_inst->ULP_inst->state_bits[ulp], &pos);
431 packcombine(idxVec+k, lastpart,
432 iLBCdec_inst->ULP_inst->state_bits[ulp]);
433 }
434
435 /* 23/22 (20ms/30ms) sample block */
436
437 for (k=0; k<CB_NSTAGES; k++) {
438 unpack( &pbytes, &lastpart,
439 iLBCdec_inst->ULP_inst->extra_cb_index[k][ulp],
440 &pos);
441 packcombine(extra_cb_index+k, lastpart,
442 iLBCdec_inst->ULP_inst->extra_cb_index[k][ulp]);
443 }
444 for (k=0; k<CB_NSTAGES; k++) {
445 unpack( &pbytes, &lastpart,
446 iLBCdec_inst->ULP_inst->extra_cb_gain[k][ulp],
447 &pos);
448 packcombine(extra_gain_index+k, lastpart,
449 iLBCdec_inst->ULP_inst->extra_cb_gain[k][ulp]);
450 }
451
452 /* The two/four (20ms/30ms) 40 sample sub-blocks */
453
454 for (i=0; i<iLBCdec_inst->nasub; i++) {
455 for (k=0; k<CB_NSTAGES; k++) {
456 unpack( &pbytes, &lastpart,
457 iLBCdec_inst->ULP_inst->cb_index[i][k][ulp],
458 &pos);
459 packcombine(cb_index+i*CB_NSTAGES+k, lastpart,
460 iLBCdec_inst->ULP_inst->cb_index[i][k][ulp]);
461 }
462 }
463
464 for (i=0; i<iLBCdec_inst->nasub; i++) {
465 for (k=0; k<CB_NSTAGES; k++) {
466 unpack( &pbytes, &lastpart,
467
468
469
470
471
472 iLBCdec_inst->ULP_inst->cb_gain[i][k][ulp],
473 &pos);
474 packcombine(gain_index+i*CB_NSTAGES+k, lastpart,
475 iLBCdec_inst->ULP_inst->cb_gain[i][k][ulp]);
476 }
477 }
478 }
479 /* Extract last bit. If it is 1 this indicates an
480 empty/lost frame */
481 unpack( &pbytes, &last_bit, 1, &pos);
482
483 /* Check for bit errors or empty/lost frames */
484 if (start<1)
485 mode = 0;
486 if (iLBCdec_inst->mode==20 && start>3)
487 mode = 0;
488 if (iLBCdec_inst->mode==30 && start>5)
489 mode = 0;
490 if (last_bit==1)
491 mode = 0;
492
493 if (mode==1) { /* No bit errors was detected,
494 continue decoding */
495
496 /* adjust index */
497 index_conv_dec(cb_index);
498
499 /* decode the lsf */
500
501 SimplelsfDEQ(lsfdeq, lsf_i, iLBCdec_inst->lpc_n);
503 iLBCdec_inst->lpc_n);
504 DecoderInterpolateLSF(syntdenum, weightdenum,
505 lsfdeq, LPC_FILTERORDER, iLBCdec_inst);
506
507 Decode(iLBCdec_inst, decresidual, start, idxForMax,
508 idxVec, syntdenum, cb_index, gain_index,
509 extra_cb_index, extra_gain_index,
510 state_first);
511
512 /* preparing the plc for a future loss! */
513
514 doThePLC(PLCresidual, PLClpc, 0, decresidual,
515 syntdenum +
516 (LPC_FILTERORDER + 1)*(iLBCdec_inst->nsub - 1),
517 (*iLBCdec_inst).last_lag, iLBCdec_inst);
518
519
520
521
522
523
524
525 memcpy(decresidual, PLCresidual,
526 iLBCdec_inst->blockl*sizeof(float));
527 }
528
529 }
530
531 if (mode == 0) {
532 /* the data is bad (either a PLC call
533 * was made or a severe bit error was detected)
534 */
535
536 /* packet loss conceal */
537
538 memset(zeros, 0, BLOCKL_MAX*sizeof(float));
539
540 one[0] = 1;
541 memset(one+1, 0, LPC_FILTERORDER*sizeof(float));
542
543 start=0;
544
545 doThePLC(PLCresidual, PLClpc, 1, zeros, one,
546 (*iLBCdec_inst).last_lag, iLBCdec_inst);
547 memcpy(decresidual, PLCresidual,
548 iLBCdec_inst->blockl*sizeof(float));
549
550 order_plus_one = LPC_FILTERORDER + 1;
551 for (i = 0; i < iLBCdec_inst->nsub; i++) {
552 memcpy(syntdenum+(i*order_plus_one), PLClpc,
553 order_plus_one*sizeof(float));
554 }
555 }
556
557 if (iLBCdec_inst->use_enhancer == 1) {
558
559 /* post filtering */
560
561 iLBCdec_inst->last_lag =
562 enhancerInterface(data, decresidual, iLBCdec_inst);
563
564 /* synthesis filtering */
565
566 if (iLBCdec_inst->mode==20) {
567 /* Enhancer has 40 samples delay */
568 i=0;
569 syntFilter(data + i*SUBL,
570 iLBCdec_inst->old_syntdenum +
571 (i+iLBCdec_inst->nsub-1)*(LPC_FILTERORDER+1),
572 SUBL, iLBCdec_inst->syntMem);
573
574
575
576
577
578 for (i=1; i < iLBCdec_inst->nsub; i++) {
579 syntFilter(data + i*SUBL,
580 syntdenum + (i-1)*(LPC_FILTERORDER+1),
581 SUBL, iLBCdec_inst->syntMem);
582 }
583 } else if (iLBCdec_inst->mode==30) {
584 /* Enhancer has 80 samples delay */
585 for (i=0; i < 2; i++) {
586 syntFilter(data + i*SUBL,
587 iLBCdec_inst->old_syntdenum +
588 (i+iLBCdec_inst->nsub-2)*(LPC_FILTERORDER+1),
589 SUBL, iLBCdec_inst->syntMem);
590 }
591 for (i=2; i < iLBCdec_inst->nsub; i++) {
592 syntFilter(data + i*SUBL,
593 syntdenum + (i-2)*(LPC_FILTERORDER+1), SUBL,
594 iLBCdec_inst->syntMem);
595 }
596 }
597
598 } else {
599
600 /* Find last lag */
601 lag = 20;
602 maxcc = xCorrCoef(&decresidual[BLOCKL_MAX-ENH_BLOCKL],
603 &decresidual[BLOCKL_MAX-ENH_BLOCKL-lag], ENH_BLOCKL);
604
605 for (ilag=21; ilag<120; ilag++) {
606 cc = xCorrCoef(&decresidual[BLOCKL_MAX-ENH_BLOCKL],
607 &decresidual[BLOCKL_MAX-ENH_BLOCKL-ilag],
608 ENH_BLOCKL);
609
610 if (cc > maxcc) {
611 maxcc = cc;
612 lag = ilag;
613 }
614 }
615 iLBCdec_inst->last_lag = lag;
616
617 /* copy data and run synthesis filter */
618
619 memcpy(data, decresidual,
620 iLBCdec_inst->blockl*sizeof(float));
621 for (i=0; i < iLBCdec_inst->nsub; i++) {
622 syntFilter(data + i*SUBL,
623 syntdenum + i*(LPC_FILTERORDER+1), SUBL,
624 iLBCdec_inst->syntMem);
625 }
626
627
628
629
630
631 }
632
633 /* high pass filtering on output if desired, otherwise
634 copy to out */
635
636 hpOutput(data, iLBCdec_inst->blockl,
637 decblock,iLBCdec_inst->hpomem);
638
639 /* memcpy(decblock,data,iLBCdec_inst->blockl*sizeof(float));*/
640
641 memcpy(iLBCdec_inst->old_syntdenum, syntdenum,
642
643 iLBCdec_inst->nsub*(LPC_FILTERORDER+1)*sizeof(float));
644
645 iLBCdec_inst->prev_enh_pl=0;
646
647 if (mode==0) { /* PLC was used */
648 iLBCdec_inst->prev_enh_pl=1;
649 }
650 }
void DecoderInterpolateLSF(float *syntdenum, float *weightdenum, float *lsfdeq, int length, iLBC_Dec_Inst_t *iLBCdec_inst)
Definition: LPCdecode.c:89
void SimplelsfDEQ(float *lsfdeq, int *index, int lpc_n)
Definition: LPCdecode.c:42
void doThePLC(float *PLCresidual, float *PLClpc, int PLI, float *decresidual, float *lpc, int inlag, iLBC_Dec_Inst_t *iLBCdec_inst)
Definition: doCPLC.c:79
float xCorrCoef(float *target, float *regressor, int subl)
Definition: enhancer.c:485
int enhancerInterface(float *out, float *in, iLBC_Dec_Inst_t *iLBCdec_inst)
Definition: enhancer.c:517
int LSF_check(float *lsf, int dim, int NoAn)
Definition: helpfun.c:272
void hpOutput(float *In, int len, float *Out, float *mem)
Definition: hpOutput.c:19
void index_conv_dec(int *index)
Definition: iCBConstruct.c:45
void Decode(iLBC_Dec_Inst_t *iLBCdec_inst, float *decresidual, int start, int idxForMax, int *idxVec, float *syntdenum, int *cb_index, int *gain_index, int *extra_cb_index, int *extra_gain_index, int state_first)
Definition: iLBC_decode.c:118
#define ENH_BLOCKL
Definition: iLBC_define.h:66
#define NSUB_MAX
Definition: iLBC_define.h:24
#define LPC_N_MAX
Definition: iLBC_define.h:46
#define LSF_NSPLIT
Definition: iLBC_define.h:50
#define NASUB_MAX
Definition: iLBC_define.h:32
void packcombine(int *index, int rest, int bitno_rest)
Definition: packing.c:53
void unpack(unsigned char **bitstream, int *index, int bitno, int *pos)
Definition: packing.c:126
float old_syntdenum[(LPC_FILTERORDER+1) *NSUB_MAX]
Definition: iLBC_define.h:198
const iLBC_ULP_Inst_t * ULP_inst
Definition: iLBC_define.h:174
float syntMem[LPC_FILTERORDER]
Definition: iLBC_define.h:177
int scale_bits[ULP_CLASSES+2]
Definition: iLBC_define.h:118
int extra_cb_index[CB_NSTAGES][ULP_CLASSES+2]
Definition: iLBC_define.h:120
int lsf_bits[6][ULP_CLASSES+2]
Definition: iLBC_define.h:115
int startfirst_bits[ULP_CLASSES+2]
Definition: iLBC_define.h:117
int cb_index[NSUB_MAX][CB_NSTAGES][ULP_CLASSES+2]
Definition: iLBC_define.h:122
int cb_gain[NSUB_MAX][CB_NSTAGES][ULP_CLASSES+2]
Definition: iLBC_define.h:123
int extra_cb_gain[CB_NSTAGES][ULP_CLASSES+2]
Definition: iLBC_define.h:121
int start_bits[ULP_CLASSES+2]
Definition: iLBC_define.h:116
int state_bits[ULP_CLASSES+2]
Definition: iLBC_define.h:119
void syntFilter(float *Out, float *a, int len, float *mem)
Definition: syntFilter.c:19

References iLBC_Dec_Inst_t_::blockl, BLOCKL_MAX, iLBC_ULP_Inst_t_::cb_gain, iLBC_ULP_Inst_t_::cb_index, CB_NSTAGES, Decode(), DecoderInterpolateLSF(), doThePLC(), ENH_BLOCKL, enhancerInterface(), iLBC_ULP_Inst_t_::extra_cb_gain, iLBC_ULP_Inst_t_::extra_cb_index, iLBC_Dec_Inst_t_::hpomem, hpOutput(), index_conv_dec(), iLBC_Dec_Inst_t_::last_lag, LPC_FILTERORDER, iLBC_Dec_Inst_t_::lpc_n, LPC_N_MAX, iLBC_ULP_Inst_t_::lsf_bits, LSF_check(), LSF_NSPLIT, iLBC_Dec_Inst_t_::mode, iLBC_Dec_Inst_t_::nasub, NASUB_MAX, iLBC_Dec_Inst_t_::nsub, NSUB_MAX, iLBC_Dec_Inst_t_::old_syntdenum, packcombine(), iLBC_Dec_Inst_t_::prev_enh_pl, iLBC_ULP_Inst_t_::scale_bits, SimplelsfDEQ(), iLBC_ULP_Inst_t_::start_bits, iLBC_ULP_Inst_t_::startfirst_bits, iLBC_ULP_Inst_t_::state_bits, STATE_LEN, iLBC_Dec_Inst_t_::state_short_len, SUBL, syntFilter(), iLBC_Dec_Inst_t_::syntMem, iLBC_Dec_Inst_t_::ULP_inst, unpack(), iLBC_Dec_Inst_t_::use_enhancer, and xCorrCoef().

Referenced by decode(), and ilbctolin_framein().

◆ initDecode()

short initDecode ( iLBC_Dec_Inst_t iLBCdec_inst,
int  mode,
int  use_enhancer 
)

Definition at line 33 of file iLBC_decode.c.

40 {
41 int i;
42
43 iLBCdec_inst->mode = mode;
44
45
46
47
48
49 if (mode==30) {
50 iLBCdec_inst->blockl = BLOCKL_30MS;
51 iLBCdec_inst->nsub = NSUB_30MS;
52 iLBCdec_inst->nasub = NASUB_30MS;
53 iLBCdec_inst->lpc_n = LPC_N_30MS;
54 iLBCdec_inst->no_of_bytes = NO_OF_BYTES_30MS;
55 iLBCdec_inst->no_of_words = NO_OF_WORDS_30MS;
57 /* ULP init */
58 iLBCdec_inst->ULP_inst=&ULP_30msTbl;
59 }
60 else if (mode==20) {
61 iLBCdec_inst->blockl = BLOCKL_20MS;
62 iLBCdec_inst->nsub = NSUB_20MS;
63 iLBCdec_inst->nasub = NASUB_20MS;
64 iLBCdec_inst->lpc_n = LPC_N_20MS;
65 iLBCdec_inst->no_of_bytes = NO_OF_BYTES_20MS;
66 iLBCdec_inst->no_of_words = NO_OF_WORDS_20MS;
68 /* ULP init */
69 iLBCdec_inst->ULP_inst=&ULP_20msTbl;
70 }
71 else {
72 exit(2);
73 }
74
75 memset(iLBCdec_inst->syntMem, 0,
76 LPC_FILTERORDER*sizeof(float));
77 memcpy((*iLBCdec_inst).lsfdeqold, lsfmeanTbl,
78 LPC_FILTERORDER*sizeof(float));
79
80 memset(iLBCdec_inst->old_syntdenum, 0,
81 ((LPC_FILTERORDER + 1)*NSUB_MAX)*sizeof(float));
82 for (i=0; i<NSUB_MAX; i++)
83 iLBCdec_inst->old_syntdenum[i*(LPC_FILTERORDER+1)]=1.0;
84
85 iLBCdec_inst->last_lag = 20;
86
87 iLBCdec_inst->prevLag = 120;
88 iLBCdec_inst->per = 0.0;
89 iLBCdec_inst->consPLICount = 0;
90 iLBCdec_inst->prevPLI = 0;
91 iLBCdec_inst->prevLpc[0] = 1.0;
92 memset(iLBCdec_inst->prevLpc+1,0,
93 LPC_FILTERORDER*sizeof(float));
94 memset(iLBCdec_inst->prevResidual, 0, BLOCKL_MAX*sizeof(float));
95 iLBCdec_inst->seed=777;
96
97
98
99
100
101
102 memset(iLBCdec_inst->hpomem, 0, 4*sizeof(float));
103
104 iLBCdec_inst->use_enhancer = use_enhancer;
105 memset(iLBCdec_inst->enh_buf, 0, ENH_BUFL*sizeof(float));
106 for (i=0;i<ENH_NBLOCKS_TOT;i++)
107 iLBCdec_inst->enh_period[i]=(float)40.0;
108
109 iLBCdec_inst->prev_enh_pl = 0;
110
111 return (iLBCdec_inst->blockl);
112 }
const iLBC_ULP_Inst_t ULP_30msTbl
Definition: constants.c:44
float lsfmeanTbl[LPC_FILTERORDER]
Definition: constants.c:210
const iLBC_ULP_Inst_t ULP_20msTbl
Definition: constants.c:19
#define NO_OF_BYTES_20MS
Definition: iLBC_define.h:95
#define LPC_N_30MS
Definition: iLBC_define.h:45
#define NO_OF_BYTES_30MS
Definition: iLBC_define.h:96
#define NASUB_30MS
Definition: iLBC_define.h:31
#define LPC_N_20MS
Definition: iLBC_define.h:44
#define STATE_SHORT_LEN_20MS
Definition: iLBC_define.h:36
#define NASUB_20MS
Definition: iLBC_define.h:25
#define STATE_SHORT_LEN_30MS
Definition: iLBC_define.h:35
#define NSUB_30MS
Definition: iLBC_define.h:23
#define NO_OF_WORDS_20MS
Definition: iLBC_define.h:97
#define NO_OF_WORDS_30MS
Definition: iLBC_define.h:98
#define ENH_BUFL
Definition: iLBC_define.h:84
#define BLOCKL_20MS
Definition: iLBC_define.h:19
#define ENH_NBLOCKS_TOT
Definition: iLBC_define.h:83
#define BLOCKL_30MS
Definition: iLBC_define.h:20
#define NSUB_20MS
Definition: iLBC_define.h:22
float enh_buf[ENH_BUFL]
Definition: iLBC_define.h:205
unsigned long seed
Definition: iLBC_define.h:195
float enh_period[ENH_NBLOCKS_TOT]
Definition: iLBC_define.h:206
float prevResidual[NSUB_MAX *SUBL]
Definition: iLBC_define.h:193
float prevLpc[LPC_FILTERORDER+1]
Definition: iLBC_define.h:192

References iLBC_Dec_Inst_t_::blockl, BLOCKL_20MS, BLOCKL_30MS, BLOCKL_MAX, iLBC_Dec_Inst_t_::consPLICount, iLBC_Dec_Inst_t_::enh_buf, ENH_BUFL, ENH_NBLOCKS_TOT, iLBC_Dec_Inst_t_::enh_period, iLBC_Dec_Inst_t_::hpomem, iLBC_Dec_Inst_t_::last_lag, LPC_FILTERORDER, iLBC_Dec_Inst_t_::lpc_n, LPC_N_20MS, LPC_N_30MS, lsfmeanTbl, iLBC_Dec_Inst_t_::mode, iLBC_Dec_Inst_t_::nasub, NASUB_20MS, NASUB_30MS, iLBC_Dec_Inst_t_::no_of_bytes, NO_OF_BYTES_20MS, NO_OF_BYTES_30MS, iLBC_Dec_Inst_t_::no_of_words, NO_OF_WORDS_20MS, NO_OF_WORDS_30MS, iLBC_Dec_Inst_t_::nsub, NSUB_20MS, NSUB_30MS, NSUB_MAX, iLBC_Dec_Inst_t_::old_syntdenum, iLBC_Dec_Inst_t_::per, iLBC_Dec_Inst_t_::prev_enh_pl, iLBC_Dec_Inst_t_::prevLag, iLBC_Dec_Inst_t_::prevLpc, iLBC_Dec_Inst_t_::prevPLI, iLBC_Dec_Inst_t_::prevResidual, iLBC_Dec_Inst_t_::seed, iLBC_Dec_Inst_t_::state_short_len, STATE_SHORT_LEN_20MS, STATE_SHORT_LEN_30MS, iLBC_Dec_Inst_t_::syntMem, ULP_20msTbl, ULP_30msTbl, iLBC_Dec_Inst_t_::ULP_inst, and iLBC_Dec_Inst_t_::use_enhancer.

Referenced by ilbctolin_framein(), and main().