LCOV - code coverage report
Current view: top level - lib_dec - hq_classifier_dec_fx.c (source / functions) Hit Total Coverage
Test: Coverage on main -- dec/rend @ 633e3f2e309758d10805ef21e0436356fe719b7a Lines: 66 75 88.0 %
Date: 2025-08-23 01:22:27 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        7432 : 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        7432 :     max_brate = HQ_32k; /* Q0 */
      27        7432 :     move32();
      28        7432 :     if ( st_fx->element_mode > EVS_MONO )
      29             :     {
      30        7432 :         max_brate = HQ_48k; /* Q0 */
      31        7432 :         move32();
      32             :     }
      33        7432 :     test();
      34        7432 :     test();
      35        7432 :     test();
      36        7432 :     IF( ( EQ_16( length, L_SPEC32k ) || EQ_16( length, L_SPEC48k ) ) && LE_32( core_brate, max_brate ) )
      37             :     {
      38        6704 :         *hqswb_clas = (Word16) get_next_indice_fx( st_fx, 2 ); /* Q0 */
      39        6704 :         move16();
      40        6704 :         bits = 2;
      41        6704 :         move16();
      42             :     }
      43         728 :     ELSE IF( EQ_16( length, L_SPEC16k_EXT ) || EQ_16( length, L_SPEC48k_EXT ) )
      44             :     {
      45         127 :         *hqswb_clas = HQ_NORMAL; /* Q0 */
      46         127 :         bits = 0;
      47         127 :         move16();
      48         127 :         move16();
      49             :     }
      50             :     ELSE
      51             :     {
      52         601 :         *hqswb_clas = get_next_indice_fx( st_fx, 1 ); /* Q0 */
      53         601 :         move16();
      54         601 :         bits = 1;
      55         601 :         move16();
      56             :     }
      57             : 
      58        7432 :     *is_transient = 0;
      59        7432 :     move16();
      60        7432 :     if ( EQ_16( *hqswb_clas, HQ_TRANSIENT ) )
      61             :     {
      62         488 :         *is_transient = 1; /* Q0 */
      63         488 :         move16();
      64             :     }
      65             : 
      66        7432 :     test();
      67        7432 :     IF( LE_32( st_fx->core_brate, HQ_32k ) && *hqswb_clas == HQ_NORMAL )
      68             :     {
      69        3366 :         IF( EQ_16( length, L_SPEC32k ) )
      70             :         {
      71         686 :             *hqswb_clas = HQ_GEN_SWB; /* Q0 */
      72         686 :             move16();
      73             :         }
      74        2680 :         ELSE IF( EQ_16( length, L_SPEC48k ) )
      75             :         {
      76        2115 :             *hqswb_clas = HQ_GEN_FB; /* Q0 */
      77        2115 :             move16();
      78             :         }
      79             :     }
      80             : 
      81        7432 :     return bits;
      82             : }
      83             : 
      84         406 : 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         406 :     max_brate = HQ_32k; /* Q0 */
      96         406 :     move32();
      97         406 :     if ( st_fx->element_mode > EVS_MONO )
      98             :     {
      99           0 :         max_brate = HQ_48k; /* Q0 */
     100           0 :         move32();
     101             :     }
     102         406 :     test();
     103         406 :     test();
     104         406 :     test();
     105         406 :     test();
     106         406 :     IF( ( EQ_16( length, L_SPEC32k ) || EQ_16( length, L_FRAME48k ) ) && LE_32( core_brate, max_brate ) )
     107             :     {
     108          75 :         *hqswb_clas = get_next_indice_fx( st_fx, 2 ); /* Q0 */
     109          75 :         move16();
     110          75 :         bits = 2;
     111          75 :         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_fx( st_fx, 1 ); /* Q0 */
     123         331 :         move16();
     124         331 :         bits = 1;
     125         331 :         move16();
     126             :     }
     127             : 
     128         406 :     *is_transient = 0;
     129         406 :     move16();
     130         406 :     if ( EQ_16( *hqswb_clas, HQ_TRANSIENT ) )
     131             :     {
     132          35 :         *is_transient = 1; /* Q0 */
     133          35 :         move16();
     134             :     }
     135             : 
     136         406 :     test();
     137         406 :     IF( LE_32( st_fx->core_brate, HQ_32k ) && *hqswb_clas == HQ_NORMAL )
     138             :     {
     139          50 :         IF( EQ_16( length, L_SPEC32k ) )
     140             :         {
     141          50 :             *hqswb_clas = HQ_GEN_SWB; /* Q0 */
     142          50 :             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         406 :     return bits;
     152             : }

Generated by: LCOV version 1.14