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 : * dec_acelp_2t32() 48 : * 49 : * 12 bits algebraic codebook decoder. 50 : * 2 track x 32 positions per track = 64 samples. 51 : * 52 : * 12 bits --> 2 pulses in a frame of 64 samples. 53 : * 54 : * All pulses can have two (2) possible amplitudes: +1 or -1. 55 : * Each pulse can have 32 possible positions. 56 : * 57 : * See cod2t32.c for more details of the algebraic code. 58 : *----------------------------------------------------------------------------------*/ 59 : 60 70755 : void dec_acelp_2t32( 61 : Decoder_State *st, /* i/o: decoder state structure */ 62 : float code[] /* o : algebraic (fixed) codebook excitation */ 63 : ) 64 : { 65 : int16_t index, i0, i1; 66 : 67 70755 : index = get_next_indice( st, 12 ); 68 : 69 70755 : set_f( code, 0.0f, L_SUBFR ); 70 : 71 : /*-----------------------------------------------------------------* 72 : * decode the positions and signs of pulses and build the codeword 73 : *-----------------------------------------------------------------*/ 74 : 75 70755 : i0 = ( ( index >> 6 ) & ( NB_POS_FCB_2T - 1 ) ) * NB_TRACK_FCB_2T; 76 70755 : i1 = ( ( index & ( NB_POS_FCB_2T - 1 ) ) * NB_TRACK_FCB_2T ) + 1; 77 70755 : code[i0] = -1.0f; 78 70755 : if ( ( index & 0x800 ) == 0 ) 79 : { 80 35370 : code[i0] = 1.0f; 81 : } 82 : 83 70755 : code[i1] = -1.0f; 84 70755 : if ( ( index & 0x20 ) == 0 ) 85 : { 86 35793 : code[i1] = 1.0f; 87 : } 88 : 89 70755 : return; 90 : } 91 : 92 : 93 : /*----------------------------------------------------------------------------------* 94 : * dec_acelp_1t64() 95 : * 96 : * 7 bits algebraic codebook. 97 : * 1 track x 64 positions per track = 64 samples. 98 : * 99 : * The pulse can have 64 possible positions and two (2) possible amplitudes: +1 or -1. 100 : *----------------------------------------------------------------------------------*/ 101 : 102 1056 : void dec_acelp_1t64( 103 : Decoder_State *st, /* i/o: decoder state structure */ 104 : float code[], /* o : algebraic (fixed) codebook excitation */ 105 : const int16_t L_subfr /* i : subframe length */ 106 : ) 107 : { 108 : int16_t pos, sgn; 109 : 110 : /*-----------------------------------------------------------------* 111 : * decode the positions and signs of pulses and build the codeword 112 : *-----------------------------------------------------------------*/ 113 : 114 1056 : if ( L_subfr == L_SUBFR ) 115 : { 116 1056 : pos = get_next_indice( st, 7 ); 117 : } 118 : else /* L_subfr == 2*L_SUBFR */ 119 : { 120 0 : pos = get_next_indice( st, 8 ); 121 : } 122 : 123 1056 : sgn = -1; 124 1056 : if ( pos >= L_subfr ) 125 : { 126 459 : pos -= L_subfr; 127 459 : sgn = 1; 128 : } 129 : 130 1056 : set_f( code, 0.0f, L_subfr ); 131 1056 : code[pos] = sgn; 132 : 133 1056 : return; 134 : }