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

          Line data    Source code
       1             : /*====================================================================================
       2             :     EVS Codec 3GPP TS26.452 Aug 12, 2021. Version 16.3.0
       3             :   ====================================================================================*/
       4             : 
       5             : #include <stdint.h>
       6             : #include "options.h"
       7             : //#include "prot_fx.h"
       8             : #include "prot_fx.h"     /* Function prototypes                    */
       9             : #include "prot_fx_enc.h" /* Function prototypes                    */
      10             : #include "vad_basop.h"
      11             : #include "basop_util.h"
      12             : 
      13        3100 : Word32 vad_Sqrt_l( /* o : output value,                          Q31 */
      14             :                    Word32 i_s32Val,
      15             :                    Word16 *io_s16Q )
      16             : {
      17             :     Word16 exp;
      18             :     Word32 result;
      19             : 
      20        3100 :     exp = sub( 31, *io_s16Q );
      21        3100 :     result = Sqrt32( i_s32Val, &exp );
      22        3100 :     *io_s16Q = sub( 31, exp );
      23        3100 :     move16();
      24             : 
      25        3100 :     return ( result );
      26             : }
      27             : 
      28      248000 : Word32 fft_vad_Sqrt_l( /* o : output value,                          Q31 */
      29             :                        Word32 i_s32Val,
      30             :                        Word16 i_s16Q,
      31             :                        Word16 *o_s16Q )
      32             : {
      33             :     Word16 exp;
      34             :     Word32 result;
      35             : 
      36      248000 :     exp = sub( 31, i_s16Q );
      37      248000 :     result = Sqrt32( i_s32Val, &exp );
      38      248000 :     *o_s16Q = sub( 31, exp );
      39      248000 :     move16();
      40             : 
      41      248000 :     return ( result );
      42             : }
      43             : 
      44       52739 : Word32 VAD_L_div( Word32 L_var1, Word32 L_var2, Word16 Q_L_var1, Word16 Q_L_var2, Word16 *Q_OUT )
      45             : {
      46             :     Word32 result;
      47             : 
      48       52739 :     result = L_deposit_h( BASOP_Util_Divide3232_Scale( L_var1, L_var2, Q_OUT ) );
      49       52739 :     move16();
      50       52739 :     *Q_OUT = add( sub( sub( 31, *Q_OUT ), Q_L_var2 ), Q_L_var1 );
      51       52739 :     return result;
      52             : }
      53             : 
      54       43400 : Word32 VAD_Log2( Word32 i_s32Val, Word16 i_s16Q )
      55             : {
      56             :     Word32 result;
      57             : 
      58             :     /* log10(x) = log2(x) * 1.0/log2(10), exponent LD_DATA_SCALE - 1 */
      59       43400 :     result = BASOP_Util_Log2( i_s32Val );
      60             : 
      61       43400 :     result = L_add( result, L_shl( L_deposit_l( sub( 31, i_s16Q ) ), 31 - LD_DATA_SCALE ) );
      62             : 
      63       43400 :     return result;
      64             : }
      65             : 
      66        3139 : T_VAD_EXP VAD_AddExp( T_VAD_EXP i_tExp1, T_VAD_EXP i_tExp2 )
      67             : {
      68             :     Word16 s16Shift;
      69             :     T_VAD_EXP tRtnVal;
      70             : 
      71        3139 :     if ( i_tExp1.s32Mantissa == 0 )
      72             :     {
      73           0 :         return i_tExp2;
      74             :     }
      75             : 
      76        3139 :     if ( i_tExp2.s32Mantissa == 0 )
      77             :     {
      78           0 :         return i_tExp1;
      79             :     }
      80        3139 :     s16Shift = sub( s_min( i_tExp1.s16Exp, i_tExp2.s16Exp ), 1 );
      81        3139 :     tRtnVal.s32Mantissa = L_add( L_shr( i_tExp2.s32Mantissa, sub( i_tExp2.s16Exp, s16Shift ) ), L_shr( i_tExp1.s32Mantissa, sub( i_tExp1.s16Exp, s16Shift ) ) );
      82        3139 :     tRtnVal.s16Exp = s16Shift;
      83        3139 :     move16();
      84             : 
      85        3139 :     s16Shift = norm_l( tRtnVal.s32Mantissa );
      86        3139 :     tRtnVal.s32Mantissa = L_shl( tRtnVal.s32Mantissa, s16Shift );
      87        3139 :     tRtnVal.s16Exp = add( tRtnVal.s16Exp, s16Shift );
      88             : 
      89        3139 :     return tRtnVal;
      90             : }
      91       99602 : Word32 VAD_L_ADD( Word32 s32Mantissa1, Word16 i_tExp1, Word32 s32Mantissa2, Word16 i_tExp2, Word16 *s16Exp )
      92             : {
      93             :     Word32 result;
      94             : 
      95       99602 :     result = BASOP_Util_Add_Mant32Exp( s32Mantissa1, sub( 31, i_tExp1 ), s32Mantissa2, sub( 31, i_tExp2 ), s16Exp );
      96             : 
      97       99602 :     move16();
      98       99602 :     *s16Exp = sub( 31, *s16Exp );
      99             : 
     100       99602 :     return result;
     101             : }
     102             : 
     103       37011 : Word16 VAD_L_CMP( Word32 s32Mantissa1, Word16 i_tExp1, Word32 s32Mantissa2, Word16 i_tExp2 )
     104             : {
     105             :     Word16 ret;
     106             : 
     107       37011 :     ret = BASOP_Util_Cmp_Mant32Exp( s32Mantissa1, sub( 31, i_tExp1 ), s32Mantissa2, sub( 31, i_tExp2 ) );
     108             : 
     109       37011 :     return ret;
     110             : }
     111             : 
     112        3100 : Word16 FixSqrt( Word32 i_s32Val, Word16 *io_s16Q )
     113             : {
     114             :     Word16 result, exp;
     115             : 
     116        3100 :     exp = sub( 31, *io_s16Q );
     117        3100 :     result = round_fx_sat( Sqrt32( i_s32Val, &exp ) );
     118        3100 :     move16();
     119        3100 :     *io_s16Q = sub( 15, exp );
     120             : 
     121        3100 :     return result;
     122             : }
     123             : 
     124        9300 : Word32 VAD_Pow( Word32 i_s32Base, Word32 i_s32Exp, Word16 i_s16BaseQ, Word16 i_s16ExpQ, Word16 *o_pOuQ )
     125             : {
     126             :     Word32 result;
     127        9300 :     result = BASOP_Util_fPow( i_s32Base, sub( 31, i_s16BaseQ ), i_s32Exp, sub( 31, i_s16ExpQ ), o_pOuQ );
     128        9300 :     move16();
     129        9300 :     *o_pOuQ = sub( 31, *o_pOuQ );
     130        9300 :     return result;
     131             : }
     132             : 
     133        9300 : Word32 VAD_Pow2( Word32 i_s32X, Word16 i_s16Q, Word16 *o_pOuQ )
     134             : {
     135             :     Word32 result;
     136        9300 :     result = BASOP_util_Pow2( i_s32X, sub( 31, i_s16Q ), o_pOuQ );
     137        9300 :     move16();
     138        9300 :     *o_pOuQ = sub( 31, *o_pOuQ );
     139             : 
     140        9300 :     return result;
     141             : }

Generated by: LCOV version 1.14