LCOV - code coverage report
Current view: top level - lib_lc3plus - noise_filling.c (source / functions) Hit Total Coverage
Test: Coverage on main -- merged total coverage @ 9b04ec3cb36f5e8dc438cf854fa3e349998fa1e9 Lines: 40 50 80.0 %
Date: 2025-10-31 05:45:46 Functions: 1 1 100.0 %

          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             : }

Generated by: LCOV version 1.14