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

Generated by: LCOV version 1.14