Line data Source code
1 : /****************************************************************************** 2 : * ETSI TS 103 634 V1.5.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 1756272 : void processNoiseFilling_fl(LC3_FLOAT xq[], LC3_INT nfseed, LC3_INT fac_ns_idx, LC3_INT bw_stopband, LC3_INT frame_dms, LC3_FLOAT fac_ns_pc, LC3_INT spec_inv_idx) 15 : { 16 : LC3_INT zeroLines[MAX_LEN]; 17 1756272 : LC3_INT nTransWidth, startOffset, j, k, nzeros = 0, kZeroLines; 18 1756272 : LC3_FLOAT fac_ns = 0; 19 : 20 1756272 : switch (frame_dms) 21 : { 22 0 : case 25: 23 0 : nTransWidth = 1; 24 0 : startOffset = 6; 25 0 : break; 26 1674288 : case 50: 27 1674288 : nTransWidth = 1; 28 1674288 : startOffset = 12; 29 1674288 : break; 30 0 : case 75: 31 0 : nTransWidth = 2; 32 0 : startOffset = 18; 33 0 : break; 34 81984 : case 100: 35 81984 : nTransWidth = 3; 36 81984 : startOffset = 24; 37 81984 : break; 38 : } 39 : 40 1756272 : fac_ns = (8.0 - fac_ns_idx) / 16.0; 41 : 42 1756272 : j = 0; 43 : 44 5596752 : for (k = startOffset - nTransWidth; k < startOffset + nTransWidth; k++) 45 : { 46 3840480 : if (xq[k] != 0) 47 : { 48 3608567 : nzeros = -2 * nTransWidth - 1; 49 : } 50 3840480 : if (xq[k] == 0) 51 : { 52 231913 : nzeros ++; 53 : } 54 : } 55 341413920 : for (k = startOffset; k < bw_stopband - nTransWidth; k++) 56 : { 57 339657648 : if (xq[k + nTransWidth] != 0) 58 : { 59 279760102 : nzeros = -2 * nTransWidth - 1; 60 : } 61 339657648 : if (xq[k + nTransWidth] == 0) 62 : { 63 59897546 : nzeros ++; 64 : } 65 339657648 : if (nzeros >= 0) 66 : { 67 13233426 : zeroLines[j++] = k; 68 : } 69 : } 70 : 71 3676512 : for (k = bw_stopband - nTransWidth; k < bw_stopband; k++) 72 : { 73 1920240 : nzeros ++; 74 1920240 : if (nzeros >= 0) 75 : { 76 318592 : zeroLines[j++] = k; 77 : } 78 : } 79 : 80 1756272 : kZeroLines = j; 81 : 82 15308290 : for (k = 0; k < kZeroLines; k++) { 83 13552018 : nfseed = (13849 + (nfseed + 32768) * 31821) & 65535; 84 13552018 : nfseed -= 32768; 85 : 86 13552018 : if (nfseed >= 0) { 87 6777965 : if (zeroLines[k] < spec_inv_idx) 88 : { 89 6777965 : xq[zeroLines[k]] = fac_ns; 90 : } else { 91 0 : xq[zeroLines[k]] = fac_ns_pc; 92 : } 93 : } else { 94 6774053 : if (zeroLines[k] < spec_inv_idx) 95 : { 96 6774053 : xq[zeroLines[k]] = -fac_ns; 97 : } else { 98 0 : xq[zeroLines[k]] = -fac_ns_pc; 99 : } 100 : } 101 : } 102 : 103 1756272 : return; 104 : }