1 /* ------------------------------------------------------------------ 2 * Copyright (C) 1998-2009 PacketVideo 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 13 * express or implied. 14 * See the License for the specific language governing permissions 15 * and limitations under the License. 16 * ------------------------------------------------------------------- 17 */ 18 /**************************************************************************************** 19 Portions of this file are derived from the following 3GPP standard: 20 21 3GPP TS 26.073 22 ANSI-C code for the Adaptive Multi-Rate (AMR) speech codec 23 Available from http://www.3gpp.org 24 25 (C) 2004, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TTA, TTC) 26 Permission to distribute, modify and use this file under the standard license 27 terms listed above has been obtained from the copyright holder. 28 ****************************************************************************************/ 29 /* 30 ------------------------------------------------------------------------------ 31 32 Pathname: ./audio/gsm-amr/c/src/dec_amr.c 33 Funtions: Decoder_amr_init 34 Decoder_amr_reset 35 Decoder_amr 36 37 ------------------------------------------------------------------------------ 38 MODULE DESCRIPTION 39 40 This file contains the function used to decode one speech frame using a given 41 codec mode. The functions used to initialize, reset, and exit are also 42 included in this file. 43 44 ------------------------------------------------------------------------------ 45 */ 46 47 /*---------------------------------------------------------------------------- 48 ; INCLUDES 49 ----------------------------------------------------------------------------*/ 50 #include <string.h> 51 52 #include "dec_amr.h" 53 #include "typedef.h" 54 #include "cnst.h" 55 #include "copy.h" 56 #include "set_zero.h" 57 #include "syn_filt.h" 58 #include "d_plsf.h" 59 #include "agc.h" 60 #include "int_lpc.h" 61 #include "dec_gain.h" 62 #include "dec_lag3.h" 63 #include "dec_lag6.h" 64 #include "d2_9pf.h" 65 #include "d2_11pf.h" 66 #include "d3_14pf.h" 67 #include "d4_17pf.h" 68 #include "d8_31pf.h" 69 #include "d1035pf.h" 70 #include "pred_lt.h" 71 #include "d_gain_p.h" 72 #include "d_gain_c.h" 73 #include "dec_gain.h" 74 #include "ec_gains.h" 75 #include "ph_disp.h" 76 #include "c_g_aver.h" 77 #include "int_lsf.h" 78 #include "lsp_lsf.h" 79 #include "lsp_avg.h" 80 #include "bgnscd.h" 81 #include "ex_ctrl.h" 82 #include "sqrt_l.h" 83 #include "frame.h" 84 #include "bitno_tab.h" 85 #include "b_cn_cod.h" 86 #include "basic_op.h" 87 88 /*---------------------------------------------------------------------------- 89 ; MACROS 90 ; Define module specific macros here 91 ----------------------------------------------------------------------------*/ 92 93 /*---------------------------------------------------------------------------- 94 ; DEFINES 95 ; Include all pre-processor statements here. Include conditional 96 ; compile variables also. 97 ----------------------------------------------------------------------------*/ 98 99 /*---------------------------------------------------------------------------- 100 ; LOCAL FUNCTION DEFINITIONS 101 ; Function Prototype declaration 102 ----------------------------------------------------------------------------*/ 103 104 /*---------------------------------------------------------------------------- 105 ; LOCAL VARIABLE DEFINITIONS 106 ; Variable declaration - defined here and used outside this module 107 ----------------------------------------------------------------------------*/ 108 109 110 /* 111 ------------------------------------------------------------------------------ 112 FUNCTION NAME: Decoder_amr_init 113 ------------------------------------------------------------------------------ 114 INPUT AND OUTPUT DEFINITIONS 115 116 Inputs: 117 state = pointer to a pointer to structures of type Decoder_amrState 118 119 Outputs: 120 structure pointed to by the pointer which is pointed to by state is 121 initialized to each field's initial values 122 123 state pointer points to the address of the memory allocated by 124 Decoder_amr_init function 125 126 Returns: 127 return_value = 0, if the initialization was successful; -1, otherwise (int) 128 129 Global Variables Used: 130 None 131 132 Local Variables Needed: 133 None 134 135 ------------------------------------------------------------------------------ 136 FUNCTION DESCRIPTION 137 138 This function allocates and initializes state memory used by the Decoder_amr 139 function. It stores the pointer to the filter status structure in state. This 140 pointer has to be passed to Decoder_amr in each call. The function returns 141 0, if initialization was successful and -1, otherwise. 142 143 ------------------------------------------------------------------------------ 144 REQUIREMENTS 145 146 None 147 148 ------------------------------------------------------------------------------ 149 REFERENCES 150 151 dec_amr.c, UMTS GSM AMR speech codec, R99 - Version 3.2.0, March 2, 2001 152 153 ------------------------------------------------------------------------------ 154 PSEUDO-CODE 155 156 int Decoder_amr_init (Decoder_amrState **state) 157 { 158 Decoder_amrState* s; 159 Word16 i; 160 161 if (state == (Decoder_amrState **) NULL){ 162 fprintf(stderr, "Decoder_amr_init: invalid parameter\n"); 163 return -1; 164 } 165 *state = NULL; 166 167 // allocate memory 168 if ((s= (Decoder_amrState *) malloc(sizeof(Decoder_amrState))) == NULL){ 169 fprintf(stderr, "Decoder_amr_init: can not malloc state structure\n"); 170 return -1; 171 } 172 173 s->T0_lagBuff = 40; 174 s->inBackgroundNoise = 0; 175 s->voicedHangover = 0; 176 for (i = 0; i < 9; i++) 177 s->ltpGainHistory[i] = 0; 178 179 s->lsfState = NULL; 180 s->ec_gain_p_st = NULL; 181 s->ec_gain_c_st = NULL; 182 s->pred_state = NULL; 183 s->ph_disp_st = NULL; 184 s->dtxDecoderState = NULL; 185 186 if (D_plsf_init(&s->lsfState) || 187 ec_gain_pitch_init(&s->ec_gain_p_st) || 188 ec_gain_code_init(&s->ec_gain_c_st) || 189 gc_pred_init(&s->pred_state) || 190 Cb_gain_average_init(&s->Cb_gain_averState) || 191 lsp_avg_init(&s->lsp_avg_st) || 192 Bgn_scd_init(&s->background_state) || 193 ph_disp_init(&s->ph_disp_st) || 194 dtx_dec_init(&s->dtxDecoderState)) { 195 Decoder_amr_exit(&s); 196 return -1; 197 } 198 199 Decoder_amr_reset(s, (enum Mode)0); 200 *state = s; 201 202 return 0; 203 } 204 205 ------------------------------------------------------------------------------ 206 RESOURCES USED [optional] 207 208 When the code is written for a specific target processor the 209 the resources used should be documented below. 210 211 HEAP MEMORY USED: x bytes 212 213 STACK MEMORY USED: x bytes 214 215 CLOCK CYCLES: (cycle count equation for this function) + (variable 216 used to represent cycle count for each subroutine 217 called) 218 where: (cycle count variable) = cycle count for [subroutine 219 name] 220 221 ------------------------------------------------------------------------------ 222 CAUTION [optional] 223 [State any special notes, constraints or cautions for users of this function] 224 225 ------------------------------------------------------------------------------ 226 */ 227 228 Word16 Decoder_amr_init(Decoder_amrState *s) 229 { 230 Word16 i; 231 232 if (s == (Decoder_amrState *) NULL) 233 { 234 /* fprint(stderr, "Decoder_amr_init: invalid parameter\n"); */ 235 return(-1); 236 } 237 238 s->T0_lagBuff = 40; 239 s->inBackgroundNoise = 0; 240 s->voicedHangover = 0; 241 242 /* Initialize overflow Flag */ 243 244 s->overflow = 0; 245 246 for (i = 0; i < LTP_GAIN_HISTORY_LEN; i++) 247 { 248 s->ltpGainHistory[i] = 0; 249 } 250 251 D_plsf_reset(&s->lsfState); 252 ec_gain_pitch_reset(&s->ec_gain_p_st); 253 ec_gain_code_reset(&s->ec_gain_c_st); 254 Cb_gain_average_reset(&s->Cb_gain_averState); 255 lsp_avg_reset(&s->lsp_avg_st); 256 Bgn_scd_reset(&s->background_state); 257 ph_disp_reset(&s->ph_disp_st); 258 dtx_dec_reset(&s->dtxDecoderState); 259 gc_pred_reset(&s->pred_state); 260 261 Decoder_amr_reset(s, MR475); 262 263 return(0); 264 } 265 266 /****************************************************************************/ 267 268 /* 269 ------------------------------------------------------------------------------ 270 FUNCTION NAME: Decoder_amr_reset 271 ------------------------------------------------------------------------------ 272 INPUT AND OUTPUT DEFINITIONS 273 274 Inputs: 275 state = pointer to a structure of type Decoder_amrState 276 mode = codec mode (enum Mode) 277 278 Outputs: 279 structure pointed to by state is initialized to its reset value 280 281 Returns: 282 return_value = 0, if reset was successful; -1, otherwise (int) 283 284 Global Variables Used: 285 None 286 287 Local Variables Needed: 288 None 289 290 ------------------------------------------------------------------------------ 291 FUNCTION DESCRIPTION 292 293 This function resets the state memory used by the Decoder_amr function. It 294 returns a 0, if reset was successful and -1, otherwise. 295 296 ------------------------------------------------------------------------------ 297 REQUIREMENTS 298 299 None 300 301 ------------------------------------------------------------------------------ 302 REFERENCES 303 304 dec_amr.c, UMTS GSM AMR speech codec, R99 - Version 3.2.0, March 2, 2001 305 306 ------------------------------------------------------------------------------ 307 PSEUDO-CODE 308 309 int Decoder_amr_reset (Decoder_amrState *state, enum Mode mode) 310 { 311 Word16 i; 312 313 if (state == (Decoder_amrState *) NULL){ 314 fprintf(stderr, "Decoder_amr_reset: invalid parameter\n"); 315 return -1; 316 } 317 318 // Initialize static pointer 319 state->exc = state->old_exc + PIT_MAX + L_INTERPOL; 320 321 // Static vectors to zero 322 Set_zero (state->old_exc, PIT_MAX + L_INTERPOL); 323 324 if (mode != MRDTX) 325 Set_zero (state->mem_syn, M); 326 327 // initialize pitch sharpening 328 state->sharp = SHARPMIN; 329 state->old_T0 = 40; 330 331 // Initialize state->lsp_old [] 332 333 if (mode != MRDTX) { 334 Copy(lsp_init_data, &state->lsp_old[0], M); 335 } 336 337 // Initialize memories of bad frame handling 338 state->prev_bf = 0; 339 state->prev_pdf = 0; 340 state->state = 0; 341 342 state->T0_lagBuff = 40; 343 state->inBackgroundNoise = 0; 344 state->voicedHangover = 0; 345 if (mode != MRDTX) { 346 for (i=0;i<9;i++) 347 state->excEnergyHist[i] = 0; 348 } 349 350 for (i = 0; i < 9; i++) 351 state->ltpGainHistory[i] = 0; 352 353 Cb_gain_average_reset(state->Cb_gain_averState); 354 if (mode != MRDTX) 355 lsp_avg_reset(state->lsp_avg_st); 356 D_plsf_reset(state->lsfState); 357 ec_gain_pitch_reset(state->ec_gain_p_st); 358 ec_gain_code_reset(state->ec_gain_c_st); 359 360 if (mode != MRDTX) 361 gc_pred_reset(state->pred_state); 362 363 Bgn_scd_reset(state->background_state); 364 state->nodataSeed = 21845; 365 ph_disp_reset(state->ph_disp_st); 366 if (mode != MRDTX) 367 dtx_dec_reset(state->dtxDecoderState); 368 369 return 0; 370 } 371 372 ------------------------------------------------------------------------------ 373 RESOURCES USED [optional] 374 375 When the code is written for a specific target processor the 376 the resources used should be documented below. 377 378 HEAP MEMORY USED: x bytes 379 380 STACK MEMORY USED: x bytes 381 382 CLOCK CYCLES: (cycle count equation for this function) + (variable 383 used to represent cycle count for each subroutine 384 called) 385 where: (cycle count variable) = cycle count for [subroutine 386 name] 387 388 ------------------------------------------------------------------------------ 389 CAUTION [optional] 390 [State any special notes, constraints or cautions for users of this function] 391 392 ------------------------------------------------------------------------------ 393 */ 394 395 Word16 Decoder_amr_reset(Decoder_amrState *state, enum Mode mode) 396 { 397 Word16 i; 398 399 if (state == (Decoder_amrState *) NULL) 400 { 401 /* fprint(stderr, "Decoder_amr_reset: invalid parameter\n"); */ 402 return(-1); 403 } 404 405 /* Initialize static pointer */ 406 state->exc = state->old_exc + PIT_MAX + L_INTERPOL; 407 408 /* Static vectors to zero */ 409 memset(state->old_exc, 0, sizeof(Word16)*(PIT_MAX + L_INTERPOL)); 410 411 if (mode != MRDTX) 412 { 413 memset(state->mem_syn, 0, sizeof(Word16)*M); 414 } 415 /* initialize pitch sharpening */ 416 state->sharp = SHARPMIN; 417 state->old_T0 = 40; 418 419 /* Initialize overflow Flag */ 420 421 state->overflow = 0; 422 423 /* Initialize state->lsp_old [] */ 424 425 if (mode != MRDTX) 426 { 427 state->lsp_old[0] = 30000; 428 state->lsp_old[1] = 26000; 429 state->lsp_old[2] = 21000; 430 state->lsp_old[3] = 15000; 431 state->lsp_old[4] = 8000; 432 state->lsp_old[5] = 0; 433 state->lsp_old[6] = -8000; 434 state->lsp_old[7] = -15000; 435 state->lsp_old[8] = -21000; 436 state->lsp_old[9] = -26000; 437 } 438 439 /* Initialize memories of bad frame handling */ 440 state->prev_bf = 0; 441 state->prev_pdf = 0; 442 state->state = 0; 443 444 state->T0_lagBuff = 40; 445 state->inBackgroundNoise = 0; 446 state->voicedHangover = 0; 447 if (mode != MRDTX) 448 { 449 for (i = 0; i < EXC_ENERGY_HIST_LEN; i++) 450 { 451 state->excEnergyHist[i] = 0; 452 } 453 } 454 455 for (i = 0; i < LTP_GAIN_HISTORY_LEN; i++) 456 { 457 state->ltpGainHistory[i] = 0; 458 } 459 460 Cb_gain_average_reset(&(state->Cb_gain_averState)); 461 if (mode != MRDTX) 462 { 463 lsp_avg_reset(&(state->lsp_avg_st)); 464 } 465 D_plsf_reset(&(state->lsfState)); 466 ec_gain_pitch_reset(&(state->ec_gain_p_st)); 467 ec_gain_code_reset(&(state->ec_gain_c_st)); 468 469 if (mode != MRDTX) 470 { 471 gc_pred_reset(&(state->pred_state)); 472 } 473 474 Bgn_scd_reset(&(state->background_state)); 475 state->nodataSeed = 21845; 476 ph_disp_reset(&(state->ph_disp_st)); 477 if (mode != MRDTX) 478 { 479 dtx_dec_reset(&(state->dtxDecoderState)); 480 } 481 482 return(0); 483 } 484 485 /****************************************************************************/ 486 487 /* 488 ------------------------------------------------------------------------------ 489 FUNCTION NAME: Decoder_amr 490 ------------------------------------------------------------------------------ 491 INPUT AND OUTPUT DEFINITIONS 492 493 Inputs: 494 st = pointer to a structure of type Decoder_amrState 495 mode = codec mode (enum Mode) 496 parm = buffer of synthesis parameters (Word16) 497 frame_type = received frame type (enum RXFrameType) 498 synth = buffer containing synthetic speech (Word16) 499 A_t = buffer containing decoded LP filter in 4 subframes (Word16) 500 501 Outputs: 502 structure pointed to by st contains the newly calculated decoder 503 parameters 504 synth buffer contains the decoded speech samples 505 A_t buffer contains the decoded LP filter parameters 506 507 Returns: 508 return_value = 0 (int) 509 510 Global Variables Used: 511 None 512 513 Local Variables Needed: 514 None 515 516 ------------------------------------------------------------------------------ 517 FUNCTION DESCRIPTION 518 519 This function performs the decoding of one speech frame for a given codec 520 mode. 521 522 ------------------------------------------------------------------------------ 523 REQUIREMENTS 524 525 None 526 527 ------------------------------------------------------------------------------ 528 REFERENCES 529 530 dec_amr.c, UMTS GSM AMR speech codec, R99 - Version 3.2.0, March 2, 2001 531 532 ------------------------------------------------------------------------------ 533 PSEUDO-CODE 534 535 int Decoder_amr ( 536 Decoder_amrState *st, // i/o : State variables 537 enum Mode mode, // i : AMR mode 538 Word16 parm[], // i : vector of synthesis parameters 539 (PRM_SIZE) 540 enum RXFrameType frame_type, // i : received frame type 541 Word16 synth[], // o : synthesis speech (L_FRAME) 542 Word16 A_t[] // o : decoded LP filter in 4 subframes 543 (AZ_SIZE) 544 ) 545 { 546 // LPC coefficients 547 548 Word16 *Az; // Pointer on A_t 549 550 // LSPs 551 552 Word16 lsp_new[M]; 553 Word16 lsp_mid[M]; 554 555 // LSFs 556 557 Word16 prev_lsf[M]; 558 Word16 lsf_i[M]; 559 560 // Algebraic codevector 561 562 Word16 code[L_SUBFR]; 563 564 // excitation 565 566 Word16 excp[L_SUBFR]; 567 Word16 exc_enhanced[L_SUBFR]; 568 569 // Scalars 570 571 Word16 i, i_subfr; 572 Word16 T0, T0_frac, index, index_mr475 = 0; 573 Word16 gain_pit, gain_code, gain_code_mix, pit_sharp, pit_flag, pitch_fac; 574 Word16 t0_min, t0_max; 575 Word16 delta_frc_low, delta_frc_range; 576 Word16 tmp_shift; 577 Word16 temp; 578 Word32 L_temp; 579 Word16 flag4; 580 Word16 carefulFlag; 581 Word16 excEnergy; 582 Word16 subfrNr; 583 Word16 evenSubfr = 0; 584 585 Word16 bfi = 0; // bad frame indication flag 586 Word16 pdfi = 0; // potential degraded bad frame flag 587 588 enum DTXStateType newDTXState; // SPEECH , DTX, DTX_MUTE 589 590 // find the new DTX state SPEECH OR DTX 591 newDTXState = rx_dtx_handler(st->dtxDecoderState, frame_type); 592 593 // DTX actions 594 if (sub(newDTXState, SPEECH) != 0 ) 595 { 596 Decoder_amr_reset (st, MRDTX); 597 598 dtx_dec(st->dtxDecoderState, 599 st->mem_syn, 600 st->lsfState, 601 st->pred_state, 602 st->Cb_gain_averState, 603 newDTXState, 604 mode, 605 parm, synth, A_t); 606 // update average lsp 607 608 Lsf_lsp(st->lsfState->past_lsf_q, st->lsp_old, M); 609 lsp_avg(st->lsp_avg_st, st->lsfState->past_lsf_q); 610 goto the_end; 611 } 612 613 // SPEECH action state machine 614 if ((sub(frame_type, RX_SPEECH_BAD) == 0) || 615 (sub(frame_type, RX_NO_DATA) == 0) || 616 (sub(frame_type, RX_ONSET) == 0)) 617 { 618 bfi = 1; 619 if ((sub(frame_type, RX_NO_DATA) == 0) || 620 (sub(frame_type, RX_ONSET) == 0)) 621 { 622 build_CN_param(&st->nodataSeed, 623 prmno[mode], 624 bitno[mode], 625 parm); 626 } 627 } 628 else if (sub(frame_type, RX_SPEECH_DEGRADED) == 0) 629 { 630 pdfi = 1; 631 } 632 633 if (bfi != 0) 634 { 635 st->state = add (st->state, 1); 636 } 637 else if (sub (st->state, 6) == 0) 638 639 { 640 st->state = 5; 641 } 642 else 643 { 644 st->state = 0; 645 } 646 647 if (sub (st->state, 6) > 0) 648 { 649 st->state = 6; 650 } 651 652 // If this frame is the first speech frame after CNI period, 653 // set the BFH state machine to an appropriate state depending 654 // on whether there was DTX muting before start of speech or not 655 // If there was DTX muting, the first speech frame is muted. 656 // If there was no DTX muting, the first speech frame is not 657 // muted. The BFH state machine starts from state 5, however, to 658 // keep the audible noise resulting from a SID frame which is 659 // erroneously interpreted as a good speech frame as small as 660 // possible (the decoder output in this case is quickly muted) 661 662 if (sub(st->dtxDecoderState->dtxGlobalState, DTX) == 0) 663 { 664 st->state = 5; 665 st->prev_bf = 0; 666 } 667 else if (sub(st->dtxDecoderState->dtxGlobalState, DTX_MUTE) == 0) 668 { 669 st->state = 5; 670 st->prev_bf = 1; 671 } 672 673 // save old LSFs for CB gain smoothing 674 Copy (st->lsfState->past_lsf_q, prev_lsf, M); 675 676 // decode LSF parameters and generate interpolated lpc coefficients 677 for the 4 subframes 678 if (sub (mode, MR122) != 0) 679 { 680 D_plsf_3(st->lsfState, mode, bfi, parm, lsp_new); 681 682 // Advance synthesis parameters pointer 683 parm += 3; 684 685 Int_lpc_1to3(st->lsp_old, lsp_new, A_t); 686 } 687 else 688 { 689 D_plsf_5 (st->lsfState, bfi, parm, lsp_mid, lsp_new); 690 691 // Advance synthesis parameters pointer 692 parm += 5; 693 694 Int_lpc_1and3 (st->lsp_old, lsp_mid, lsp_new, A_t); 695 } 696 697 // update the LSPs for the next frame 698 for (i = 0; i < M; i++) 699 { 700 st->lsp_old[i] = lsp_new[i]; 701 } 702 703 *------------------------------------------------------------------------* 704 * Loop for every subframe in the analysis frame * 705 *------------------------------------------------------------------------* 706 * The subframe size is L_SUBFR and the loop is repeated L_FRAME/L_SUBFR * 707 * times * 708 * - decode the pitch delay * 709 * - decode algebraic code * 710 * - decode pitch and codebook gains * 711 * - find the excitation and compute synthesis speech * 712 *------------------------------------------------------------------------* 713 714 // pointer to interpolated LPC parameters 715 Az = A_t; 716 717 evenSubfr = 0; 718 subfrNr = -1; 719 for (i_subfr = 0; i_subfr < L_FRAME; i_subfr += L_SUBFR) 720 { 721 subfrNr = add(subfrNr, 1); 722 evenSubfr = sub(1, evenSubfr); 723 724 // flag for first and 3th subframe 725 pit_flag = i_subfr; 726 727 if (sub (i_subfr, L_FRAME_BY2) == 0) 728 { 729 if (sub(mode, MR475) != 0 && sub(mode, MR515) != 0) 730 { 731 pit_flag = 0; 732 } 733 } 734 735 // pitch index 736 index = *parm++; 737 738 *-------------------------------------------------------* 739 * - decode pitch lag and find adaptive codebook vector. * 740 *-------------------------------------------------------* 741 742 if (sub(mode, MR122) != 0) 743 { 744 // flag4 indicates encoding with 4 bit resolution; 745 // this is needed for mode MR475, MR515, MR59 and MR67 746 747 flag4 = 0; 748 if ((sub (mode, MR475) == 0) || 749 (sub (mode, MR515) == 0) || 750 (sub (mode, MR59) == 0) || 751 (sub (mode, MR67) == 0) ) { 752 flag4 = 1; 753 } 754 755 *-------------------------------------------------------* 756 * - get ranges for the t0_min and t0_max * 757 * - only needed in delta decoding * 758 *-------------------------------------------------------* 759 760 delta_frc_low = 5; 761 delta_frc_range = 9; 762 763 if ( sub(mode, MR795) == 0 ) 764 { 765 delta_frc_low = 10; 766 delta_frc_range = 19; 767 } 768 769 t0_min = sub(st->old_T0, delta_frc_low); 770 if (sub(t0_min, PIT_MIN) < 0) 771 { 772 t0_min = PIT_MIN; 773 } 774 t0_max = add(t0_min, delta_frc_range); 775 if (sub(t0_max, PIT_MAX) > 0) 776 { 777 t0_max = PIT_MAX; 778 t0_min = sub(t0_max, delta_frc_range); 779 } 780 781 Dec_lag3 (index, t0_min, t0_max, pit_flag, st->old_T0, 782 &T0, &T0_frac, flag4); 783 784 st->T0_lagBuff = T0; 785 786 if (bfi != 0) 787 { 788 if (sub (st->old_T0, PIT_MAX) < 0) 789 { // Graceful pitch 790 st->old_T0 = add(st->old_T0, 1); // degradation 791 } 792 T0 = st->old_T0; 793 T0_frac = 0; 794 795 if ( st->inBackgroundNoise != 0 && 796 sub(st->voicedHangover, 4) > 0 && 797 ((sub(mode, MR475) == 0 ) || 798 (sub(mode, MR515) == 0 ) || 799 (sub(mode, MR59) == 0) ) 800 ) 801 { 802 T0 = st->T0_lagBuff; 803 } 804 } 805 806 Pred_lt_3or6 (st->exc, T0, T0_frac, L_SUBFR, 1); 807 } 808 else 809 { 810 Dec_lag6 (index, PIT_MIN_MR122, 811 PIT_MAX, pit_flag, &T0, &T0_frac); 812 813 if ( bfi == 0 && (pit_flag == 0 || sub (index, 61) < 0)) 814 { 815 } 816 else 817 { 818 st->T0_lagBuff = T0; 819 T0 = st->old_T0; 820 T0_frac = 0; 821 } 822 823 Pred_lt_3or6 (st->exc, T0, T0_frac, L_SUBFR, 0); 824 } 825 826 *-------------------------------------------------------* 827 * - (MR122 only: Decode pitch gain.) * 828 * - Decode innovative codebook. * 829 * - set pitch sharpening factor * 830 *-------------------------------------------------------* 831 832 if (sub (mode, MR475) == 0 || sub (mode, MR515) == 0) 833 { // MR475, MR515 834 index = *parm++; // index of position 835 i = *parm++; // signs 836 837 decode_2i40_9bits (subfrNr, i, index, code); 838 839 pit_sharp = shl (st->sharp, 1); 840 } 841 else if (sub (mode, MR59) == 0) 842 { // MR59 843 index = *parm++; // index of position 844 i = *parm++; // signs 845 846 decode_2i40_11bits (i, index, code); 847 848 pit_sharp = shl (st->sharp, 1); 849 } 850 else if (sub (mode, MR67) == 0) 851 { // MR67 852 index = *parm++; // index of position 853 i = *parm++; // signs 854 855 decode_3i40_14bits (i, index, code); 856 857 pit_sharp = shl (st->sharp, 1); 858 } 859 else if (sub (mode, MR795) <= 0) 860 { // MR74, MR795 861 index = *parm++; // index of position 862 i = *parm++; // signs 863 864 decode_4i40_17bits (i, index, code); 865 866 pit_sharp = shl (st->sharp, 1); 867 } 868 else if (sub (mode, MR102) == 0) 869 { // MR102 870 dec_8i40_31bits (parm, code); 871 parm += 7; 872 873 pit_sharp = shl (st->sharp, 1); 874 } 875 else 876 { // MR122 877 index = *parm++; 878 if (bfi != 0) 879 { 880 ec_gain_pitch (st->ec_gain_p_st, st->state, &gain_pit); 881 } 882 else 883 { 884 gain_pit = d_gain_pitch (mode, index); 885 } 886 ec_gain_pitch_update (st->ec_gain_p_st, bfi, st->prev_bf, 887 &gain_pit); 888 889 dec_10i40_35bits (parm, code); 890 parm += 10; 891 892 // pit_sharp = gain_pit; 893 // if (pit_sharp > 1.0) pit_sharp = 1.0; 894 895 pit_sharp = shl (gain_pit, 1); 896 } 897 898 *-------------------------------------------------------* 899 * - Add the pitch contribution to code[]. * 900 *-------------------------------------------------------* 901 for (i = T0; i < L_SUBFR; i++) 902 { 903 temp = mult (code[i - T0], pit_sharp); 904 code[i] = add (code[i], temp); 905 } 906 907 *------------------------------------------------------------* 908 * - Decode codebook gain (MR122) or both pitch * 909 * gain and codebook gain (all others) * 910 * - Update pitch sharpening "sharp" with quantized gain_pit * 911 *------------------------------------------------------------* 912 913 if (sub (mode, MR475) == 0) 914 { 915 // read and decode pitch and code gain 916 if (evenSubfr != 0) 917 { 918 index_mr475 = *parm++; // index of gain(s) 919 } 920 921 if (bfi == 0) 922 { 923 Dec_gain(st->pred_state, mode, index_mr475, code, 924 evenSubfr, &gain_pit, &gain_code); 925 } 926 else 927 { 928 ec_gain_pitch (st->ec_gain_p_st, st->state, &gain_pit); 929 ec_gain_code (st->ec_gain_c_st, st->pred_state, st->state, 930 &gain_code); 931 } 932 ec_gain_pitch_update (st->ec_gain_p_st, bfi, st->prev_bf, 933 &gain_pit); 934 ec_gain_code_update (st->ec_gain_c_st, bfi, st->prev_bf, 935 &gain_code); 936 937 pit_sharp = gain_pit; 938 if (sub (pit_sharp, SHARPMAX) > 0) 939 { 940 pit_sharp = SHARPMAX; 941 } 942 943 } 944 else if ((sub (mode, MR74) <= 0) || 945 (sub (mode, MR102) == 0)) 946 { 947 // read and decode pitch and code gain 948 index = *parm++; // index of gain(s) 949 950 if (bfi == 0) 951 { 952 Dec_gain(st->pred_state, mode, index, code, 953 evenSubfr, &gain_pit, &gain_code); 954 } 955 else 956 { 957 ec_gain_pitch (st->ec_gain_p_st, st->state, &gain_pit); 958 ec_gain_code (st->ec_gain_c_st, st->pred_state, st->state, 959 &gain_code); 960 } 961 ec_gain_pitch_update (st->ec_gain_p_st, bfi, st->prev_bf, 962 &gain_pit); 963 ec_gain_code_update (st->ec_gain_c_st, bfi, st->prev_bf, 964 &gain_code); 965 966 pit_sharp = gain_pit; 967 if (sub (pit_sharp, SHARPMAX) > 0) 968 { 969 pit_sharp = SHARPMAX; 970 } 971 972 if (sub (mode, MR102) == 0) 973 { 974 if (sub (st->old_T0, add(L_SUBFR, 5)) > 0) 975 { 976 pit_sharp = shr(pit_sharp, 2); 977 } 978 } 979 } 980 else 981 { 982 // read and decode pitch gain 983 index = *parm++; // index of gain(s) 984 985 if (sub (mode, MR795) == 0) 986 { 987 // decode pitch gain 988 if (bfi != 0) 989 { 990 ec_gain_pitch (st->ec_gain_p_st, st->state, &gain_pit); 991 } 992 else 993 { 994 gain_pit = d_gain_pitch (mode, index); 995 } 996 ec_gain_pitch_update (st->ec_gain_p_st, bfi, st->prev_bf, 997 &gain_pit); 998 999 // read and decode code gain 1000 index = *parm++; 1001 if (bfi == 0) 1002 { 1003 d_gain_code (st->pred_state, mode, index, code, &gain_code); 1004 } 1005 else 1006 { 1007 ec_gain_code (st->ec_gain_c_st, st->pred_state, st->state, 1008 &gain_code); 1009 } 1010 ec_gain_code_update (st->ec_gain_c_st, bfi, st->prev_bf, 1011 &gain_code); 1012 1013 pit_sharp = gain_pit; 1014 if (sub (pit_sharp, SHARPMAX) > 0) 1015 { 1016 pit_sharp = SHARPMAX; 1017 } 1018 } 1019 else 1020 { // MR122 1021 if (bfi == 0) 1022 { 1023 d_gain_code (st->pred_state, mode, index, code, &gain_code); 1024 } 1025 else 1026 { 1027 ec_gain_code (st->ec_gain_c_st, st->pred_state, st->state, 1028 &gain_code); 1029 } 1030 ec_gain_code_update (st->ec_gain_c_st, bfi, st->prev_bf, 1031 &gain_code); 1032 1033 pit_sharp = gain_pit; 1034 } 1035 } 1036 1037 // store pitch sharpening for next subframe 1038 // (for modes which use the previous pitch gain for 1039 // pitch sharpening in the search phase) 1040 // do not update sharpening in even subframes for MR475 1041 if (sub(mode, MR475) != 0 || evenSubfr == 0) 1042 { 1043 st->sharp = gain_pit; 1044 if (sub (st->sharp, SHARPMAX) > 0) 1045 { 1046 st->sharp = SHARPMAX; 1047 } 1048 } 1049 1050 pit_sharp = shl (pit_sharp, 1); 1051 if (sub (pit_sharp, 16384) > 0) 1052 { 1053 for (i = 0; i < L_SUBFR; i++) 1054 { 1055 temp = mult (st->exc[i], pit_sharp); 1056 L_temp = L_mult (temp, gain_pit); 1057 if (sub(mode, MR122)==0) 1058 { 1059 L_temp = L_shr (L_temp, 1); 1060 } 1061 excp[i] = pv_round (L_temp); 1062 } 1063 } 1064 1065 *-------------------------------------------------------* 1066 * - Store list of LTP gains needed in the source * 1067 * characteristic detector (SCD) * 1068 *-------------------------------------------------------* 1069 if ( bfi == 0 ) 1070 { 1071 for (i = 0; i < 8; i++) 1072 { 1073 st->ltpGainHistory[i] = st->ltpGainHistory[i+1]; 1074 } 1075 st->ltpGainHistory[8] = gain_pit; 1076 } 1077 1078 *-------------------------------------------------------* 1079 * - Limit gain_pit if in background noise and BFI * 1080 * for MR475, MR515, MR59 * 1081 *-------------------------------------------------------* 1082 1083 if ( (st->prev_bf != 0 || bfi != 0) && st->inBackgroundNoise != 0 && 1084 ((sub(mode, MR475) == 0) || 1085 (sub(mode, MR515) == 0) || 1086 (sub(mode, MR59) == 0)) 1087 ) 1088 { 1089 if ( sub (gain_pit, 12288) > 0) // if (gain_pit > 0.75) in Q14 1090 gain_pit = add( shr( sub(gain_pit, 12288), 1 ), 12288 ); 1091 // gain_pit = (gain_pit-0.75)/2.0 + 0.75; 1092 1093 if ( sub (gain_pit, 14745) > 0) // if (gain_pit > 0.90) in Q14 1094 { 1095 gain_pit = 14745; 1096 } 1097 } 1098 1099 *-------------------------------------------------------* 1100 * Calculate CB mixed gain * 1101 *-------------------------------------------------------* 1102 Int_lsf(prev_lsf, st->lsfState->past_lsf_q, i_subfr, lsf_i); 1103 gain_code_mix = Cb_gain_average( 1104 st->Cb_gain_averState, mode, gain_code, 1105 lsf_i, st->lsp_avg_st->lsp_meanSave, bfi, 1106 st->prev_bf, pdfi, st->prev_pdf, 1107 st->inBackgroundNoise, st->voicedHangover); 1108 1109 // make sure that MR74, MR795, MR122 have original code_gain 1110 if ((sub(mode, MR67) > 0) && (sub(mode, MR102) != 0) ) 1111 // MR74, MR795, MR122 1112 { 1113 gain_code_mix = gain_code; 1114 } 1115 1116 *-------------------------------------------------------* 1117 * - Find the total excitation. * 1118 * - Find synthesis speech corresponding to st->exc[]. * 1119 *-------------------------------------------------------* 1120 if (sub(mode, MR102) <= 0) // MR475, MR515, MR59, MR67, MR74, MR795, MR102 1121 { 1122 pitch_fac = gain_pit; 1123 tmp_shift = 1; 1124 } 1125 else // MR122 1126 { 1127 pitch_fac = shr (gain_pit, 1); 1128 tmp_shift = 2; 1129 } 1130 1131 // copy unscaled LTP excitation to exc_enhanced (used in phase 1132 * dispersion below) and compute total excitation for LTP feedback 1133 1134 for (i = 0; i < L_SUBFR; i++) 1135 { 1136 exc_enhanced[i] = st->exc[i]; 1137 1138 // st->exc[i] = gain_pit*st->exc[i] + gain_code*code[i]; 1139 L_temp = L_mult (st->exc[i], pitch_fac); 1140 // 12.2: Q0 * Q13 1141 // 7.4: Q0 * Q14 1142 L_temp = L_mac (L_temp, code[i], gain_code); 1143 // 12.2: Q12 * Q1 1144 // 7.4: Q13 * Q1 1145 L_temp = L_shl (L_temp, tmp_shift); // Q16 1146 st->exc[i] = pv_round (L_temp); 1147 } 1148 1149 *-------------------------------------------------------* 1150 * - Adaptive phase dispersion * 1151 *-------------------------------------------------------* 1152 ph_disp_release(st->ph_disp_st); // free phase dispersion adaption 1153 1154 if ( ((sub(mode, MR475) == 0) || 1155 (sub(mode, MR515) == 0) || 1156 (sub(mode, MR59) == 0)) && 1157 sub(st->voicedHangover, 3) > 0 && 1158 st->inBackgroundNoise != 0 && 1159 bfi != 0 ) 1160 { 1161 ph_disp_lock(st->ph_disp_st); // Always Use full Phase Disp. 1162 } // if error in bg noise 1163 1164 // apply phase dispersion to innovation (if enabled) and 1165 compute total excitation for synthesis part 1166 ph_disp(st->ph_disp_st, mode, 1167 exc_enhanced, gain_code_mix, gain_pit, code, 1168 pitch_fac, tmp_shift); 1169 1170 *-------------------------------------------------------* 1171 * - The Excitation control module are active during BFI.* 1172 * - Conceal drops in signal energy if in bg noise. * 1173 *-------------------------------------------------------* 1174 1175 L_temp = 0; 1176 for (i = 0; i < L_SUBFR; i++) 1177 { 1178 L_temp = L_mac (L_temp, exc_enhanced[i], exc_enhanced[i] ); 1179 } 1180 1181 L_temp = L_shr (L_temp, 1); // excEnergy = sqrt(L_temp) in Q0 1182 L_temp = sqrt_l_exp(L_temp, &temp); // function result 1183 L_temp = L_shr(L_temp, add( shr(temp, 1), 15)); 1184 L_temp = L_shr(L_temp, 2); // To cope with 16-bit and 1185 excEnergy = extract_l(L_temp); // scaling in ex_ctrl() 1186 1187 if ( ((sub (mode, MR475) == 0) || 1188 (sub (mode, MR515) == 0) || 1189 (sub (mode, MR59) == 0)) && 1190 sub(st->voicedHangover, 5) > 0 && 1191 st->inBackgroundNoise != 0 && 1192 sub(st->state, 4) < 0 && 1193 ( (pdfi != 0 && st->prev_pdf != 0) || 1194 bfi != 0 || 1195 st->prev_bf != 0) ) 1196 { 1197 carefulFlag = 0; 1198 if ( pdfi != 0 && bfi == 0 ) 1199 { 1200 carefulFlag = 1; 1201 } 1202 1203 Ex_ctrl(exc_enhanced, 1204 excEnergy, 1205 st->excEnergyHist, 1206 st->voicedHangover, 1207 st->prev_bf, 1208 carefulFlag); 1209 } 1210 1211 if ( st->inBackgroundNoise != 0 && 1212 ( bfi != 0 || st->prev_bf != 0 ) && 1213 sub(st->state, 4) < 0 ) 1214 { 1215 ; // do nothing! 1216 } 1217 else 1218 { 1219 // Update energy history for all modes 1220 for (i = 0; i < 8; i++) 1221 { 1222 st->excEnergyHist[i] = st->excEnergyHist[i+1]; 1223 } 1224 st->excEnergyHist[8] = excEnergy; 1225 } 1226 *-------------------------------------------------------* 1227 * Excitation control module end. * 1228 *-------------------------------------------------------* 1229 1230 if (sub (pit_sharp, 16384) > 0) 1231 { 1232 for (i = 0; i < L_SUBFR; i++) 1233 { 1234 excp[i] = add (excp[i], exc_enhanced[i]); 1235 } 1236 agc2 (exc_enhanced, excp, L_SUBFR); 1237 Overflow = 0; 1238 Syn_filt (Az, excp, &synth[i_subfr], L_SUBFR, 1239 st->mem_syn, 0); 1240 } 1241 else 1242 { 1243 Overflow = 0; 1244 Syn_filt (Az, exc_enhanced, &synth[i_subfr], L_SUBFR, 1245 st->mem_syn, 0); 1246 } 1247 1248 if (Overflow != 0) // Test for overflow 1249 { 1250 for (i = 0; i < PIT_MAX + L_INTERPOL + L_SUBFR; i++) 1251 { 1252 st->old_exc[i] = shr(st->old_exc[i], 2); 1253 } 1254 for (i = 0; i < L_SUBFR; i++) 1255 { 1256 exc_enhanced[i] = shr(exc_enhanced[i], 2); 1257 } 1258 Syn_filt(Az, exc_enhanced, &synth[i_subfr], L_SUBFR, st->mem_syn, 1); 1259 } 1260 else 1261 { 1262 Copy(&synth[i_subfr+L_SUBFR-M], st->mem_syn, M); 1263 } 1264 1265 *--------------------------------------------------* 1266 * Update signal for next frame. * 1267 * -> shift to the left by L_SUBFR st->exc[] * 1268 *--------------------------------------------------* 1269 1270 Copy (&st->old_exc[L_SUBFR], &st->old_exc[0], PIT_MAX + L_INTERPOL); 1271 1272 // interpolated LPC parameters for next subframe 1273 Az += MP1; 1274 1275 // store T0 for next subframe 1276 st->old_T0 = T0; 1277 } 1278 1279 *-------------------------------------------------------* 1280 * Call the Source Characteristic Detector which updates * 1281 * st->inBackgroundNoise and st->voicedHangover. * 1282 *-------------------------------------------------------* 1283 1284 st->inBackgroundNoise = Bgn_scd(st->background_state, 1285 &(st->ltpGainHistory[0]), 1286 &(synth[0]), 1287 &(st->voicedHangover) ); 1288 1289 dtx_dec_activity_update(st->dtxDecoderState, 1290 st->lsfState->past_lsf_q, 1291 synth); 1292 1293 // store bfi for next subframe 1294 st->prev_bf = bfi; 1295 st->prev_pdf = pdfi; 1296 1297 *--------------------------------------------------* 1298 * Calculate the LSF averages on the eight * 1299 * previous frames * 1300 *--------------------------------------------------* 1301 1302 lsp_avg(st->lsp_avg_st, st->lsfState->past_lsf_q); 1303 1304 the_end: 1305 st->dtxDecoderState->dtxGlobalState = newDTXState; 1306 1307 return 0; 1308 } 1309 1310 ------------------------------------------------------------------------------ 1311 RESOURCES USED [optional] 1312 1313 When the code is written for a specific target processor the 1314 the resources used should be documented below. 1315 1316 HEAP MEMORY USED: x bytes 1317 1318 STACK MEMORY USED: x bytes 1319 1320 CLOCK CYCLES: (cycle count equation for this function) + (variable 1321 used to represent cycle count for each subroutine 1322 called) 1323 where: (cycle count variable) = cycle count for [subroutine 1324 name] 1325 1326 ------------------------------------------------------------------------------ 1327 CAUTION [optional] 1328 [State any special notes, constraints or cautions for users of this function] 1329 1330 ------------------------------------------------------------------------------ 1331 */ 1332 1333 void Decoder_amr( 1334 Decoder_amrState *st, /* i/o : State variables */ 1335 enum Mode mode, /* i : AMR mode */ 1336 Word16 parm[], /* i : vector of synthesis parameters 1337 (PRM_SIZE) */ 1338 enum RXFrameType frame_type, /* i : received frame type */ 1339 Word16 synth[], /* o : synthesis speech (L_FRAME) */ 1340 Word16 A_t[] /* o : decoded LP filter in 4 subframes 1341 (AZ_SIZE) */ 1342 ) 1343 { 1344 /* LPC coefficients */ 1345 1346 Word16 *Az; /* Pointer on A_t */ 1347 1348 /* LSPs */ 1349 1350 Word16 lsp_new[M]; 1351 Word16 lsp_mid[M]; 1352 1353 /* LSFs */ 1354 1355 Word16 prev_lsf[M]; 1356 Word16 lsf_i[M]; 1357 1358 /* Algebraic codevector */ 1359 1360 Word16 code[L_SUBFR]; 1361 1362 /* excitation */ 1363 1364 Word16 excp[L_SUBFR]; 1365 Word16 exc_enhanced[L_SUBFR]; 1366 1367 /* Scalars */ 1368 1369 Word16 i; 1370 Word16 i_subfr; 1371 Word16 T0; 1372 Word16 T0_frac; 1373 Word16 index; 1374 Word16 index_mr475 = 0; 1375 Word16 gain_pit; 1376 Word16 gain_code; 1377 Word16 gain_code_mix; 1378 Word16 pit_sharp; 1379 Word16 pit_flag; 1380 Word16 pitch_fac; 1381 Word16 t0_min; 1382 Word16 t0_max; 1383 Word16 delta_frc_low; 1384 Word16 delta_frc_range; 1385 Word16 tmp_shift; 1386 Word16 temp; 1387 Word32 L_temp; 1388 Word16 flag4; 1389 Word16 carefulFlag; 1390 Word16 excEnergy; 1391 Word16 subfrNr; 1392 Word16 evenSubfr = 0; 1393 1394 Word16 bfi = 0; /* bad frame indication flag */ 1395 Word16 pdfi = 0; /* potential degraded bad frame flag */ 1396 1397 enum DTXStateType newDTXState; /* SPEECH , DTX, DTX_MUTE */ 1398 Flag *pOverflow = &(st->overflow); /* Overflow flag */ 1399 1400 1401 /* find the new DTX state SPEECH OR DTX */ 1402 newDTXState = rx_dtx_handler(&(st->dtxDecoderState), frame_type, pOverflow); 1403 1404 /* DTX actions */ 1405 1406 if (newDTXState != SPEECH) 1407 { 1408 Decoder_amr_reset(st, MRDTX); 1409 1410 dtx_dec(&(st->dtxDecoderState), 1411 st->mem_syn, 1412 &(st->lsfState), 1413 &(st->pred_state), 1414 &(st->Cb_gain_averState), 1415 newDTXState, 1416 mode, 1417 parm, synth, A_t, pOverflow); 1418 1419 /* update average lsp */ 1420 Lsf_lsp( 1421 st->lsfState.past_lsf_q, 1422 st->lsp_old, 1423 M, 1424 pOverflow); 1425 1426 lsp_avg( 1427 &(st->lsp_avg_st), 1428 st->lsfState.past_lsf_q, 1429 pOverflow); 1430 1431 goto the_end; 1432 } 1433 1434 /* SPEECH action state machine */ 1435 if ((frame_type == RX_SPEECH_BAD) || (frame_type == RX_NO_DATA) || 1436 (frame_type == RX_ONSET)) 1437 { 1438 bfi = 1; 1439 1440 if ((frame_type == RX_NO_DATA) || (frame_type == RX_ONSET)) 1441 { 1442 build_CN_param(&st->nodataSeed, 1443 prmno[mode], 1444 bitno[mode], 1445 parm, 1446 pOverflow); 1447 } 1448 } 1449 else if (frame_type == RX_SPEECH_DEGRADED) 1450 { 1451 pdfi = 1; 1452 } 1453 1454 if (bfi != 0) 1455 { 1456 st->state += 1; 1457 } 1458 else if (st->state == 6) 1459 1460 { 1461 st->state = 5; 1462 } 1463 else 1464 { 1465 st->state = 0; 1466 } 1467 1468 1469 if (st->state > 6) 1470 { 1471 st->state = 6; 1472 } 1473 1474 /* If this frame is the first speech frame after CNI period, */ 1475 /* set the BFH state machine to an appropriate state depending */ 1476 /* on whether there was DTX muting before start of speech or not */ 1477 /* If there was DTX muting, the first speech frame is muted. */ 1478 /* If there was no DTX muting, the first speech frame is not */ 1479 /* muted. The BFH state machine starts from state 5, however, to */ 1480 /* keep the audible noise resulting from a SID frame which is */ 1481 /* erroneously interpreted as a good speech frame as small as */ 1482 /* possible (the decoder output in this case is quickly muted) */ 1483 1484 if (st->dtxDecoderState.dtxGlobalState == DTX) 1485 { 1486 st->state = 5; 1487 st->prev_bf = 0; 1488 } 1489 else if (st->dtxDecoderState.dtxGlobalState == DTX_MUTE) 1490 { 1491 st->state = 5; 1492 st->prev_bf = 1; 1493 } 1494 1495 /* save old LSFs for CB gain smoothing */ 1496 Copy(st->lsfState.past_lsf_q, prev_lsf, M); 1497 1498 /* decode LSF parameters and generate interpolated lpc coefficients 1499 for the 4 subframes */ 1500 1501 if (mode != MR122) 1502 { 1503 D_plsf_3( 1504 &(st->lsfState), 1505 mode, 1506 bfi, 1507 parm, 1508 lsp_new, 1509 pOverflow); 1510 1511 /* Advance synthesis parameters pointer */ 1512 parm += 3; 1513 1514 Int_lpc_1to3( 1515 st->lsp_old, 1516 lsp_new, 1517 A_t, 1518 pOverflow); 1519 } 1520 else 1521 { 1522 D_plsf_5( 1523 &(st->lsfState), 1524 bfi, 1525 parm, 1526 lsp_mid, 1527 lsp_new, 1528 pOverflow); 1529 1530 /* Advance synthesis parameters pointer */ 1531 parm += 5; 1532 1533 Int_lpc_1and3( 1534 st->lsp_old, 1535 lsp_mid, 1536 lsp_new, 1537 A_t, 1538 pOverflow); 1539 } 1540 1541 /* update the LSPs for the next frame */ 1542 for (i = 0; i < M; i++) 1543 { 1544 st->lsp_old[i] = lsp_new[i]; 1545 } 1546 1547 /*------------------------------------------------------------------------* 1548 * Loop for every subframe in the analysis frame * 1549 *------------------------------------------------------------------------* 1550 * The subframe size is L_SUBFR and the loop is repeated L_FRAME/L_SUBFR * 1551 * times * 1552 * - decode the pitch delay * 1553 * - decode algebraic code * 1554 * - decode pitch and codebook gains * 1555 * - find the excitation and compute synthesis speech * 1556 *------------------------------------------------------------------------*/ 1557 1558 /* pointer to interpolated LPC parameters */ 1559 Az = A_t; 1560 1561 evenSubfr = 0; 1562 subfrNr = -1; 1563 for (i_subfr = 0; i_subfr < L_FRAME; i_subfr += L_SUBFR) 1564 { 1565 subfrNr += 1; 1566 evenSubfr = 1 - evenSubfr; 1567 1568 /* flag for first and 3th subframe */ 1569 pit_flag = i_subfr; 1570 1571 1572 if (i_subfr == L_FRAME_BY2) 1573 { 1574 if ((mode != MR475) && (mode != MR515)) 1575 { 1576 pit_flag = 0; 1577 } 1578 } 1579 1580 /* pitch index */ 1581 index = *parm++; 1582 1583 /*-------------------------------------------------------* 1584 * - decode pitch lag and find adaptive codebook vector. * 1585 *-------------------------------------------------------*/ 1586 1587 if (mode != MR122) 1588 { 1589 /* flag4 indicates encoding with 4 bit resolution; */ 1590 /* this is needed for mode MR475, MR515, MR59 and MR67 */ 1591 1592 flag4 = 0; 1593 1594 if ((mode == MR475) || (mode == MR515) || (mode == MR59) || 1595 (mode == MR67)) 1596 { 1597 flag4 = 1; 1598 } 1599 1600 /*-------------------------------------------------------* 1601 * - get ranges for the t0_min and t0_max * 1602 * - only needed in delta decoding * 1603 *-------------------------------------------------------*/ 1604 1605 delta_frc_low = 5; 1606 delta_frc_range = 9; 1607 1608 if (mode == MR795) 1609 { 1610 delta_frc_low = 10; 1611 delta_frc_range = 19; 1612 } 1613 1614 t0_min = sub(st->old_T0, delta_frc_low, pOverflow); 1615 1616 if (t0_min < PIT_MIN) 1617 { 1618 t0_min = PIT_MIN; 1619 } 1620 t0_max = add(t0_min, delta_frc_range, pOverflow); 1621 1622 if (t0_max > PIT_MAX) 1623 { 1624 t0_max = PIT_MAX; 1625 t0_min = t0_max - delta_frc_range; 1626 } 1627 1628 Dec_lag3(index, t0_min, t0_max, pit_flag, st->old_T0, 1629 &T0, &T0_frac, flag4, pOverflow); 1630 1631 st->T0_lagBuff = T0; 1632 1633 if (bfi != 0) 1634 { 1635 if (st->old_T0 < PIT_MAX) 1636 { /* Graceful pitch */ 1637 st->old_T0 += 0; /* degradation */ 1638 } 1639 T0 = st->old_T0; 1640 T0_frac = 0; 1641 1642 if ((st->inBackgroundNoise != 0) && (st->voicedHangover > 4) && 1643 ((mode == MR475) || (mode == MR515) || (mode == MR59))) 1644 { 1645 T0 = st->T0_lagBuff; 1646 } 1647 } 1648 1649 Pred_lt_3or6(st->exc, T0, T0_frac, L_SUBFR, 1, pOverflow); 1650 } 1651 else 1652 { 1653 Dec_lag6(index, PIT_MIN_MR122, 1654 PIT_MAX, pit_flag, &T0, &T0_frac, pOverflow); 1655 1656 1657 if (!(bfi == 0 && (pit_flag == 0 || index < 61))) 1658 { 1659 st->T0_lagBuff = T0; 1660 T0 = st->old_T0; 1661 T0_frac = 0; 1662 } 1663 1664 Pred_lt_3or6(st->exc, T0, T0_frac, L_SUBFR, 0, pOverflow); 1665 } 1666 1667 /*-------------------------------------------------------* 1668 * - (MR122 only: Decode pitch gain.) * 1669 * - Decode innovative codebook. * 1670 * - set pitch sharpening factor * 1671 *-------------------------------------------------------*/ 1672 if ((mode == MR475) || (mode == MR515)) 1673 { /* MR475, MR515 */ 1674 index = *parm++; /* index of position */ 1675 i = *parm++; /* signs */ 1676 1677 decode_2i40_9bits(subfrNr, i, index, code, pOverflow); 1678 1679 L_temp = (Word32)st->sharp << 1; 1680 if (L_temp != (Word32)((Word16) L_temp)) 1681 { 1682 pit_sharp = (st->sharp > 0) ? MAX_16 : MIN_16; 1683 } 1684 else 1685 { 1686 pit_sharp = (Word16) L_temp; 1687 } 1688 } 1689 else if (mode == MR59) 1690 { /* MR59 */ 1691 index = *parm++; /* index of position */ 1692 i = *parm++; /* signs */ 1693 1694 decode_2i40_11bits(i, index, code); 1695 1696 L_temp = (Word32)st->sharp << 1; 1697 if (L_temp != (Word32)((Word16) L_temp)) 1698 { 1699 pit_sharp = (st->sharp > 0) ? MAX_16 : MIN_16; 1700 } 1701 else 1702 { 1703 pit_sharp = (Word16) L_temp; 1704 } 1705 } 1706 else if (mode == MR67) 1707 { /* MR67 */ 1708 index = *parm++; /* index of position */ 1709 i = *parm++; /* signs */ 1710 1711 decode_3i40_14bits(i, index, code); 1712 1713 L_temp = (Word32)st->sharp << 1; 1714 if (L_temp != (Word32)((Word16) L_temp)) 1715 { 1716 pit_sharp = (st->sharp > 0) ? MAX_16 : MIN_16; 1717 } 1718 else 1719 { 1720 pit_sharp = (Word16) L_temp; 1721 } 1722 } 1723 else if (mode <= MR795) 1724 { /* MR74, MR795 */ 1725 index = *parm++; /* index of position */ 1726 i = *parm++; /* signs */ 1727 1728 decode_4i40_17bits(i, index, code); 1729 1730 L_temp = (Word32)st->sharp << 1; 1731 if (L_temp != (Word32)((Word16) L_temp)) 1732 { 1733 pit_sharp = (st->sharp > 0) ? MAX_16 : MIN_16; 1734 } 1735 else 1736 { 1737 pit_sharp = (Word16) L_temp; 1738 } 1739 } 1740 else if (mode == MR102) 1741 { /* MR102 */ 1742 dec_8i40_31bits(parm, code, pOverflow); 1743 parm += 7; 1744 1745 L_temp = (Word32)st->sharp << 1; 1746 if (L_temp != (Word32)((Word16) L_temp)) 1747 { 1748 pit_sharp = (st->sharp > 0) ? MAX_16 : MIN_16; 1749 } 1750 else 1751 { 1752 pit_sharp = (Word16) L_temp; 1753 } 1754 } 1755 else 1756 { /* MR122 */ 1757 index = *parm++; 1758 1759 if (bfi != 0) 1760 { 1761 ec_gain_pitch( 1762 &(st->ec_gain_p_st), 1763 st->state, 1764 &gain_pit, 1765 pOverflow); 1766 } 1767 else 1768 { 1769 gain_pit = d_gain_pitch(mode, index); 1770 } 1771 ec_gain_pitch_update( 1772 &(st->ec_gain_p_st), 1773 bfi, 1774 st->prev_bf, 1775 &gain_pit, 1776 pOverflow); 1777 1778 1779 dec_10i40_35bits(parm, code); 1780 parm += 10; 1781 1782 /* pit_sharp = gain_pit; */ 1783 /* if (pit_sharp > 1.0) pit_sharp = 1.0; */ 1784 1785 L_temp = (Word32)gain_pit << 1; 1786 if (L_temp != (Word32)((Word16) L_temp)) 1787 { 1788 pit_sharp = (gain_pit > 0) ? MAX_16 : MIN_16; 1789 } 1790 else 1791 { 1792 pit_sharp = (Word16) L_temp; 1793 } 1794 } 1795 /*-------------------------------------------------------* 1796 * - Add the pitch contribution to code[]. * 1797 *-------------------------------------------------------*/ 1798 for (i = T0; i < L_SUBFR; i++) 1799 { 1800 temp = mult(*(code + i - T0), pit_sharp, pOverflow); 1801 *(code + i) = add(*(code + i), temp, pOverflow); 1802 1803 } 1804 1805 /*------------------------------------------------------------* 1806 * - Decode codebook gain (MR122) or both pitch * 1807 * gain and codebook gain (all others) * 1808 * - Update pitch sharpening "sharp" with quantized gain_pit * 1809 *------------------------------------------------------------*/ 1810 if (mode == MR475) 1811 { 1812 /* read and decode pitch and code gain */ 1813 1814 if (evenSubfr != 0) 1815 { 1816 index_mr475 = *parm++; /* index of gain(s) */ 1817 } 1818 1819 if (bfi == 0) 1820 { 1821 Dec_gain( 1822 &(st->pred_state), 1823 mode, 1824 index_mr475, 1825 code, 1826 evenSubfr, 1827 &gain_pit, 1828 &gain_code, 1829 pOverflow); 1830 } 1831 else 1832 { 1833 ec_gain_pitch( 1834 &(st->ec_gain_p_st), 1835 st->state, 1836 &gain_pit, 1837 pOverflow); 1838 1839 ec_gain_code( 1840 &(st->ec_gain_c_st), 1841 &(st->pred_state), 1842 st->state, 1843 &gain_code, 1844 pOverflow); 1845 } 1846 ec_gain_pitch_update( 1847 &st->ec_gain_p_st, 1848 bfi, 1849 st->prev_bf, 1850 &gain_pit, 1851 pOverflow); 1852 1853 ec_gain_code_update( 1854 &st->ec_gain_c_st, 1855 bfi, 1856 st->prev_bf, 1857 &gain_code, 1858 pOverflow); 1859 1860 pit_sharp = gain_pit; 1861 1862 if (pit_sharp > SHARPMAX) 1863 { 1864 pit_sharp = SHARPMAX; 1865 } 1866 1867 } 1868 else if ((mode <= MR74) || (mode == MR102)) 1869 { 1870 /* read and decode pitch and code gain */ 1871 index = *parm++; /* index of gain(s) */ 1872 1873 if (bfi == 0) 1874 { 1875 Dec_gain( 1876 &(st->pred_state), 1877 mode, 1878 index, 1879 code, 1880 evenSubfr, 1881 &gain_pit, 1882 &gain_code, 1883 pOverflow); 1884 } 1885 else 1886 { 1887 ec_gain_pitch( 1888 &(st->ec_gain_p_st), 1889 st->state, 1890 &gain_pit, 1891 pOverflow); 1892 1893 ec_gain_code( 1894 &(st->ec_gain_c_st), 1895 &(st->pred_state), 1896 st->state, 1897 &gain_code, 1898 pOverflow); 1899 } 1900 1901 ec_gain_pitch_update( 1902 &(st->ec_gain_p_st), 1903 bfi, 1904 st->prev_bf, 1905 &gain_pit, 1906 pOverflow); 1907 1908 ec_gain_code_update( 1909 &(st->ec_gain_c_st), 1910 bfi, 1911 st->prev_bf, 1912 &gain_code, 1913 pOverflow); 1914 1915 pit_sharp = gain_pit; 1916 1917 if (pit_sharp > SHARPMAX) 1918 { 1919 pit_sharp = SHARPMAX; 1920 } 1921 1922 if (mode == MR102) 1923 { 1924 if (st->old_T0 > (L_SUBFR + 5)) 1925 { 1926 if (pit_sharp < 0) 1927 { 1928 pit_sharp = ~((~pit_sharp) >> 2); 1929 } 1930 else 1931 { 1932 pit_sharp = pit_sharp >> 2; 1933 } 1934 } 1935 } 1936 } 1937 else 1938 { 1939 /* read and decode pitch gain */ 1940 index = *parm++; /* index of gain(s) */ 1941 1942 if (mode == MR795) 1943 { 1944 /* decode pitch gain */ 1945 if (bfi != 0) 1946 { 1947 ec_gain_pitch( 1948 &(st->ec_gain_p_st), 1949 st->state, 1950 &gain_pit, 1951 pOverflow); 1952 } 1953 else 1954 { 1955 gain_pit = d_gain_pitch(mode, index); 1956 } 1957 ec_gain_pitch_update( 1958 &(st->ec_gain_p_st), 1959 bfi, 1960 st->prev_bf, 1961 &gain_pit, 1962 pOverflow); 1963 1964 /* read and decode code gain */ 1965 index = *parm++; 1966 1967 if (bfi == 0) 1968 { 1969 d_gain_code( 1970 &(st->pred_state), 1971 mode, 1972 index, 1973 code, 1974 &gain_code, 1975 pOverflow); 1976 } 1977 else 1978 { 1979 ec_gain_code( 1980 &(st->ec_gain_c_st), 1981 &(st->pred_state), 1982 st->state, 1983 &gain_code, 1984 pOverflow); 1985 } 1986 1987 ec_gain_code_update( 1988 &(st->ec_gain_c_st), 1989 bfi, 1990 st->prev_bf, 1991 &gain_code, 1992 pOverflow); 1993 1994 pit_sharp = gain_pit; 1995 1996 if (pit_sharp > SHARPMAX) 1997 { 1998 pit_sharp = SHARPMAX; 1999 } 2000 } 2001 else 2002 { /* MR122 */ 2003 2004 if (bfi == 0) 2005 { 2006 d_gain_code( 2007 &(st->pred_state), 2008 mode, 2009 index, 2010 code, 2011 &gain_code, 2012 pOverflow); 2013 } 2014 else 2015 { 2016 ec_gain_code( 2017 &(st->ec_gain_c_st), 2018 &(st->pred_state), 2019 st->state, 2020 &gain_code, 2021 pOverflow); 2022 } 2023 2024 ec_gain_code_update( 2025 &(st->ec_gain_c_st), 2026 bfi, 2027 st->prev_bf, 2028 &gain_code, 2029 pOverflow); 2030 2031 pit_sharp = gain_pit; 2032 } 2033 } 2034 2035 /* store pitch sharpening for next subframe */ 2036 /* (for modes which use the previous pitch gain for */ 2037 /* pitch sharpening in the search phase) */ 2038 /* do not update sharpening in even subframes for MR475 */ 2039 if ((mode != MR475) || (evenSubfr == 0)) 2040 { 2041 st->sharp = gain_pit; 2042 2043 if (st->sharp > SHARPMAX) 2044 { 2045 st->sharp = SHARPMAX; 2046 } 2047 } 2048 2049 pit_sharp = shl(pit_sharp, 1, pOverflow); 2050 2051 if (pit_sharp > 16384) 2052 { 2053 for (i = 0; i < L_SUBFR; i++) 2054 { 2055 temp = mult(st->exc[i], pit_sharp, pOverflow); 2056 L_temp = L_mult(temp, gain_pit, pOverflow); 2057 2058 if (mode == MR122) 2059 { 2060 if (L_temp < 0) 2061 { 2062 L_temp = ~((~L_temp) >> 1); 2063 } 2064 else 2065 { 2066 L_temp = L_temp >> 1; 2067 } 2068 } 2069 *(excp + i) = pv_round(L_temp, pOverflow); 2070 } 2071 } 2072 2073 /*-------------------------------------------------------* 2074 * - Store list of LTP gains needed in the source * 2075 * characteristic detector (SCD) * 2076 *-------------------------------------------------------*/ 2077 2078 if (bfi == 0) 2079 { 2080 for (i = 0; i < 8; i++) 2081 { 2082 st->ltpGainHistory[i] = st->ltpGainHistory[i+1]; 2083 } 2084 st->ltpGainHistory[8] = gain_pit; 2085 } 2086 2087 /*-------------------------------------------------------* 2088 * - Limit gain_pit if in background noise and BFI * 2089 * for MR475, MR515, MR59 * 2090 *-------------------------------------------------------*/ 2091 2092 2093 if ((st->prev_bf != 0 || bfi != 0) && st->inBackgroundNoise != 0 && 2094 ((mode == MR475) || (mode == MR515) || (mode == MR59))) 2095 { 2096 2097 if (gain_pit > 12288) /* if (gain_pit > 0.75) in Q14*/ 2098 { 2099 gain_pit = ((gain_pit - 12288) >> 1) + 12288; 2100 /* gain_pit = (gain_pit-0.75)/2.0 + 0.75; */ 2101 } 2102 2103 if (gain_pit > 14745) /* if (gain_pit > 0.90) in Q14*/ 2104 { 2105 gain_pit = 14745; 2106 } 2107 } 2108 2109 /*-------------------------------------------------------* 2110 * Calculate CB mixed gain * 2111 *-------------------------------------------------------*/ 2112 Int_lsf( 2113 prev_lsf, 2114 st->lsfState.past_lsf_q, 2115 i_subfr, 2116 lsf_i, 2117 pOverflow); 2118 2119 gain_code_mix = 2120 Cb_gain_average( 2121 &(st->Cb_gain_averState), 2122 mode, 2123 gain_code, 2124 lsf_i, 2125 st->lsp_avg_st.lsp_meanSave, 2126 bfi, 2127 st->prev_bf, 2128 pdfi, 2129 st->prev_pdf, 2130 st->inBackgroundNoise, 2131 st->voicedHangover, 2132 pOverflow); 2133 2134 /* make sure that MR74, MR795, MR122 have original code_gain*/ 2135 if ((mode > MR67) && (mode != MR102)) 2136 /* MR74, MR795, MR122 */ 2137 { 2138 gain_code_mix = gain_code; 2139 } 2140 2141 /*-------------------------------------------------------* 2142 * - Find the total excitation. * 2143 * - Find synthesis speech corresponding to st->exc[]. * 2144 *-------------------------------------------------------*/ 2145 if (mode <= MR102) /* MR475, MR515, MR59, MR67, MR74, MR795, MR102*/ 2146 { 2147 pitch_fac = gain_pit; 2148 tmp_shift = 1; 2149 } 2150 else /* MR122 */ 2151 { 2152 if (gain_pit < 0) 2153 { 2154 pitch_fac = ~((~gain_pit) >> 1); 2155 } 2156 else 2157 { 2158 pitch_fac = gain_pit >> 1; 2159 } 2160 tmp_shift = 2; 2161 } 2162 2163 /* copy unscaled LTP excitation to exc_enhanced (used in phase 2164 * dispersion below) and compute total excitation for LTP feedback 2165 */ 2166 for (i = 0; i < L_SUBFR; i++) 2167 { 2168 exc_enhanced[i] = st->exc[i]; 2169 2170 /* st->exc[i] = gain_pit*st->exc[i] + gain_code*code[i]; */ 2171 L_temp = L_mult(st->exc[i], pitch_fac, pOverflow); 2172 /* 12.2: Q0 * Q13 */ 2173 /* 7.4: Q0 * Q14 */ 2174 L_temp = L_mac(L_temp, code[i], gain_code, pOverflow); 2175 /* 12.2: Q12 * Q1 */ 2176 /* 7.4: Q13 * Q1 */ 2177 L_temp = L_shl(L_temp, tmp_shift, pOverflow); /* Q16 */ 2178 st->exc[i] = pv_round(L_temp, pOverflow); 2179 } 2180 2181 /*-------------------------------------------------------* 2182 * - Adaptive phase dispersion * 2183 *-------------------------------------------------------*/ 2184 ph_disp_release(&(st->ph_disp_st)); /* free phase dispersion adaption */ 2185 2186 2187 if (((mode == MR475) || (mode == MR515) || (mode == MR59)) && 2188 (st->voicedHangover > 3) && (st->inBackgroundNoise != 0) && 2189 (bfi != 0)) 2190 { 2191 ph_disp_lock(&(st->ph_disp_st)); /* Always Use full Phase Disp. */ 2192 } /* if error in bg noise */ 2193 2194 /* apply phase dispersion to innovation (if enabled) and 2195 compute total excitation for synthesis part */ 2196 ph_disp( 2197 &(st->ph_disp_st), 2198 mode, 2199 exc_enhanced, 2200 gain_code_mix, 2201 gain_pit, 2202 code, 2203 pitch_fac, 2204 tmp_shift, 2205 pOverflow); 2206 2207 /*-------------------------------------------------------* 2208 * - The Excitation control module are active during BFI.* 2209 * - Conceal drops in signal energy if in bg noise. * 2210 *-------------------------------------------------------*/ 2211 L_temp = 0; 2212 for (i = 0; i < L_SUBFR; i++) 2213 { 2214 L_temp = L_mac(L_temp, *(exc_enhanced + i), *(exc_enhanced + i), pOverflow); 2215 } 2216 2217 /* excEnergy = sqrt(L_temp) in Q0 */ 2218 if (L_temp < 0) 2219 { 2220 L_temp = ~((~L_temp) >> 1); 2221 } 2222 else 2223 { 2224 L_temp = L_temp >> 1; 2225 } 2226 2227 L_temp = sqrt_l_exp(L_temp, &temp, pOverflow); 2228 /* To cope with 16-bit and scaling in ex_ctrl() */ 2229 L_temp = L_shr(L_temp, (Word16)((temp >> 1) + 15), pOverflow); 2230 if (L_temp < 0) 2231 { 2232 excEnergy = (Word16)(~((~L_temp) >> 2)); 2233 } 2234 else 2235 { 2236 excEnergy = (Word16)(L_temp >> 2); 2237 } 2238 2239 if (((mode == MR475) || (mode == MR515) || (mode == MR59)) && 2240 (st->voicedHangover > 5) && (st->inBackgroundNoise != 0) && 2241 (st->state < 4) && 2242 ((pdfi != 0 && st->prev_pdf != 0) || bfi != 0 || st->prev_bf != 0)) 2243 { 2244 carefulFlag = 0; 2245 2246 if (pdfi != 0 && bfi == 0) 2247 { 2248 carefulFlag = 1; 2249 } 2250 2251 Ex_ctrl(exc_enhanced, 2252 excEnergy, 2253 st->excEnergyHist, 2254 st->voicedHangover, 2255 st->prev_bf, 2256 carefulFlag, pOverflow); 2257 } 2258 2259 if (!((st->inBackgroundNoise != 0) && (bfi != 0 || st->prev_bf != 0) && 2260 (st->state < 4))) 2261 { 2262 /* Update energy history for all modes */ 2263 for (i = 0; i < 8; i++) 2264 { 2265 st->excEnergyHist[i] = st->excEnergyHist[i+1]; 2266 } 2267 st->excEnergyHist[8] = excEnergy; 2268 } 2269 /*-------------------------------------------------------* 2270 * Excitation control module end. * 2271 *-------------------------------------------------------*/ 2272 if (pit_sharp > 16384) 2273 { 2274 for (i = 0; i < L_SUBFR; i++) 2275 { 2276 *(excp + i) = add(*(excp + i), *(exc_enhanced + i), pOverflow); 2277 2278 } 2279 agc2(exc_enhanced, excp, L_SUBFR, pOverflow); 2280 *pOverflow = 0; 2281 Syn_filt(Az, excp, &synth[i_subfr], L_SUBFR, 2282 st->mem_syn, 0); 2283 } 2284 else 2285 { 2286 *pOverflow = 0; 2287 Syn_filt(Az, exc_enhanced, &synth[i_subfr], L_SUBFR, 2288 st->mem_syn, 0); 2289 } 2290 2291 if (*pOverflow != 0) /* Test for overflow */ 2292 { 2293 for (i = PIT_MAX + L_INTERPOL + L_SUBFR - 1; i >= 0; i--) 2294 { 2295 if (st->old_exc[i] < 0) 2296 { 2297 st->old_exc[i] = ~((~st->old_exc[i]) >> 2); 2298 } 2299 else 2300 { 2301 st->old_exc[i] = st->old_exc[i] >> 2; 2302 } 2303 2304 } 2305 2306 for (i = L_SUBFR - 1; i >= 0; i--) 2307 { 2308 if (*(exc_enhanced + i) < 0) 2309 { 2310 *(exc_enhanced + i) = ~((~(*(exc_enhanced + i))) >> 2); 2311 } 2312 else 2313 { 2314 *(exc_enhanced + i) = *(exc_enhanced + i) >> 2; 2315 } 2316 } 2317 Syn_filt(Az, exc_enhanced, &synth[i_subfr], L_SUBFR, st->mem_syn, 1); 2318 } 2319 else 2320 { 2321 Copy(&synth[i_subfr+L_SUBFR-M], st->mem_syn, M); 2322 } 2323 2324 /*--------------------------------------------------* 2325 * Update signal for next frame. * 2326 * -> shift to the left by L_SUBFR st->exc[] * 2327 *--------------------------------------------------*/ 2328 2329 Copy(&st->old_exc[L_SUBFR], &st->old_exc[0], PIT_MAX + L_INTERPOL); 2330 2331 /* interpolated LPC parameters for next subframe */ 2332 Az += MP1; 2333 2334 /* store T0 for next subframe */ 2335 st->old_T0 = T0; 2336 } 2337 2338 /*-------------------------------------------------------* 2339 * Call the Source Characteristic Detector which updates * 2340 * st->inBackgroundNoise and st->voicedHangover. * 2341 *-------------------------------------------------------*/ 2342 2343 st->inBackgroundNoise = 2344 Bgn_scd( 2345 &(st->background_state), 2346 &(st->ltpGainHistory[0]), 2347 &(synth[0]), 2348 &(st->voicedHangover), 2349 pOverflow); 2350 2351 dtx_dec_activity_update( 2352 &(st->dtxDecoderState), 2353 st->lsfState.past_lsf_q, 2354 synth, 2355 pOverflow); 2356 2357 /* store bfi for next subframe */ 2358 st->prev_bf = bfi; 2359 st->prev_pdf = pdfi; 2360 2361 /*--------------------------------------------------* 2362 * Calculate the LSF averages on the eight * 2363 * previous frames * 2364 *--------------------------------------------------*/ 2365 lsp_avg( 2366 &(st->lsp_avg_st), 2367 st->lsfState.past_lsf_q, 2368 pOverflow); 2369 2370 the_end: 2371 st->dtxDecoderState.dtxGlobalState = newDTXState; 2372 2373 // return(0); 2374 } 2375