LCOV - code coverage report
Current view: top level - lib_com - hq_conf_fx.c (source / functions) Hit Total Coverage
Test: Coverage on main enc/dec/rend @ 3b2f07138c61dcf997bbf4165d0882f794b2995f Lines: 203 328 61.9 %
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             : 
       5             : #include <stdint.h>
       6             : #include "options.h"
       7             : #include "cnst.h"    /* Audio core constants */
       8             : #include "rom_com.h" /* Static table prototypes                */
       9             : #include "prot_fx.h" /* Function prototypes                    */
      10             : #include "ivas_prot_fx.h"
      11             : 
      12             : /*--------------------------------------------------------------------------*
      13             :  * hq_configure()
      14             :  *
      15             :  * Configuration routine for HQ mode
      16             :  *--------------------------------------------------------------------------*/
      17             : 
      18        7331 : void ivas_hq_configure_fx(
      19             :     const Word16 length,       /* i  : Frame length                      Q0 */
      20             :     const Word16 hqswb_clas,   /* i  : HQ SWB class                      Q0 */
      21             :     const Word32 core_brate,   /* i  : Codec bitrate                     Q0 */
      22             :     Word16 *num_sfm,           /* o  : Total number of subbands          Q0 */
      23             :     Word16 *nb_sfm,            /* o  : Total number of coded bands       Q0 */
      24             :     Word16 *start_norm,        /* o  : First norm to be SDE encoded      Q0 */
      25             :     Word16 *num_env_bands,     /* o  : Number coded envelope bands       Q0 */
      26             :     Word16 *numnrmibits,       /* o  : Number of bits in fall-back norm encoding  Q0 */
      27             :     Word16 *hq_generic_offset, /* o  : Freq offset for HQ GENERIC        Q0 */
      28             :     Word16 *sfmsize,           /* o  : Subband bandwidths                Q0 */
      29             :     Word16 *sfm_start,         /* o  : Subband start coefficients        Q0 */
      30             :     Word16 *sfm_end            /* o  : Subband end coefficients          Q0 */
      31             : )
      32             : {
      33             :     const Word16 *p_sfmsize;
      34             :     const Word16 *p_sfm_start;
      35             :     const Word16 *p_sfm_end;
      36             :     Word16 i, bw_ext;
      37             : 
      38        7331 :     bw_ext = 0;
      39        7331 :     move16();
      40             : 
      41        7331 :     *start_norm = 0;
      42        7331 :     move16();
      43             : 
      44        7331 :     IF( EQ_16( length, L_SPEC48k ) )
      45             :     {
      46        5528 :         IF( EQ_16( hqswb_clas, HQ_GEN_FB ) )
      47             :         {
      48        2070 :             *num_sfm = NB_SFM;
      49        2070 :             move16();
      50        2070 :             p_sfmsize = band_len_HQ;     /* Q0 */
      51        2070 :             p_sfm_start = band_start_HQ; /* Q0 */
      52        2070 :             p_sfm_end = band_end_HQ;     /* Q0 */
      53             : 
      54        2070 :             IF( GE_32( core_brate, HQ_32k ) )
      55             :             {
      56           0 :                 *hq_generic_offset = HQ_GENERIC_FOFFSET_32K;
      57           0 :                 move16();
      58           0 :                 *num_env_bands = SFM_N_STA_10k;
      59           0 :                 move16();
      60             :             }
      61             :             ELSE /*IF(EQ_32(core_brate, HQ_16k40) || EQ_32(core_brate, HQ_24k40))*/
      62             :             {
      63        2070 :                 *hq_generic_offset = HQ_GENERIC_FOFFSET_24K4;
      64        2070 :                 move16();
      65        2070 :                 *num_env_bands = SFM_N_STA_8k;
      66        2070 :                 move16();
      67             :             }
      68        2070 :             *nb_sfm = *num_sfm;
      69        2070 :             move16();
      70             :         }
      71             :         ELSE
      72             :         {
      73        3458 :             IF( EQ_16( hqswb_clas, HQ_HARMONIC ) )
      74             :             {
      75         635 :                 *num_sfm = SFM_N_HARM_FB;
      76         635 :                 move16();
      77         635 :                 *nb_sfm = SFM_N_HARM_FB;
      78         635 :                 move16();
      79         635 :                 *num_env_bands = SFM_N_HARM_FB;
      80         635 :                 move16();
      81             : 
      82         635 :                 p_sfmsize = band_len_harm;     /* Q0 */
      83         635 :                 p_sfm_start = band_start_harm; /* Q0 */
      84         635 :                 p_sfm_end = band_end_harm;     /* Q0 */
      85             :             }
      86        2823 :             ELSE IF( EQ_16( hqswb_clas, HQ_HVQ ) )
      87             :             {
      88        1051 :                 IF( LT_32( core_brate, HQ_BWE_CROSSOVER_BRATE ) )
      89             :                 {
      90         536 :                     *num_sfm = SFM_N_HARM_FB;
      91         536 :                     move16();
      92         536 :                     *nb_sfm = HVQ_THRES_SFM_24k;
      93         536 :                     move16();
      94         536 :                     *num_env_bands = sub( *num_sfm, *nb_sfm ); /* Q0 */
      95         536 :                     move16();
      96         536 :                     *start_norm = HVQ_THRES_SFM_24k;
      97         536 :                     move16();
      98             :                 }
      99             :                 ELSE
     100             :                 {
     101         515 :                     *num_sfm = SFM_N_HARM_FB;
     102         515 :                     move16();
     103         515 :                     *nb_sfm = HVQ_THRES_SFM_32k;
     104         515 :                     move16();
     105         515 :                     *num_env_bands = sub( *num_sfm, *nb_sfm ); /* Q0 */
     106         515 :                     move16();
     107         515 :                     *start_norm = HVQ_THRES_SFM_32k;
     108         515 :                     move16();
     109             :                 }
     110        1051 :                 p_sfmsize = band_len_harm;     /* Q0 */
     111        1051 :                 p_sfm_start = band_start_harm; /* Q0 */
     112        1051 :                 p_sfm_end = band_end_harm;     /* Q0 */
     113             :             }
     114             :             ELSE
     115             :             {
     116        1772 :                 *num_sfm = NB_SFM;
     117        1772 :                 move16();
     118        1772 :                 *nb_sfm = *num_sfm; /* Q0 */
     119        1772 :                 move16();
     120        1772 :                 *num_env_bands = NB_SFM;
     121        1772 :                 move16();
     122             : 
     123        1772 :                 p_sfmsize = band_len_HQ;     /* Q0 */
     124        1772 :                 p_sfm_start = band_start_HQ; /* Q0 */
     125        1772 :                 p_sfm_end = band_end_HQ;     /* Q0 */
     126             :             }
     127             :         }
     128             :     }
     129        1803 :     ELSE IF( EQ_16( length, L_SPEC32k ) )
     130             :     {
     131        1085 :         IF( EQ_16( hqswb_clas, HQ_HARMONIC ) )
     132             :         {
     133          73 :             *num_sfm = SFM_N_HARM;
     134          73 :             move16();
     135          73 :             *nb_sfm = SFM_N_HARM;
     136          73 :             move16();
     137          73 :             *num_env_bands = SFM_N_HARM;
     138          73 :             move16();
     139             : 
     140          73 :             p_sfmsize = band_len_harm;     /* Q0 */
     141          73 :             p_sfm_start = band_start_harm; /* Q0 */
     142          73 :             p_sfm_end = band_end_harm;     /* Q0 */
     143             :         }
     144        1012 :         ELSE IF( EQ_16( hqswb_clas, HQ_HVQ ) )
     145             :         {
     146         178 :             IF( LT_32( core_brate, HQ_BWE_CROSSOVER_BRATE ) )
     147             :             {
     148         172 :                 *num_sfm = SFM_N_HARM;
     149         172 :                 move16();
     150         172 :                 *nb_sfm = HVQ_THRES_SFM_24k;
     151         172 :                 move16();
     152         172 :                 *num_env_bands = sub( *num_sfm, *nb_sfm ); /* Q0 */
     153         172 :                 move16();
     154             : 
     155         172 :                 *start_norm = HVQ_THRES_SFM_24k;
     156         172 :                 move16();
     157             :             }
     158             :             ELSE
     159             :             {
     160           6 :                 *num_sfm = SFM_N_HARM;
     161           6 :                 move16();
     162           6 :                 *nb_sfm = HVQ_THRES_SFM_32k;
     163           6 :                 move16();
     164           6 :                 *num_env_bands = sub( *num_sfm, *nb_sfm ); /* Q0 */
     165           6 :                 move16();
     166             : 
     167           6 :                 *start_norm = HVQ_THRES_SFM_32k;
     168           6 :                 move16();
     169             :             }
     170         178 :             p_sfmsize = band_len_harm;
     171         178 :             p_sfm_start = band_start_harm;
     172         178 :             p_sfm_end = band_end_harm;
     173             :         }
     174         834 :         ELSE IF( EQ_16( hqswb_clas, HQ_GEN_SWB ) )
     175             :         {
     176         673 :             *num_sfm = SFM_N_SWB;
     177         673 :             move16();
     178         673 :             p_sfmsize = band_len_HQ;     /* Q0 */
     179         673 :             p_sfm_start = band_start_HQ; /* Q0 */
     180         673 :             p_sfm_end = band_end_HQ;     /* Q0 */
     181             : 
     182         673 :             IF( GE_32( core_brate, HQ_32k ) )
     183             :             {
     184           0 :                 *hq_generic_offset = HQ_GENERIC_FOFFSET_32K;
     185           0 :                 move16();
     186           0 :                 *num_env_bands = SFM_N_STA_10k;
     187           0 :                 move16();
     188             :             }
     189             :             ELSE /*if( EQ_32(core_brate, HQ_24k40))*/
     190             :             {
     191         673 :                 *hq_generic_offset = HQ_GENERIC_FOFFSET_24K4;
     192         673 :                 move16();
     193         673 :                 *num_env_bands = SFM_N_STA_8k;
     194         673 :                 move16();
     195             :             }
     196             : 
     197         673 :             *nb_sfm = *num_sfm;
     198         673 :             move16();
     199             :         }
     200             :         ELSE
     201             :         {
     202             :             /* HQ_NORMAL and HQ_TRANSIENT */
     203         161 :             *num_sfm = SFM_N_SWB;
     204         161 :             move16();
     205         161 :             *nb_sfm = *num_sfm; /* Q0 */
     206         161 :             move16();
     207         161 :             *num_env_bands = SFM_N_SWB;
     208         161 :             move16();
     209             : 
     210         161 :             p_sfmsize = band_len_HQ;     /* Q0 */
     211         161 :             p_sfm_start = band_start_HQ; /* Q0 */
     212         161 :             p_sfm_end = band_end_HQ;     /* Q0 */
     213             :         }
     214             :     }
     215         718 :     ELSE IF( EQ_16( length, L_SPEC48k_EXT ) )
     216             :     {
     217          89 :         bw_ext = 1;
     218          89 :         move16();
     219          89 :         p_sfmsize = band_len_HQ;     /* Q0 */
     220          89 :         p_sfm_start = band_start_HQ; /* Q0 */
     221          89 :         p_sfm_end = band_end_HQ;     /* Q0 */
     222          89 :         *num_sfm = NB_SFM;
     223          89 :         move16();
     224             :     }
     225         629 :     ELSE IF( EQ_16( length, L_SPEC16k_EXT ) )
     226             :     {
     227          33 :         bw_ext = 1;
     228          33 :         move16();
     229          33 :         p_sfmsize = band_len_wb;     /* Q0 */
     230          33 :         p_sfm_start = band_start_wb; /* Q0 */
     231          33 :         p_sfm_end = band_end_wb;     /* Q0 */
     232          33 :         *num_sfm = SFM_N_WB;
     233          33 :         move16();
     234             :     }
     235             :     ELSE
     236             :     {
     237         596 :         *num_sfm = SFM_N_WB;
     238         596 :         move16();
     239         596 :         *nb_sfm = *num_sfm; /* Q0 */
     240         596 :         move16();
     241         596 :         *num_env_bands = SFM_N_WB;
     242         596 :         move16();
     243             : 
     244         596 :         p_sfmsize = band_len_wb;     /* Q0 */
     245         596 :         p_sfm_start = band_start_wb; /* Q0 */
     246         596 :         p_sfm_end = band_end_wb;     /* Q0 */
     247             :     }
     248        7331 :     IF( bw_ext )
     249             :     {
     250        4896 :         FOR( i = 0; i < *num_sfm; i++ )
     251             :         {
     252             :             /*sfmsize[i] = (int16_t)(1.25f * p_sfmsize[i]);*/
     253        4774 :             sfmsize[i] = mult_r( shl( p_sfmsize[i], 1 ), 20480 /* 1.25 in Q14 */ ); /* Q0 */
     254        4774 :             move16();
     255             :             /*sfm_start[i] = (int16_t)(1.25f * p_sfm_start[i]);*/
     256        4774 :             sfm_start[i] = mult_r( shl( p_sfm_start[i], 1 ), 20480 /* 1.25 in Q14 */ ); /* Q0 */
     257        4774 :             move16();
     258             :             /*sfm_end[i] = (int16_t)(1.25f * p_sfm_end[i]);*/
     259        4774 :             sfm_end[i] = mult_r( shl( p_sfm_end[i], 1 ), 20480 /* 1.25 in Q14 */ ); /* Q0 */
     260        4774 :             move16();
     261             :         }
     262         122 :         *nb_sfm = *num_sfm;        /* Q0 */
     263         122 :         *num_env_bands = *num_sfm; /* Q0 */
     264         122 :         move16();
     265         122 :         move16();
     266             :     }
     267             :     ELSE
     268             :     {
     269        7209 :         Copy( p_sfmsize, sfmsize, *num_sfm );
     270        7209 :         Copy( p_sfm_start, sfm_start, *num_sfm );
     271        7209 :         Copy( p_sfm_end, sfm_end, *num_sfm );
     272             :     }
     273             : 
     274        7331 :     *numnrmibits = extract_l( L_mult0( sub( *num_env_bands, 1 ), NORMI_BITS ) );
     275        7331 :     move16();
     276             : 
     277        7331 :     return;
     278             : }
     279             : 
     280         767 : void hq_configure_evs_fx(
     281             :     const Word16 length,       /* i  : Frame length                      Q0 */
     282             :     const Word16 hqswb_clas,   /* i  : HQ SWB class                      Q0 */
     283             :     const Word32 core_brate,   /* i  : Codec bitrate                     Q0 */
     284             :     Word16 *num_sfm,           /* o  : Total number of subbands          Q0 */
     285             :     Word16 *nb_sfm,            /* o  : Total number of coded bands       Q0 */
     286             :     Word16 *start_norm,        /* o  : First norm to be SDE encoded      Q0 */
     287             :     Word16 *num_env_bands,     /* o  : Number coded envelope bands       Q0 */
     288             :     Word16 *numnrmibits,       /* o  : Number of bits in fall-back norm encoding  Q0 */
     289             :     Word16 *hq_generic_offset, /* o  : Freq offset for HQ GENERIC        Q0 */
     290             :     Word16 *sfmsize,           /* o  : Subband bandwidths                Q0 */
     291             :     Word16 *sfm_start,         /* o  : Subband start coefficients        Q0 */
     292             :     Word16 *sfm_end            /* o  : Subband end coefficients          Q0 */
     293             : )
     294             : {
     295             :     const Word16 *p_sfmsize;
     296             :     const Word16 *p_sfm_start;
     297             :     const Word16 *p_sfm_end;
     298             :     Word16 i, bw_ext;
     299             : 
     300         767 :     bw_ext = 0;
     301         767 :     move16();
     302             : 
     303         767 :     *start_norm = 0;
     304         767 :     move16();
     305             : 
     306         767 :     IF( EQ_16( length, L_FRAME48k ) ) /*tbv SOLVED_COMP_ENC_DEC*/
     307             :     {
     308           0 :         IF( EQ_16( hqswb_clas, HQ_GEN_FB ) )
     309             :         {
     310           0 :             *num_sfm = NB_SFM;
     311           0 :             move16();
     312           0 :             p_sfmsize = band_len_HQ;     /* Q0 */
     313           0 :             p_sfm_start = band_start_HQ; /* Q0 */
     314           0 :             p_sfm_end = band_end_HQ;     /* Q0 */
     315             : 
     316           0 :             IF( GE_32( core_brate, HQ_32k ) )
     317             :             {
     318           0 :                 *hq_generic_offset = HQ_GENERIC_FOFFSET_32K;
     319           0 :                 move16();
     320           0 :                 *num_env_bands = SFM_N_STA_10k;
     321           0 :                 move16();
     322             :             }
     323             :             ELSE /*IF(EQ_32(core_brate, HQ_16k40) || EQ_32(core_brate, HQ_24k40))*/
     324             :             {
     325           0 :                 *hq_generic_offset = HQ_GENERIC_FOFFSET_24K4;
     326           0 :                 *num_env_bands = SFM_N_STA_8k;
     327           0 :                 move16();
     328           0 :                 move16();
     329             :             }
     330           0 :             *nb_sfm = *num_sfm; /* Q0 */
     331           0 :             move16();
     332             :         }
     333             :         ELSE
     334             :         {
     335           0 :             IF( EQ_16( hqswb_clas, HQ_HARMONIC ) )
     336             :             {
     337           0 :                 *num_sfm = SFM_N_HARM_FB;
     338           0 :                 move16();
     339           0 :                 *nb_sfm = SFM_N_HARM_FB;
     340           0 :                 move16();
     341           0 :                 *num_env_bands = SFM_N_HARM_FB;
     342           0 :                 move16();
     343             : 
     344           0 :                 p_sfmsize = band_len_harm;     /* Q0 */
     345           0 :                 p_sfm_start = band_start_harm; /* Q0 */
     346           0 :                 p_sfm_end = band_end_harm;     /* Q0 */
     347             :             }
     348           0 :             ELSE IF( EQ_16( hqswb_clas, HQ_HVQ ) )
     349             :             {
     350           0 :                 IF( LT_32( core_brate, HQ_BWE_CROSSOVER_BRATE ) )
     351             :                 {
     352           0 :                     *num_sfm = SFM_N_HARM_FB;
     353           0 :                     move16();
     354           0 :                     *nb_sfm = HVQ_THRES_SFM_24k;
     355           0 :                     move16();
     356           0 :                     *num_env_bands = sub( *num_sfm, *nb_sfm ); /* Q0 */
     357           0 :                     move16();
     358           0 :                     *start_norm = HVQ_THRES_SFM_24k;
     359           0 :                     move16();
     360             :                 }
     361             :                 ELSE
     362             :                 {
     363           0 :                     *num_sfm = SFM_N_HARM_FB;
     364           0 :                     move16();
     365           0 :                     *nb_sfm = HVQ_THRES_SFM_32k;
     366           0 :                     move16();
     367           0 :                     *num_env_bands = sub( *num_sfm, *nb_sfm ); /* Q0 */
     368           0 :                     move16();
     369           0 :                     *start_norm = HVQ_THRES_SFM_32k;
     370           0 :                     move16();
     371             :                 }
     372           0 :                 p_sfmsize = band_len_harm;     /* Q0 */
     373           0 :                 p_sfm_start = band_start_harm; /* Q0 */
     374           0 :                 p_sfm_end = band_end_harm;     /* Q0 */
     375             :             }
     376             :             ELSE
     377             :             {
     378           0 :                 *num_sfm = NB_SFM;
     379           0 :                 move16();
     380           0 :                 *nb_sfm = *num_sfm; /* Q0 */
     381           0 :                 move16();
     382           0 :                 *num_env_bands = NB_SFM;
     383           0 :                 move16();
     384             : 
     385           0 :                 p_sfmsize = band_len_HQ;     /* Q0 */
     386           0 :                 p_sfm_start = band_start_HQ; /* Q0 */
     387           0 :                 p_sfm_end = band_end_HQ;     /* Q0 */
     388             :             }
     389             :         }
     390             :     }
     391         767 :     ELSE IF( EQ_16( length, L_SPEC32k ) )
     392             :     {
     393         767 :         IF( EQ_16( hqswb_clas, HQ_HARMONIC ) )
     394             :         {
     395          32 :             *num_sfm = SFM_N_HARM;
     396          32 :             move16();
     397          32 :             *nb_sfm = SFM_N_HARM;
     398          32 :             move16();
     399          32 :             *num_env_bands = SFM_N_HARM;
     400          32 :             move16();
     401             : 
     402          32 :             p_sfmsize = band_len_harm;     /* Q0 */
     403          32 :             p_sfm_start = band_start_harm; /* Q0 */
     404          32 :             p_sfm_end = band_end_harm;     /* Q0 */
     405             :         }
     406         735 :         ELSE IF( EQ_16( hqswb_clas, HQ_HVQ ) )
     407             :         {
     408           0 :             IF( LT_32( core_brate, HQ_BWE_CROSSOVER_BRATE ) )
     409             :             {
     410           0 :                 *num_sfm = SFM_N_HARM;
     411           0 :                 move16();
     412           0 :                 *nb_sfm = HVQ_THRES_SFM_24k;
     413           0 :                 move16();
     414           0 :                 *num_env_bands = sub( *num_sfm, *nb_sfm );
     415           0 :                 move16();
     416             : 
     417           0 :                 *start_norm = HVQ_THRES_SFM_24k;
     418           0 :                 move16();
     419             :             }
     420             :             ELSE
     421             :             {
     422           0 :                 *num_sfm = SFM_N_HARM;
     423           0 :                 move16();
     424           0 :                 *nb_sfm = HVQ_THRES_SFM_32k;
     425           0 :                 move16();
     426           0 :                 *num_env_bands = sub( *num_sfm, *nb_sfm );
     427           0 :                 move16();
     428             : 
     429           0 :                 *start_norm = HVQ_THRES_SFM_32k;
     430           0 :                 move16();
     431             :             }
     432           0 :             p_sfmsize = band_len_harm;     /* Q0 */
     433           0 :             p_sfm_start = band_start_harm; /* Q0 */
     434           0 :             p_sfm_end = band_end_harm;     /* Q0 */
     435             :         }
     436         735 :         ELSE IF( EQ_16( hqswb_clas, HQ_GEN_SWB ) )
     437             :         {
     438          78 :             *num_sfm = SFM_N_SWB;
     439          78 :             move16();
     440          78 :             p_sfmsize = band_len_HQ;     /* Q0 */
     441          78 :             p_sfm_start = band_start_HQ; /* Q0 */
     442          78 :             p_sfm_end = band_end_HQ;     /* Q0 */
     443             : 
     444          78 :             IF( GE_32( core_brate, HQ_32k ) )
     445             :             {
     446           0 :                 *hq_generic_offset = HQ_GENERIC_FOFFSET_32K;
     447           0 :                 move16();
     448           0 :                 *num_env_bands = SFM_N_STA_10k;
     449           0 :                 move16();
     450             :             }
     451             :             ELSE /*if( EQ_32(core_brate, HQ_24k40))*/
     452             :             {
     453          78 :                 *hq_generic_offset = HQ_GENERIC_FOFFSET_24K4;
     454          78 :                 move16();
     455          78 :                 *num_env_bands = SFM_N_STA_8k;
     456          78 :                 move16();
     457             :             }
     458             : 
     459          78 :             *nb_sfm = *num_sfm;
     460          78 :             move16();
     461             :         }
     462             :         ELSE
     463             :         {
     464             :             /* HQ_NORMAL and HQ_TRANSIENT */
     465         657 :             *num_sfm = SFM_N_SWB;
     466         657 :             move16();
     467         657 :             *nb_sfm = *num_sfm;
     468         657 :             move16();
     469         657 :             *num_env_bands = SFM_N_SWB;
     470         657 :             move16();
     471             : 
     472         657 :             p_sfmsize = band_len_HQ;     /* Q0 */
     473         657 :             p_sfm_start = band_start_HQ; /* Q0 */
     474         657 :             p_sfm_end = band_end_HQ;     /* Q0 */
     475             :         }
     476             :     }
     477           0 :     ELSE IF( EQ_16( length, L_SPEC48k_EXT ) )
     478             :     {
     479           0 :         bw_ext = 1;
     480           0 :         move16();
     481           0 :         p_sfmsize = band_len_HQ;     /* Q0 */
     482           0 :         p_sfm_start = band_start_HQ; /* Q0 */
     483           0 :         p_sfm_end = band_end_HQ;     /* Q0 */
     484           0 :         *num_sfm = NB_SFM;
     485           0 :         move16();
     486             :     }
     487           0 :     ELSE IF( EQ_16( length, L_SPEC16k_EXT ) )
     488             :     {
     489           0 :         bw_ext = 1;
     490           0 :         move16();
     491           0 :         p_sfmsize = band_len_wb;     /* Q0 */
     492           0 :         p_sfm_start = band_start_wb; /* Q0 */
     493           0 :         p_sfm_end = band_end_wb;     /* Q0 */
     494           0 :         *num_sfm = SFM_N_WB;
     495           0 :         move16();
     496             :     }
     497             :     ELSE
     498             :     {
     499           0 :         *num_sfm = SFM_N_WB;
     500           0 :         move16();
     501           0 :         *nb_sfm = *num_sfm;
     502           0 :         move16();
     503           0 :         *num_env_bands = SFM_N_WB;
     504           0 :         move16();
     505             : 
     506           0 :         p_sfmsize = band_len_wb;     /* Q0 */
     507           0 :         p_sfm_start = band_start_wb; /* Q0 */
     508           0 :         p_sfm_end = band_end_wb;     /* Q0 */
     509             :     }
     510         767 :     IF( bw_ext )
     511             :     {
     512           0 :         FOR( i = 0; i < *num_sfm; i++ )
     513             :         {
     514             :             /*sfmsize[i] = (int16_t)(1.25f * p_sfmsize[i]);*/
     515           0 :             sfmsize[i] = mult_r( shl( p_sfmsize[i], 1 ), 20480 /* 1.25 in Q14 */ );
     516           0 :             move16();
     517             :             /*sfm_start[i] = (int16_t)(1.25f * p_sfm_start[i]);*/
     518           0 :             sfm_start[i] = mult_r( shl( p_sfm_start[i], 1 ), 20480 /* 1.25 in Q14 */ );
     519           0 :             move16();
     520             :             /*sfm_end[i] = (int16_t)(1.25f * p_sfm_end[i]);*/
     521           0 :             sfm_end[i] = mult_r( shl( p_sfm_end[i], 1 ), 20480 /* 1.25 in Q14 */ );
     522           0 :             move16();
     523             :         }
     524           0 :         *nb_sfm = *num_sfm;
     525           0 :         *num_env_bands = *num_sfm;
     526           0 :         move16();
     527           0 :         move16();
     528             :     }
     529             :     ELSE
     530             :     {
     531         767 :         Copy( p_sfmsize, sfmsize, *num_sfm );
     532         767 :         Copy( p_sfm_start, sfm_start, *num_sfm );
     533         767 :         Copy( p_sfm_end, sfm_end, *num_sfm );
     534             :     }
     535             : 
     536         767 :     *numnrmibits = extract_l( L_mult0( sub( *num_env_bands, 1 ), NORMI_BITS ) );
     537         767 :     move16();
     538             : 
     539         767 :     return;
     540             : }

Generated by: LCOV version 1.14