Line data Source code
1 : /****************************************************************************************************** 2 : 3 : (C) 2022-2025 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, 4 : Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., 5 : Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, 6 : Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other 7 : contributors to this repository. All Rights Reserved. 8 : 9 : This software is protected by copyright law and by international treaties. 10 : The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, 11 : Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., 12 : Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, 13 : Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other 14 : contributors to this repository retain full ownership rights in their respective contributions in 15 : the software. This notice grants no license of any kind, including but not limited to patent 16 : license, nor is any license granted by implication, estoppel or otherwise. 17 : 18 : Contributors are required to enter into the IVAS codec Public Collaboration agreement before making 19 : contributions. 20 : 21 : This software is provided "AS IS", without any express or implied warranties. The software is in the 22 : development stage. It is intended exclusively for experts who have experience with such software and 23 : solely for the purpose of inspection. All implied warranties of non-infringement, merchantability 24 : and fitness for a particular purpose are hereby disclaimed and excluded. 25 : 26 : Any dispute, controversy or claim arising under or in relation to providing this software shall be 27 : submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in 28 : accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and 29 : the United Nations Convention on Contracts on the International Sales of Goods. 30 : 31 : *******************************************************************************************************/ 32 : 33 : /*==================================================================================== 34 : EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 35 : ====================================================================================*/ 36 : 37 : #include <stdint.h> 38 : #include "options.h" 39 : #ifdef DEBUGGING 40 : #include "debug.h" 41 : #endif 42 : #include "cnst.h" 43 : #include "prot.h" 44 : #include "wmc_auto.h" 45 : 46 : /*---------------------------------------------------------------------* 47 : * lp_filt_exc_dec() 48 : * 49 : * Low-pass filtering of the adaptive exctitation 50 : *---------------------------------------------------------------------*/ 51 : 52 1659222 : void lp_filt_exc_dec( 53 : Decoder_State *st, /* i/o: decoder state structure */ 54 : const int16_t codec_mode, /* i : codec mode */ 55 : const int16_t i_subfr, /* i : subframe index */ 56 : const int16_t L_subfr, /* i : subframe size */ 57 : const int16_t L_frame, /* i : frame size */ 58 : int16_t lp_flag, /* i : operation mode signaling */ 59 : float *exc /* i/o: pointer to the excitation signal frame */ 60 : ) 61 : { 62 : int16_t i; 63 : float code[L_FRAME]; 64 : 65 : /*-----------------------------------------------------------------* 66 : * Select LP filtering of the adaptive excitation 67 : *-----------------------------------------------------------------*/ 68 : 69 1659222 : if ( codec_mode == MODE1 ) 70 : { 71 1650162 : if ( lp_flag == NORMAL_OPERATION ) 72 : { 73 1450446 : lp_flag = get_next_indice( st, 1 ); 74 : } 75 : } 76 : 77 : /*--------------------------------------------------------------------* 78 : * Find pitch excitation with LP filter 79 : *--------------------------------------------------------------------*/ 80 : 81 1659222 : if ( lp_flag == LOW_PASS ) 82 : { 83 : /* pointer positionning to avoid doing it inside the loop */ 84 1092108 : if ( codec_mode == MODE2 && L_frame == L_FRAME16k ) 85 : { 86 509145 : for ( i = 0; i < L_subfr; i++ ) 87 : { 88 501312 : code[i] = (float) ( 0.21f * exc[i - 1 + i_subfr] + 0.58f * exc[i + i_subfr] + 0.21f * exc[i + 1 + i_subfr] ); 89 : } 90 : } 91 : else 92 : { 93 70477875 : for ( i = 0; i < L_subfr; i++ ) 94 : { 95 69393600 : code[i] = (float) ( 0.18f * exc[i - 1 + i_subfr] + 0.64f * exc[i + i_subfr] + 0.18f * exc[i + 1 + i_subfr] ); 96 : } 97 : } 98 : 99 1092108 : mvr2r( code, &exc[i_subfr], L_subfr ); 100 : } 101 : 102 1659222 : return; 103 : }