LCOV - code coverage report
Current view: top level - lib_lc3plus - noise_factor.c (source / functions) Hit Total Coverage
Test: Coverage on main @ 6baab0c613aa6c7100498ed7b93676aa8198a493 Lines: 0 61 0.0 %
Date: 2025-05-30 05:31:38 Functions: 0 1 0.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           0 : void processNoiseFactor_fl(LC3_INT* fac_ns_idx, LC3_FLOAT x[], LC3_INT xq[], LC3_FLOAT gg, LC3_INT BW_cutoff_idx, LC3_INT frame_dms,
      15             :                            LC3_INT target_bytes
      16             : )
      17             : {
      18           0 :     LC3_INT sumZeroLines = 0, kZeroLines = 0, startOffset = 0, nTransWidth = 0, i = 0, j = 0, k = 0, m = 0, nzeros = 0;
      19           0 :     LC3_FLOAT fac_ns_unq = 0, idx = 0, nsf1 = 0, nsf2 = 0;
      20             :     LC3_INT   zeroLines[MAX_LEN];
      21             : 
      22           0 :     switch (frame_dms)
      23             :     {
      24           0 :         case 25:
      25           0 :             nTransWidth = 1;
      26           0 :             startOffset = 6;
      27           0 :             break;
      28           0 :         case 50:
      29           0 :             nTransWidth = 1;
      30           0 :             startOffset = 12;
      31           0 :             break;
      32           0 :         case 75:
      33           0 :             nTransWidth = 2;
      34           0 :             startOffset = 18;
      35           0 :             break;
      36           0 :         case 100:
      37           0 :             nTransWidth = 3;
      38           0 :             startOffset = 24;
      39           0 :             break;
      40             :     }
      41             : 
      42           0 :     for (k = startOffset - nTransWidth; k < startOffset + nTransWidth; k++)
      43             :     {
      44           0 :         if (xq[k] != 0)
      45             :         {
      46           0 :             nzeros = -2 * nTransWidth - 1;
      47             :         }
      48           0 :         if (xq[k] == 0)
      49             :         {
      50           0 :             nzeros ++;
      51             :         }
      52             :     }
      53           0 :     for (k = startOffset; k < BW_cutoff_idx - nTransWidth; k++)
      54             :     {
      55           0 :         if (xq[k + nTransWidth] != 0)
      56             :         {
      57           0 :             nzeros = -2 * nTransWidth - 1;
      58             :         }
      59           0 :         if (xq[k + nTransWidth] == 0)
      60             :         {
      61           0 :             nzeros ++;
      62             :         }
      63           0 :         if (nzeros >= 0)
      64             :         {
      65           0 :             zeroLines[j++] = k;
      66             :         }
      67             :     }
      68             : 
      69           0 :     for (k = BW_cutoff_idx - nTransWidth; k < BW_cutoff_idx; k++)
      70             :     {
      71           0 :         nzeros ++;
      72           0 :         if (nzeros >= 0)
      73             :         {
      74           0 :             zeroLines[j++] = k;
      75             :         }
      76             :     }
      77             : 
      78           0 :     if (j == 0) {
      79           0 :         fac_ns_unq = 0;
      80             :     }
      81             :     else
      82             :     {
      83           0 :         kZeroLines = j;
      84             : 
      85           0 :         fac_ns_unq = 0;
      86           0 :         for (j = 0; j < kZeroLines; j++) {
      87           0 :             fac_ns_unq += LC3_FABS(x[zeroLines[j]]);
      88             :         }
      89             : 
      90           0 :         fac_ns_unq /= (gg) * kZeroLines;
      91             : 
      92             : 
      93             : 
      94           0 :         if (kZeroLines > 1 && target_bytes <= 20 && frame_dms == 100) {
      95             : 
      96           0 :             j = 0, k = 0, nsf1 = 0, nsf2 = 0, sumZeroLines = 0;
      97             : 
      98           0 :             for (i = 0; i < kZeroLines; i++) {
      99           0 :                 sumZeroLines += zeroLines[i];
     100             :             }
     101             : 
     102           0 :             m = floor(sumZeroLines / kZeroLines);
     103             : 
     104           0 :             for (i = 0; i < kZeroLines; i++) {
     105           0 :                 if (zeroLines[i] <= m) {
     106           0 :                     j++;
     107           0 :                     nsf1 += LC3_FABS(x[zeroLines[i]]);
     108             :                 }
     109             :                 else {
     110           0 :                     nsf2 += LC3_FABS(x[zeroLines[i]]);
     111           0 :                     k++;
     112             :                 }
     113             :             }
     114             : 
     115           0 :             nsf1 /= (gg) * j;
     116           0 :             nsf2 /= (gg) * k; 
     117             : 
     118           0 :             fac_ns_unq = MIN(nsf1, nsf2);
     119             :         }
     120             : 
     121             :     }
     122             : 
     123           0 :     idx = round(8 - 16 * fac_ns_unq);
     124           0 :     idx = MIN(MAX(idx, 0), 7);
     125             : 
     126           0 :     *fac_ns_idx = idx;
     127           0 : }

Generated by: LCOV version 1.14