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 1166730 : 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 1166730 : LC3_INT nTransWidth = 0, startOffset = 0, j, k, nzeros = 0, kZeroLines; 18 1166730 : LC3_FLOAT fac_ns = 0; 19 : 20 1166730 : 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 1116906 : case LC3PLUS_FRAME_DURATION_5MS: 33 1116906 : nTransWidth = 1; 34 1116906 : startOffset = 12; 35 1116906 : break; 36 0 : case LC3PLUS_FRAME_DURATION_7p5MS: 37 0 : nTransWidth = 2; 38 0 : startOffset = 18; 39 0 : break; 40 49824 : case LC3PLUS_FRAME_DURATION_10MS: 41 49824 : nTransWidth = 3; 42 49824 : startOffset = 24; 43 49824 : break; 44 0 : case LC3PLUS_FRAME_DURATION_UNDEFINED: 45 0 : assert(0); 46 : } 47 : 48 1166730 : fac_ns = (8.0 - fac_ns_idx) / 16.0; 49 : 50 1166730 : j = 0; 51 : 52 3699486 : for (k = startOffset - nTransWidth; k < startOffset + nTransWidth; k++) 53 : { 54 2532756 : if (xq[k] != 0) 55 : { 56 2333556 : nzeros = -2 * nTransWidth - 1; 57 : } 58 2532756 : if (xq[k] == 0) 59 : { 60 199200 : nzeros ++; 61 : } 62 : } 63 225563784 : for (k = startOffset; k < bw_stopband - nTransWidth; k++) 64 : { 65 224397054 : if (xq[k + nTransWidth] != 0) 66 : { 67 184918919 : nzeros = -2 * nTransWidth - 1; 68 : } 69 224397054 : if (xq[k + nTransWidth] == 0) 70 : { 71 39478135 : nzeros ++; 72 : } 73 224397054 : if (nzeros >= 0) 74 : { 75 9455386 : zeroLines[j++] = k; 76 : } 77 : } 78 : 79 2433108 : for (k = bw_stopband - nTransWidth; k < bw_stopband; k++) 80 : { 81 1266378 : nzeros ++; 82 1266378 : if (nzeros >= 0) 83 : { 84 205659 : zeroLines[j++] = k; 85 : } 86 : } 87 : 88 1166730 : kZeroLines = j; 89 : 90 10827775 : for (k = 0; k < kZeroLines; k++) { 91 9661045 : nfseed = (13849 + (nfseed + 32768) * 31821) & 65535; 92 9661045 : nfseed -= 32768; 93 : 94 9661045 : if (nfseed >= 0) { 95 4831517 : if (zeroLines[k] < spec_inv_idx) 96 : { 97 4831517 : xq[zeroLines[k]] = fac_ns; 98 : } else { 99 0 : xq[zeroLines[k]] = fac_ns_pc; 100 : } 101 : } else { 102 4829528 : if (zeroLines[k] < spec_inv_idx) 103 : { 104 4829528 : xq[zeroLines[k]] = -fac_ns; 105 : } else { 106 0 : xq[zeroLines[k]] = -fac_ns_pc; 107 : } 108 : } 109 : } 110 : 111 1166730 : return; 112 : }