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

          Line data    Source code
       1             : /*====================================================================================
       2             :     EVS Codec 3GPP TS26.452 Aug 12, 2021. Version 16.3.0
       3             :   ====================================================================================*/
       4             : #include <stdint.h>
       5             : #include "options.h" /* Compilation switches                   */
       6             : #include "prot_fx.h" /* Function prototypes                    */
       7             : #include "ivas_prot_fx.h"
       8             : 
       9             : /*--------------------------------------------------------------------------*
      10             :  * hq_classifier_dec()
      11             :  *
      12             :  * HQ mode selector (decision_matrix)
      13             :  *--------------------------------------------------------------------------*/
      14             : 
      15        7331 : Word16 ivas_hq_classifier_dec_fx(                          /* o  : Consumed bits                   Q0 */
      16             :                                   Decoder_State *st_fx,    /* i/o: decoder state structure */
      17             :                                   const Word32 core_brate, /* i  : Core bit rate                   Q0 */
      18             :                                   const Word16 length,     /* i  : Frame length                    Q0 */
      19             :                                   Word16 *is_transient,    /* o  : Transient flag                  Q0 */
      20             :                                   Word16 *hqswb_clas       /* o  : HQ class                        Q0 */
      21             : )
      22             : {
      23             :     Word16 bits;
      24             :     Word32 max_brate;
      25             : 
      26        7331 :     max_brate = HQ_32k; /* Q0 */
      27        7331 :     move32();
      28        7331 :     if ( st_fx->element_mode > EVS_MONO )
      29             :     {
      30        7331 :         max_brate = HQ_48k; /* Q0 */
      31        7331 :         move32();
      32             :     }
      33        7331 :     test();
      34        7331 :     test();
      35        7331 :     test();
      36        7331 :     IF( ( EQ_16( length, L_SPEC32k ) || EQ_16( length, L_SPEC48k ) ) && LE_32( core_brate, max_brate ) )
      37             :     {
      38        6613 :         *hqswb_clas = (Word16) get_next_indice_fx( st_fx, 2 ); /* Q0 */
      39        6613 :         move16();
      40        6613 :         bits = 2;
      41        6613 :         move16();
      42             :     }
      43         718 :     ELSE IF( EQ_16( length, L_SPEC16k_EXT ) || EQ_16( length, L_SPEC48k_EXT ) )
      44             :     {
      45         122 :         *hqswb_clas = HQ_NORMAL; /* Q0 */
      46         122 :         bits = 0;
      47         122 :         move16();
      48         122 :         move16();
      49             :     }
      50             :     ELSE
      51             :     {
      52         596 :         *hqswb_clas = get_next_indice_fx( st_fx, 1 ); /* Q0 */
      53         596 :         move16();
      54         596 :         bits = 1;
      55         596 :         move16();
      56             :     }
      57             : 
      58        7331 :     *is_transient = 0;
      59        7331 :     move16();
      60        7331 :     if ( EQ_16( *hqswb_clas, HQ_TRANSIENT ) )
      61             :     {
      62         477 :         *is_transient = 1; /* Q0 */
      63         477 :         move16();
      64             :     }
      65             : 
      66        7331 :     test();
      67        7331 :     IF( LE_32( st_fx->core_brate, HQ_32k ) && *hqswb_clas == HQ_NORMAL )
      68             :     {
      69        3298 :         IF( EQ_16( length, L_SPEC32k ) )
      70             :         {
      71         673 :             *hqswb_clas = HQ_GEN_SWB; /* Q0 */
      72         673 :             move16();
      73             :         }
      74        2625 :         ELSE IF( EQ_16( length, L_SPEC48k ) )
      75             :         {
      76        2070 :             *hqswb_clas = HQ_GEN_FB; /* Q0 */
      77        2070 :             move16();
      78             :         }
      79             :     }
      80             : 
      81        7331 :     return bits;
      82             : }
      83             : 
      84         397 : Word16 hq_classifier_dec_fx(                          /* o  : Consumed bits                   Q0 */
      85             :                              Decoder_State *st_fx,    /* i/o: decoder state structure */
      86             :                              const Word32 core_brate, /* i  : Core bit rate                   Q0 */
      87             :                              const Word16 length,     /* i  : Frame length                    Q0 */
      88             :                              Word16 *is_transient,    /* o  : Transient flag                  Q0 */
      89             :                              Word16 *hqswb_clas       /* o  : HQ class                        Q0 */
      90             : )
      91             : {
      92             :     Word16 bits;
      93             :     Word32 max_brate;
      94             : 
      95         397 :     max_brate = HQ_32k; /* Q0 */
      96         397 :     move32();
      97         397 :     if ( st_fx->element_mode > EVS_MONO )
      98             :     {
      99           0 :         max_brate = HQ_48k; /* Q0 */
     100           0 :         move32();
     101             :     }
     102         397 :     test();
     103         397 :     test();
     104         397 :     test();
     105         397 :     test();
     106         397 :     IF( ( EQ_16( length, L_SPEC32k ) || EQ_16( length, L_FRAME48k ) ) && LE_32( core_brate, max_brate ) )
     107             :     {
     108          66 :         *hqswb_clas = get_next_indice( st_fx, 2 ); /* Q0 */
     109          66 :         move16();
     110          66 :         bits = 2;
     111          66 :         move16();
     112             :     }
     113         331 :     ELSE IF( EQ_16( length, L_SPEC16k_EXT ) || EQ_16( length, L_SPEC48k_EXT ) )
     114             :     {
     115           0 :         *hqswb_clas = HQ_NORMAL; /* Q0 */
     116           0 :         bits = 0;
     117           0 :         move16();
     118           0 :         move16();
     119             :     }
     120             :     ELSE
     121             :     {
     122         331 :         *hqswb_clas = get_next_indice( st_fx, 1 ); /* Q0 */
     123         331 :         move16();
     124         331 :         bits = 1;
     125         331 :         move16();
     126             :     }
     127             : 
     128         397 :     *is_transient = 0;
     129         397 :     move16();
     130         397 :     if ( EQ_16( *hqswb_clas, HQ_TRANSIENT ) )
     131             :     {
     132          35 :         *is_transient = 1; /* Q0 */
     133          35 :         move16();
     134             :     }
     135             : 
     136         397 :     test();
     137         397 :     IF( LE_32( st_fx->core_brate, HQ_32k ) && *hqswb_clas == HQ_NORMAL )
     138             :     {
     139          46 :         IF( EQ_16( length, L_SPEC32k ) )
     140             :         {
     141          46 :             *hqswb_clas = HQ_GEN_SWB; /* Q0 */
     142          46 :             move16();
     143             :         }
     144           0 :         ELSE IF( EQ_16( length, L_FRAME48k ) )
     145             :         {
     146           0 :             *hqswb_clas = HQ_GEN_FB; /* Q0 */
     147           0 :             move16();
     148             :         }
     149             :     }
     150             : 
     151         397 :     return bits;
     152             : }

Generated by: LCOV version 1.14