LCOV - code coverage report
Current view: top level - lib_lc3plus - imdct.c (source / functions) Hit Total Coverage
Test: Coverage on main -- short test vectors @ 6c9ddc4024a9c0e1ecb8f643f114a84a0e26ec6b Lines: 0 49 0.0 %
Date: 2025-05-23 08:37:30 Functions: 0 2 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             : /* Function expects already flipped window */
      15           0 : void ProcessingIMDCT_fl(LC3_FLOAT* y, LC3_INT yLen, const LC3_FLOAT* win, LC3_INT winLen, LC3_INT last_zeros, LC3_FLOAT* mem, LC3_FLOAT* x, Dct4* dct)
      16             : {
      17             :     LC3_FLOAT x_tda[MAX_LEN], x_ov[2 * MAX_LEN];
      18             :     LC3_INT   i, j;
      19             : 
      20             :     /* Flip imdct window up to down */
      21           0 :     i = winLen - 1;
      22           0 :     j = 0;
      23             : 
      24           0 :     dct4_apply(dct, y, x_tda);
      25             : 
      26           0 :     move_float(x_ov, &x_tda[yLen / 2], yLen / 2);
      27             : 
      28           0 :     j = yLen / 2;
      29           0 :     for (i = 0; i < yLen / 2; i++) {
      30           0 :         x_ov[j] = -x_tda[yLen - 1 - i];
      31           0 :         j++;
      32             :     }
      33             : 
      34           0 :     j = yLen;
      35           0 :     for (i = 0; i < yLen / 2; i++) {
      36           0 :         x_ov[j] = -x_tda[yLen / 2 - 1 - i];
      37           0 :         j++;
      38             :     }
      39             : 
      40           0 :     j = yLen + yLen / 2;
      41           0 :     for (i = 0; i < yLen / 2; i++) {
      42           0 :         x_ov[j] = -x_tda[i];
      43           0 :         j++;
      44             :     }
      45             : 
      46           0 :     for (i = 0; i < winLen; i++) {
      47           0 :         x_ov[i] = x_ov[i] * win[winLen - 1 - i];
      48             :     }
      49             : 
      50             :     /* Buffer update */
      51           0 :     j = 0;
      52           0 :     for (i = last_zeros; i < yLen; i++) {
      53           0 :         x_ov[i] = x_ov[i] + mem[j];
      54           0 :         j++;
      55             :     }
      56             : 
      57           0 :     move_float(&x[0], &x_ov[last_zeros], yLen);
      58             : 
      59           0 :     move_float(&mem[0], &x_ov[yLen + last_zeros], (winLen - (yLen + last_zeros)));
      60           0 : }
      61             : 
      62           0 : void ProcessingITDA_WIN_OLA_fl(LC3_FLOAT* x_tda, LC3_INT32 yLen, const LC3_FLOAT* win, LC3_INT32 winLen, LC3_INT32 last_zeros, LC3_FLOAT* mem, LC3_FLOAT* x)
      63             : {
      64             :     LC3_FLOAT x_ov[2 * MAX_LEN];
      65             :     LC3_INT32 i, j;
      66             : 
      67           0 :     move_float(x_ov, &x_tda[yLen / 2], yLen / 2);
      68             : 
      69           0 :     j = yLen / 2;
      70           0 :     for (i = 0; i < yLen / 2; i++) {
      71           0 :         x_ov[j] = -x_tda[yLen - 1 - i];
      72           0 :         j++;
      73             :     }
      74             : 
      75           0 :     j = yLen;
      76           0 :     for (i = 0; i < yLen / 2; i++) {
      77           0 :         x_ov[j] = -x_tda[yLen / 2 - 1 - i];
      78           0 :         j++;
      79             :     }
      80             : 
      81           0 :     j = yLen + yLen / 2;
      82           0 :     for (i = 0; i < yLen / 2; i++) {
      83           0 :         x_ov[j] = -x_tda[i];
      84           0 :         j++;
      85             :     }
      86             : 
      87           0 :     for (i = 0; i < winLen; i++) {
      88           0 :         x_ov[i] = x_ov[i] * win[winLen - 1 - i];
      89             :     }
      90             : 
      91             :     /* Buffer update */
      92           0 :     j = 0;
      93             : 
      94           0 :     for (i = last_zeros; i < yLen; i++) {
      95           0 :         x[j] = x_ov[i] + mem[j];
      96           0 :         j++;
      97             :     }
      98             : 
      99           0 :     move_float(&x[j], &x_ov[last_zeros+j], yLen-j);
     100             : 
     101           0 :     move_float(&mem[0], &x_ov[yLen + last_zeros], (winLen - (yLen + last_zeros)));
     102           0 : }

Generated by: LCOV version 1.14