Line data Source code
1 : /****************************************************************************** 2 : * ETSI TS 103 634 V1.6.1 * 3 : * Low Complexity Communication Codec Plus (LC3plus) * 4 : * * 5 : * Copyright licence is solely granted through ETSI Intellectual Property * 6 : * Rights Policy, 3rd April 2019. No patent licence is granted by implication, * 7 : * estoppel or otherwise. * 8 : ******************************************************************************/ 9 : 10 : #include "options.h" 11 : #include "wmc_auto.h" 12 : #include "functions.h" 13 : 14 894854 : void processNoiseFilling_fl(LC3_FLOAT xq[], LC3_INT nfseed, LC3_INT fac_ns_idx, LC3_INT bw_stopband, LC3PLUS_FrameDuration frame_dms, LC3_FLOAT fac_ns_pc, LC3_INT spec_inv_idx) 15 : { 16 : LC3_INT zeroLines[MAX_LEN]; 17 894854 : LC3_INT nTransWidth = 0, startOffset = 0, j, k, nzeros = 0, kZeroLines; 18 894854 : LC3_FLOAT fac_ns = 0; 19 : 20 894854 : switch (frame_dms) 21 : { 22 : #ifdef CR9_C_ADD_1p25MS 23 0 : case LC3PLUS_FRAME_DURATION_1p25MS: 24 0 : nTransWidth = 1; 25 0 : startOffset = 6; 26 0 : break; 27 : #endif 28 0 : case LC3PLUS_FRAME_DURATION_2p5MS: 29 0 : nTransWidth = 1; 30 0 : startOffset = 6; 31 0 : break; 32 854694 : case LC3PLUS_FRAME_DURATION_5MS: 33 854694 : nTransWidth = 1; 34 854694 : startOffset = 12; 35 854694 : break; 36 0 : case LC3PLUS_FRAME_DURATION_7p5MS: 37 0 : nTransWidth = 2; 38 0 : startOffset = 18; 39 0 : break; 40 40160 : case LC3PLUS_FRAME_DURATION_10MS: 41 40160 : nTransWidth = 3; 42 40160 : startOffset = 24; 43 40160 : break; 44 0 : case LC3PLUS_FRAME_DURATION_UNDEFINED: 45 0 : assert(0); 46 : } 47 : 48 894854 : fac_ns = (8.0 - fac_ns_idx) / 16.0; 49 : 50 894854 : j = 0; 51 : 52 2845202 : for (k = startOffset - nTransWidth; k < startOffset + nTransWidth; k++) 53 : { 54 1950348 : if (xq[k] != 0) 55 : { 56 1904672 : nzeros = -2 * nTransWidth - 1; 57 : } 58 1950348 : if (xq[k] == 0) 59 : { 60 45676 : nzeros ++; 61 : } 62 : } 63 174478912 : for (k = startOffset; k < bw_stopband - nTransWidth; k++) 64 : { 65 173584058 : if (xq[k + nTransWidth] != 0) 66 : { 67 144397191 : nzeros = -2 * nTransWidth - 1; 68 : } 69 173584058 : if (xq[k + nTransWidth] == 0) 70 : { 71 29186867 : nzeros ++; 72 : } 73 173584058 : if (nzeros >= 0) 74 : { 75 5159243 : zeroLines[j++] = k; 76 : } 77 : } 78 : 79 1870028 : for (k = bw_stopband - nTransWidth; k < bw_stopband; k++) 80 : { 81 975174 : nzeros ++; 82 975174 : if (nzeros >= 0) 83 : { 84 143322 : zeroLines[j++] = k; 85 : } 86 : } 87 : 88 894854 : kZeroLines = j; 89 : 90 6197419 : for (k = 0; k < kZeroLines; k++) { 91 5302565 : nfseed = (13849 + (nfseed + 32768) * 31821) & 65535; 92 5302565 : nfseed -= 32768; 93 : 94 5302565 : if (nfseed >= 0) { 95 2652920 : if (zeroLines[k] < spec_inv_idx) 96 : { 97 2652920 : xq[zeroLines[k]] = fac_ns; 98 : } else { 99 0 : xq[zeroLines[k]] = fac_ns_pc; 100 : } 101 : } else { 102 2649645 : if (zeroLines[k] < spec_inv_idx) 103 : { 104 2649645 : xq[zeroLines[k]] = -fac_ns; 105 : } else { 106 0 : xq[zeroLines[k]] = -fac_ns_pc; 107 : } 108 : } 109 : } 110 : 111 894854 : return; 112 : }