LCOV - code coverage report
Current view: top level - lib_dec - tns_base_dec_fx.c (source / functions) Hit Total Coverage
Test: Coverage on main enc/dec/rend @ 3b2f07138c61dcf997bbf4165d0882f794b2995f Lines: 50 56 89.3 %
Date: 2025-05-03 01:55:50 Functions: 4 4 100.0 %

          Line data    Source code
       1             : /*====================================================================================
       2             :     EVS Codec 3GPP TS26.452 Aug 12, 2021. Version 16.3.0
       3             :   ====================================================================================*/
       4             : 
       5             : 
       6             : #include <stdint.h>
       7             : #include "options.h"
       8             : #include "prot_fx.h"
       9             : #include <memory.h>
      10             : #include "rom_com.h"
      11             : 
      12             : /** Linear prediction analysis/synthesis filter definition.
      13             :  * @param order filter order.
      14             :  * @param parCoeff filter (PARCOR) coefficients.
      15             :  * @param state state of the filter. Must be at least of 'order' size.
      16             :  * @param x the current input value.
      17             :  * @return the output of the filter.
      18             :  */
      19             : typedef Word32 ( *TLinearPredictionFilter )( Word16 order, Word16 const parCoeff[], Word32 *state, Word32 x );
      20             : 
      21             : /********************************/
      22             : /*      Interface functions     */
      23             : /********************************/
      24             : /*---------------------------------------------------------------------*
      25             :  * ReadTnsData()
      26             :  *
      27             :  *
      28             :  *---------------------------------------------------------------------*/
      29             : 
      30             : Word16
      31         374 : ReadTnsData(
      32             :     STnsConfig const *pTnsConfig,
      33             :     Decoder_State *st,
      34             :     Word16 *pnBits, /*Q0*/
      35             :     Word16 *stream, /*Q0*/
      36             :     Word16 *pnSize  /*Q0*/
      37             : )
      38             : {
      39             :     Word16 start_bit_pos;
      40             : 
      41             : 
      42         374 :     move16();
      43         374 :     start_bit_pos = st->next_bit_pos;
      44             : 
      45         374 :     IF( GT_16( pTnsConfig->nMaxFilters, 1 ) )
      46             :     {
      47             :         {
      48             : 
      49           0 :             IF( LT_16( pTnsConfig->iFilterBorders[0], 512 ) )
      50             :             {
      51           0 :                 ReadFromBitstream_fx( &tnsEnabledSWBTCX10BitMap, 1, st, &stream, pnSize );
      52             :             }
      53             :             ELSE
      54             :             {
      55           0 :                 ReadFromBitstream_fx( &tnsEnabledSWBTCX20BitMap, 1, st, &stream, pnSize );
      56             :             }
      57             :         }
      58             :     }
      59             :     ELSE
      60             :     {
      61         374 :         ReadFromBitstream_fx( &tnsEnabledWBTCX20BitMap, 1, st, &stream, pnSize );
      62             :     }
      63             : 
      64         374 :     move16();
      65         374 :     *pnBits = sub( st->next_bit_pos, start_bit_pos );
      66             : 
      67         374 :     return TNS_NO_ERROR;
      68             : }
      69             : 
      70      719597 : void ReadTnsData_ivas_fx(
      71             :     STnsConfig const *pTnsConfig,
      72             :     Decoder_State *st,
      73             :     Word16 *pnBits, /*Q0*/
      74             :     Word16 *stream, /*Q0*/
      75             :     Word16 *pnSize  /*Q0*/
      76             : )
      77             : {
      78             :     Word16 start_bit_pos;
      79             : 
      80      719597 :     move16();
      81      719597 :     start_bit_pos = st->next_bit_pos;
      82             : 
      83      719597 :     IF( GT_16( pTnsConfig->nMaxFilters, 1 ) )
      84             :     {
      85      630130 :         IF( pTnsConfig->allowTnsOnWhite )
      86             :         {
      87      520217 :             IF( LT_16( pTnsConfig->iFilterBorders[0], 512 ) )
      88             :             {
      89       24897 :                 ReadFromBitstream_fx( &tnsEnabledOnWhiteSWBTCX10BitMap, 1, st, &stream, pnSize );
      90             :             }
      91             :             ELSE
      92             :             {
      93      495320 :                 ReadFromBitstream_fx( &tnsEnabledOnWhiteSWBTCX20BitMap, 1, st, &stream, pnSize );
      94             :             }
      95             :         }
      96             :         ELSE
      97             :         {
      98             : 
      99      109913 :             IF( LT_16( pTnsConfig->iFilterBorders[0], 512 ) )
     100             :             {
     101        3884 :                 ReadFromBitstream_fx( &tnsEnabledSWBTCX10BitMap, 1, st, &stream, pnSize );
     102             :             }
     103             :             ELSE
     104             :             {
     105      106029 :                 ReadFromBitstream_fx( &tnsEnabledSWBTCX20BitMap, 1, st, &stream, pnSize );
     106             :             }
     107             :         }
     108             :     }
     109             :     ELSE
     110             :     {
     111       89467 :         ReadFromBitstream_fx( &tnsEnabledWBTCX20BitMap, 1, st, &stream, pnSize );
     112             :     }
     113             : 
     114      719597 :     move16();
     115      719597 :     *pnBits = sub( st->next_bit_pos, start_bit_pos );
     116             : 
     117      719597 :     return;
     118             : }
     119             : 
     120             : /*---------------------------------------------------------------------*
     121             :  * DecodeTnsData()
     122             :  *
     123             :  *
     124             :  *---------------------------------------------------------------------*/
     125             : 
     126         374 : Word16 DecodeTnsData(
     127             :     STnsConfig const *pTnsConfig,
     128             :     Word16 const *stream, /*Q0*/
     129             :     Word16 *pnSize,       /*Q0*/
     130             :     STnsData *pTnsData )
     131             : {
     132             :     Word16 result;
     133             : 
     134             : 
     135         374 :     ResetTnsData( pTnsData );
     136             : 
     137         374 :     IF( GT_16( pTnsConfig->nMaxFilters, 1 ) )
     138             :     {
     139             :         {
     140           0 :             IF( LT_16( pTnsConfig->iFilterBorders[0], 512 ) )
     141             :             {
     142           0 :                 SetParameters( &tnsEnabledSWBTCX10BitMap, 1, pTnsData, &stream, pnSize );
     143             :             }
     144             :             ELSE
     145             :             {
     146           0 :                 SetParameters( &tnsEnabledSWBTCX20BitMap, 1, pTnsData, &stream, pnSize );
     147             :             }
     148             :         }
     149             :     }
     150             :     ELSE
     151             :     {
     152         374 :         SetParameters( &tnsEnabledWBTCX20BitMap, 1, pTnsData, &stream, pnSize );
     153             :     }
     154             : 
     155         374 :     move16();
     156         374 :     result = FALSE;
     157         374 :     if ( pTnsData->nFilters > 0 )
     158             :     {
     159           1 :         move16();
     160           1 :         result = TRUE;
     161             :     }
     162             : 
     163             : 
     164         374 :     return result;
     165             : }
     166             : 
     167      721991 : Word16 DecodeTnsData_ivas_fx(
     168             :     STnsConfig const *pTnsConfig,
     169             :     Word16 const *stream, /*Q0*/
     170             :     Word16 *pnSize,       /*Q0*/
     171             :     STnsData *pTnsData )
     172             : {
     173             :     Word16 result;
     174             : 
     175      721991 :     ResetTnsData( pTnsData );
     176             : 
     177      721991 :     IF( GT_16( pTnsConfig->nMaxFilters, 1 ) )
     178             :     {
     179             : 
     180      632464 :         IF( pTnsConfig->allowTnsOnWhite )
     181             :         {
     182      522551 :             IF( LT_16( pTnsConfig->iFilterBorders[0], 512 ) )
     183             :             {
     184       25354 :                 SetParameters_fx( &tnsEnabledOnWhiteSWBTCX10BitMap, 1, pTnsData, &stream, pnSize );
     185             :             }
     186             :             ELSE
     187             :             {
     188      497197 :                 SetParameters_fx( &tnsEnabledOnWhiteSWBTCX20BitMap, 1, pTnsData, &stream, pnSize );
     189             :             }
     190             :         }
     191             :         ELSE
     192             :         {
     193      109913 :             IF( LT_16( pTnsConfig->iFilterBorders[0], 512 ) )
     194             :             {
     195        3884 :                 SetParameters_fx( &tnsEnabledSWBTCX10BitMap, 1, pTnsData, &stream, pnSize );
     196             :             }
     197             :             ELSE
     198             :             {
     199      106029 :                 SetParameters_fx( &tnsEnabledSWBTCX20BitMap, 1, pTnsData, &stream, pnSize );
     200             :             }
     201             :         }
     202             :     }
     203             :     ELSE
     204             :     {
     205       89527 :         SetParameters_fx( &tnsEnabledWBTCX20BitMap, 1, pTnsData, &stream, pnSize );
     206             :     }
     207             : 
     208      721991 :     move16();
     209      721991 :     result = FALSE;
     210      721991 :     if ( pTnsData->nFilters > 0 )
     211             :     {
     212       81009 :         move16();
     213       81009 :         result = TRUE;
     214             :     }
     215             : 
     216             : 
     217      721991 :     return result;
     218             : }

Generated by: LCOV version 1.14