LCOV - code coverage report
Current view: top level - lib_lc3plus - noise_filling.c (source / functions) Hit Total Coverage
Test: Coverage on main -- short test vectors @ 867217ee32c8e8cd2cf5aae69e60c58e00160b49 Lines: 40 56 71.4 %
Date: 2025-12-13 06:47:12 Functions: 1 1 100.0 %

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

Generated by: LCOV version 1.14