LCOV - code coverage report
Current view: top level - lib_com - igf_base.c (source / functions) Hit Total Coverage
Test: Coverage on main -- merged total coverage @ 9b04ec3cb36f5e8dc438cf854fa3e349998fa1e9 Lines: 337 350 96.3 %
Date: 2025-10-31 05:45:46 Functions: 5 5 100.0 %

          Line data    Source code
       1             : /******************************************************************************************************
       2             : 
       3             :    (C) 2022-2025 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB,
       4             :    Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD.,
       5             :    Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange,
       6             :    Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other
       7             :    contributors to this repository. All Rights Reserved.
       8             : 
       9             :    This software is protected by copyright law and by international treaties.
      10             :    The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB,
      11             :    Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD.,
      12             :    Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange,
      13             :    Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other
      14             :    contributors to this repository retain full ownership rights in their respective contributions in
      15             :    the software. This notice grants no license of any kind, including but not limited to patent
      16             :    license, nor is any license granted by implication, estoppel or otherwise.
      17             : 
      18             :    Contributors are required to enter into the IVAS codec Public Collaboration agreement before making
      19             :    contributions.
      20             : 
      21             :    This software is provided "AS IS", without any express or implied warranties. The software is in the
      22             :    development stage. It is intended exclusively for experts who have experience with such software and
      23             :    solely for the purpose of inspection. All implied warranties of non-infringement, merchantability
      24             :    and fitness for a particular purpose are hereby disclaimed and excluded.
      25             : 
      26             :    Any dispute, controversy or claim arising under or in relation to providing this software shall be
      27             :    submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in
      28             :    accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and
      29             :    the United Nations Convention on Contracts on the International Sales of Goods.
      30             : 
      31             : *******************************************************************************************************/
      32             : 
      33             : /*====================================================================================
      34             :     EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0
      35             :   ====================================================================================*/
      36             : 
      37             : #include <assert.h>
      38             : #include <stdint.h>
      39             : #include "options.h"
      40             : #ifdef DEBUGGING
      41             : #include "debug.h"
      42             : #endif
      43             : #include "prot.h"
      44             : #include "rom_com.h"
      45             : #include "wmc_auto.h"
      46             : 
      47             : /*---------------------------------------------------------------------*
      48             :  * IGF_ApplyTransFac()
      49             :  *
      50             :  *
      51             :  *---------------------------------------------------------------------*/
      52             : 
      53             : /*! r: | multiplication factor */
      54   104347848 : int16_t IGF_ApplyTransFac(
      55             :     const int16_t val,   /* i  : Q15 | input value for multiplication, Q15                                          */
      56             :     const float transFac /* i  : Q14 | multiplicator for variable val, Q14: 1.25f=0x5000, 1.0f=0x4000, 0.5f=0x2000  */
      57             : )
      58             : {
      59   104347848 :     int16_t ret = val;
      60             : 
      61   104347848 :     if ( transFac != 1.f )
      62             :     {
      63    68225337 :         ret = (int16_t) round_f( val * transFac );
      64    68225337 :         ret += ( ret & 1 );
      65             :     }
      66             : 
      67   104347848 :     return ret;
      68             : }
      69             : 
      70             : 
      71             : /*---------------------------------------------------------------------*
      72             :  * IGF_MapBitRateToIndex()
      73             :  *
      74             :  * maps a given bitrate to the IGF_BITRATE index
      75             :  *---------------------------------------------------------------------*/
      76             : 
      77             : /*! r: bitrate index */
      78    40836008 : int16_t IGF_MapBitRateToIndex(
      79             :     const int32_t brate,        /* i  :  bitrate                    */
      80             :     const int16_t bwidth,       /* i  :  audio bandwidth            */
      81             :     const int16_t element_mode, /* i  :  element mode               */
      82             :     const int16_t rf_mode       /* i  :  flag to signal the RF mode */
      83             : )
      84             : {
      85    40836008 :     int16_t bitRateIndex = IGF_BITRATE_UNKNOWN;
      86             : 
      87             :     /* Stereo/CPE modes */
      88    40836008 :     if ( element_mode > IVAS_SCE )
      89             :     {
      90    39544896 :         switch ( bwidth )
      91             :         {
      92        8348 :             case IGF_MODE_WB:
      93        8348 :                 if ( brate <= IVAS_13k2 && rf_mode == 1 )
      94             :                 {
      95           0 :                     bitRateIndex = IGF_BITRATE_RF_WB_13200;
      96             :                 }
      97        8348 :                 else if ( brate <= ACELP_9k60 )
      98             :                 {
      99        5136 :                     bitRateIndex = IGF_BITRATE_WB_13200_CPE;
     100             :                 }
     101        3212 :                 else if ( brate <= IVAS_13k2 )
     102             :                 {
     103        3212 :                     bitRateIndex = IGF_BITRATE_WB_16400_CPE;
     104             :                 }
     105        8348 :                 break;
     106     8949194 :             case IGF_MODE_SWB:
     107             :                 /* DFT and TD Stereo bitrates */
     108     8949194 :                 if ( brate <= ACELP_9k60 )
     109             :                 {
     110       38358 :                     bitRateIndex = IGF_BITRATE_SWB_13200_CPE;
     111             :                 }
     112     8910836 :                 else if ( brate <= IVAS_13k2 )
     113             :                 {
     114       23776 :                     if ( rf_mode == 1 )
     115             :                     {
     116           0 :                         bitRateIndex = IGF_BITRATE_RF_SWB_13200;
     117             :                     }
     118             :                     else
     119             :                     {
     120       23776 :                         bitRateIndex = IGF_BITRATE_SWB_16400_CPE;
     121             :                     }
     122             :                 }
     123     8887060 :                 else if ( brate <= IVAS_16k4 )
     124             :                 {
     125       66896 :                     bitRateIndex = IGF_BITRATE_SWB_24400_CPE;
     126             :                 }
     127     8820164 :                 else if ( brate <= IVAS_24k4 )
     128             :                 {
     129       26964 :                     bitRateIndex = IGF_BITRATE_SWB_32000_CPE;
     130             :                 }
     131     8793200 :                 else if ( brate <= IVAS_32k )
     132             :                 {
     133           0 :                     bitRateIndex = IGF_BITRATE_SWB_32000;
     134             :                 }
     135             :                 /* MDCT Stereo bitrates */
     136     8793200 :                 else if ( brate <= IVAS_48k )
     137             :                 {
     138     3561235 :                     bitRateIndex = IGF_BITRATE_SWB_48000_CPE;
     139             :                 }
     140     5231965 :                 else if ( brate <= IVAS_64k )
     141             :                 {
     142     2693358 :                     bitRateIndex = IGF_BITRATE_SWB_64000_CPE;
     143             :                 }
     144     2538607 :                 else if ( brate <= IVAS_80k )
     145             :                 {
     146     1087438 :                     bitRateIndex = IGF_BITRATE_SWB_80000_CPE;
     147             :                 }
     148     1451169 :                 else if ( brate <= IVAS_96k )
     149             :                 {
     150     1451169 :                     bitRateIndex = IGF_BITRATE_SWB_96000_CPE;
     151             :                 }
     152     8949194 :                 break;
     153    30587354 :             case IGF_MODE_FB:
     154             :                 /* DFT and TD Stereo bitrates */
     155    30587354 :                 if ( brate <= IVAS_16k4 )
     156             :                 {
     157       39340 :                     bitRateIndex = IGF_BITRATE_FB_24400_CPE;
     158             :                 }
     159    30548014 :                 else if ( brate <= IVAS_24k4 )
     160             :                 {
     161       34332 :                     bitRateIndex = IGF_BITRATE_FB_32000_CPE;
     162             :                 }
     163    30513682 :                 else if ( brate <= IVAS_32k )
     164             :                 {
     165           0 :                     bitRateIndex = IGF_BITRATE_FB_32000;
     166             :                 }
     167             :                 /* MDCT Stereo bitrates */
     168    30513682 :                 else if ( brate <= IVAS_48k )
     169             :                 {
     170     5417870 :                     bitRateIndex = IGF_BITRATE_FB_48000_CPE;
     171             :                 }
     172    25095812 :                 else if ( brate <= IVAS_64k )
     173             :                 {
     174     6652816 :                     bitRateIndex = IGF_BITRATE_FB_64000_CPE;
     175             :                 }
     176    18442996 :                 else if ( brate <= IVAS_80k )
     177             :                 {
     178     2324138 :                     bitRateIndex = IGF_BITRATE_FB_80000_CPE;
     179             :                 }
     180    16118858 :                 else if ( brate <= IVAS_96k )
     181             :                 {
     182     6324622 :                     bitRateIndex = IGF_BITRATE_FB_96000_CPE;
     183             :                 }
     184     9794236 :                 else if ( brate <= IVAS_128k )
     185             :                 {
     186     9794236 :                     bitRateIndex = IGF_BITRATE_FB_128000_CPE;
     187             :                 }
     188    30587354 :                 break;
     189             :         }
     190    39544896 :     }
     191             :     /* SCE modes: use tunings done for DFT stereo bitrates also for according SCE bitrates, otherwise same config as mono modes */
     192     1291112 :     else if ( element_mode == IVAS_SCE )
     193             :     {
     194     1285332 :         switch ( bwidth )
     195             :         {
     196       12668 :             case IGF_MODE_WB:
     197       12668 :                 if ( brate <= IVAS_13k2 && rf_mode == 1 )
     198             :                 {
     199           0 :                     bitRateIndex = IGF_BITRATE_RF_WB_13200;
     200             :                 }
     201       12668 :                 else if ( brate <= ACELP_9k60 ) /* bitrates 8000 and 9600 */
     202             :                 {
     203       12668 :                     bitRateIndex = IGF_BITRATE_WB_9600;
     204             :                 }
     205       12668 :                 break;
     206      508848 :             case IGF_MODE_SWB:
     207      508848 :                 if ( brate <= ACELP_9k60 )
     208             :                 {
     209      124312 :                     bitRateIndex = IGF_BITRATE_SWB_13200_CPE;
     210             :                 }
     211      384536 :                 else if ( brate <= IVAS_13k2 )
     212             :                 {
     213      127756 :                     if ( rf_mode == 1 )
     214             :                     {
     215           0 :                         bitRateIndex = IGF_BITRATE_RF_SWB_13200;
     216             :                     }
     217             :                     else
     218             :                     {
     219      127756 :                         bitRateIndex = IGF_BITRATE_SWB_16400_CPE;
     220             :                     }
     221             :                 }
     222      256780 :                 else if ( brate <= IVAS_16k4 )
     223             :                 {
     224      101750 :                     bitRateIndex = IGF_BITRATE_SWB_24400_CPE;
     225             :                 }
     226      155030 :                 else if ( brate <= IVAS_24k4 )
     227             :                 {
     228       90070 :                     bitRateIndex = IGF_BITRATE_SWB_32000_CPE;
     229             :                 }
     230       64960 :                 else if ( brate <= IVAS_32k )
     231             :                 {
     232       32402 :                     bitRateIndex = IGF_BITRATE_SWB_32000;
     233             :                 }
     234       32558 :                 else if ( brate <= IVAS_48k )
     235             :                 {
     236       18182 :                     bitRateIndex = IGF_BITRATE_SWB_48000;
     237             :                 }
     238       14376 :                 else if ( brate <= IVAS_64k )
     239             :                 {
     240       14376 :                     bitRateIndex = IGF_BITRATE_SWB_64000;
     241             :                 }
     242      508848 :                 break;
     243      763816 :             case IGF_MODE_FB:
     244      763816 :                 if ( brate <= IVAS_16k4 )
     245             :                 {
     246      135110 :                     bitRateIndex = IGF_BITRATE_FB_24400_CPE;
     247             :                 }
     248      628706 :                 else if ( brate <= IVAS_24k4 )
     249             :                 {
     250      246058 :                     bitRateIndex = IGF_BITRATE_FB_32000_CPE;
     251             :                 }
     252      382648 :                 else if ( brate <= IVAS_32k )
     253             :                 {
     254      143212 :                     bitRateIndex = IGF_BITRATE_FB_32000;
     255             :                 }
     256      239436 :                 else if ( brate <= IVAS_48k )
     257             :                 {
     258      106124 :                     bitRateIndex = IGF_BITRATE_FB_48000;
     259             :                 }
     260      133312 :                 else if ( brate <= IVAS_64k )
     261             :                 {
     262       77218 :                     bitRateIndex = IGF_BITRATE_FB_64000;
     263             :                 }
     264       56094 :                 else if ( brate <= IVAS_96k )
     265             :                 {
     266       42120 :                     bitRateIndex = IGF_BITRATE_FB_96000;
     267             :                 }
     268       13974 :                 else if ( brate <= IVAS_128k )
     269             :                 {
     270       13974 :                     bitRateIndex = IGF_BITRATE_FB_128000;
     271             :                 }
     272      763816 :                 break;
     273             :         }
     274     1285332 :     }
     275             :     /* EVS mono */
     276             :     else
     277             :     {
     278        5780 :         switch ( bwidth )
     279             :         {
     280         312 :             case IGF_MODE_WB:
     281         312 :                 if ( brate <= ACELP_13k20 && rf_mode == 1 )
     282             :                 {
     283          96 :                     bitRateIndex = IGF_BITRATE_RF_WB_13200;
     284             :                 }
     285         216 :                 else if ( brate <= ACELP_9k60 ) /* bitrates 8000 and 9600 */
     286             :                 {
     287         216 :                     bitRateIndex = IGF_BITRATE_WB_9600;
     288             :                 }
     289         312 :                 break;
     290        5104 :             case IGF_MODE_SWB:
     291        5104 :                 if ( brate <= ACELP_9k60 )
     292             :                 {
     293          48 :                     bitRateIndex = IGF_BITRATE_SWB_9600;
     294             :                 }
     295        5056 :                 else if ( brate <= ACELP_13k20 )
     296             :                 {
     297        1840 :                     if ( rf_mode == 1 )
     298             :                     {
     299          98 :                         bitRateIndex = IGF_BITRATE_RF_SWB_13200;
     300             :                     }
     301             :                     else
     302             :                     {
     303        1742 :                         bitRateIndex = IGF_BITRATE_SWB_13200;
     304             :                     }
     305             :                 }
     306        3216 :                 else if ( brate <= ACELP_16k40 )
     307             :                 {
     308         316 :                     bitRateIndex = IGF_BITRATE_SWB_16400;
     309             :                 }
     310        2900 :                 else if ( brate <= ACELP_24k40 )
     311             :                 {
     312        2680 :                     bitRateIndex = IGF_BITRATE_SWB_24400;
     313             :                 }
     314         220 :                 else if ( brate <= ACELP_32k )
     315             :                 {
     316          64 :                     bitRateIndex = IGF_BITRATE_SWB_32000;
     317             :                 }
     318         156 :                 else if ( brate <= ACELP_48k )
     319             :                 {
     320         156 :                     bitRateIndex = IGF_BITRATE_SWB_48000;
     321             :                 }
     322           0 :                 else if ( brate <= ACELP_64k )
     323             :                 {
     324           0 :                     bitRateIndex = IGF_BITRATE_SWB_64000;
     325             :                 }
     326        5104 :                 break;
     327         364 :             case IGF_MODE_FB:
     328         364 :                 if ( brate <= ACELP_16k40 )
     329             :                 {
     330          48 :                     bitRateIndex = IGF_BITRATE_FB_16400;
     331             :                 }
     332         316 :                 else if ( brate <= ACELP_24k40 )
     333             :                 {
     334         144 :                     bitRateIndex = IGF_BITRATE_FB_24400;
     335             :                 }
     336         172 :                 else if ( brate <= ACELP_32k )
     337             :                 {
     338          20 :                     bitRateIndex = IGF_BITRATE_FB_32000;
     339             :                 }
     340         152 :                 else if ( brate <= ACELP_48k )
     341             :                 {
     342          40 :                     bitRateIndex = IGF_BITRATE_FB_48000;
     343             :                 }
     344         112 :                 else if ( brate <= ACELP_64k )
     345             :                 {
     346           0 :                     bitRateIndex = IGF_BITRATE_FB_64000;
     347             :                 }
     348         112 :                 else if ( brate <= HQ_96k )
     349             :                 {
     350          52 :                     bitRateIndex = IGF_BITRATE_FB_96000;
     351             :                 }
     352          60 :                 else if ( brate <= HQ_128k )
     353             :                 {
     354          60 :                     bitRateIndex = IGF_BITRATE_FB_128000;
     355             :                 }
     356         364 :                 break;
     357             :         }
     358    40836008 :     }
     359             : 
     360    40836008 :     return bitRateIndex;
     361             : }
     362             : 
     363             : 
     364             : /*---------------------------------------------------------------------*
     365             :  * IGF_gridSetUp()
     366             :  *
     367             :  * IGF grid setup
     368             :  *---------------------------------------------------------------------*/
     369             : 
     370     5071272 : static void IGF_gridSetUp(
     371             :     H_IGF_GRID hGrid,         /* o  : IGF grid handle                                                    */
     372             :     int16_t bitRateIndex,     /* i  : IGF bitrate index                                                  */
     373             :     const int32_t sampleRate, /* i  : sample rate                                                        */
     374             :     int16_t frameLength,      /* i  : frame length                                                       */
     375             :     const float transFac,     /* i  : transFac                                                           */
     376             :     const int16_t igfMinFq    /* i  : IGF minimum frequency indicating lower start frequency for copy up */
     377             : )
     378             : {
     379             :     int16_t t, k;
     380             :     int16_t sfb;
     381             :     int16_t swb_offset_len;
     382             :     const int16_t *swb_offset;
     383             :     float bandwidth;
     384             :     const int16_t *igf_tile_offset;
     385             : 
     386             :     /* inits */
     387     5071272 :     swb_offset = NULL;
     388     5071272 :     swb_offset_len = 0;
     389     5071272 :     if ( transFac == 0.5f && bitRateIndex == IGF_BITRATE_SWB_48000_CPE )
     390             :     {
     391       44339 :         bitRateIndex = IGF_BITRATE_SWB_48000_CPE_TCX10;
     392             :     }
     393     5026933 :     else if ( transFac == 0.5f && bitRateIndex == IGF_BITRATE_FB_48000_CPE )
     394             :     {
     395      242419 :         bitRateIndex = IGF_BITRATE_FB_48000_CPE_TCX10;
     396             :     }
     397             : 
     398     5071272 :     if ( bitRateIndex != IGF_BITRATE_UNKNOWN )
     399             :     {
     400     5071272 :         swb_offset = &swb_offset_LB_new[bitRateIndex][1];
     401     5071272 :         swb_offset_len = swb_offset_LB_new[bitRateIndex][0];
     402     5071272 :         mvr2r( &igf_whitening_TH[bitRateIndex][0][0], &hGrid->whiteningThreshold[0][0], IGF_MAX_TILES * 2 );
     403             :     }
     404             :     else
     405             :     {
     406           0 :         assert( 0 );
     407             :     }
     408             : 
     409    42680243 :     for ( sfb = 0; sfb < swb_offset_len; sfb++ )
     410             :     {
     411    37608971 :         hGrid->swb_offset[sfb] = IGF_ApplyTransFac( swb_offset[sfb], transFac );
     412             :     }
     413    84101557 :     for ( sfb = swb_offset_len; sfb < IGF_MAX_SFB; sfb++ )
     414             :     {
     415    79030285 :         hGrid->swb_offset[sfb] = 0;
     416             :     }
     417             : 
     418     5071272 :     hGrid->infoIsRefined = 0;
     419     5071272 :     frameLength = IGF_ApplyTransFac( frameLength, transFac );
     420     5071272 :     bandwidth = (float) sampleRate / 2.0f / (float) frameLength;
     421     5071272 :     hGrid->swb_offset_len = swb_offset_len;
     422     5071272 :     hGrid->startSfb = 0;
     423     5071272 :     hGrid->stopSfb = hGrid->swb_offset_len - 1;
     424     5071272 :     hGrid->startLine = hGrid->swb_offset[hGrid->startSfb];
     425     5071272 :     hGrid->stopLine = hGrid->swb_offset[hGrid->stopSfb];
     426     5071272 :     hGrid->startFrequency = (int16_t) round_f( bandwidth * hGrid->startLine );
     427     5071272 :     hGrid->stopFrequency = (int16_t) round_f( bandwidth * hGrid->stopLine );
     428     5071272 :     hGrid->minSrcSubband = (int16_t) round_f( ( igfMinFq * ( frameLength ) ) / ( sampleRate >> 1 ) );
     429     5071272 :     hGrid->minSrcSubband += hGrid->minSrcSubband % 2;
     430     5071272 :     hGrid->minSrcFrequency = (int16_t) round_f( bandwidth * hGrid->minSrcSubband );
     431     5071272 :     hGrid->infoGranuleLen = frameLength;
     432     5071272 :     hGrid->sfbWrap[0] = 0;
     433     5071272 :     hGrid->tile[0] = hGrid->startLine;
     434             : 
     435     5071272 :     igf_tile_offset = &igf_tile_offset_table[bitRateIndex][1];
     436     5071272 :     hGrid->nTiles = igf_tile_offset_table[bitRateIndex][0];
     437     5071272 :     hGrid->tile[0] = hGrid->startLine;
     438     5071272 :     hGrid->sfbWrap[0] = 0;
     439    29283717 :     for ( k = 0; k < hGrid->nTiles; k++ )
     440             :     {
     441    24212445 :         hGrid->sfbWrap[k + 1] = igf_tile_offset[2 * k];
     442    24212445 :         hGrid->sbWrap[k] = hGrid->minSrcSubband + IGF_ApplyTransFac( igf_tile_offset[2 * k + 1], transFac );
     443    24212445 :         hGrid->tile[k + 1] = hGrid->swb_offset[igf_tile_offset[2 * k]];
     444             :     }
     445    26920860 :     for ( t = hGrid->nTiles + 1; t < IGF_MAX_TILES; t++ )
     446             :     {
     447    21849588 :         hGrid->tile[t] = 0;
     448    21849588 :         hGrid->sbWrap[t - 1] = 0;
     449    21849588 :         hGrid->sfbWrap[t] = 0;
     450             :     }
     451             : 
     452             :     /* adapt level envelope: */
     453     5071272 :     switch ( bitRateIndex )
     454             :     {
     455       31992 :         case IGF_BITRATE_RF_WB_13200:
     456             :         case IGF_BITRATE_WB_9600:
     457             :         case IGF_BITRATE_WB_13200_CPE:
     458             :         case IGF_BITRATE_WB_16400_CPE:
     459       31992 :             hGrid->gFactor = 0.800f;
     460       31992 :             hGrid->fFactor = 0.70f;
     461       31992 :             hGrid->lFactor = 0.60f;
     462       31992 :             break;
     463      745101 :         case IGF_BITRATE_SWB_13200:
     464             :         case IGF_BITRATE_SWB_16400_CPE:
     465             :         case IGF_BITRATE_FB_16400:
     466             :         case IGF_BITRATE_SWB_16400:
     467             :         case IGF_BITRATE_FB_24400_CPE:
     468             :         case IGF_BITRATE_SWB_24400_CPE:
     469      745101 :             hGrid->gFactor = 0.930f;
     470      745101 :             hGrid->fFactor = 0.20f;
     471      745101 :             hGrid->lFactor = 0.85f;
     472      745101 :             break;
     473     1123774 :         case IGF_BITRATE_FB_24400:
     474             :         case IGF_BITRATE_SWB_24400:
     475             :         case IGF_BITRATE_FB_32000_CPE:
     476             :         case IGF_BITRATE_SWB_32000_CPE:
     477             :         case IGF_BITRATE_FB_32000:
     478             :         case IGF_BITRATE_SWB_32000:
     479             :         case IGF_BITRATE_SWB_48000_CPE:
     480             :         case IGF_BITRATE_SWB_64000_CPE:
     481     1123774 :             hGrid->gFactor = 0.965f;
     482     1123774 :             hGrid->fFactor = 0.20f;
     483     1123774 :             hGrid->lFactor = 0.85f;
     484     1123774 :             break;
     485      464235 :         case IGF_BITRATE_FB_48000:
     486             :         case IGF_BITRATE_SWB_48000:
     487             :         case IGF_BITRATE_FB_64000:
     488             :         case IGF_BITRATE_SWB_64000:
     489             :         case IGF_BITRATE_SWB_80000_CPE:
     490             :         case IGF_BITRATE_SWB_96000_CPE:
     491      464235 :             hGrid->gFactor = 1.000f;
     492      464235 :             hGrid->fFactor = 0.20f;
     493      464235 :             hGrid->lFactor = 1.000f;
     494      464235 :             break;
     495     2706170 :         case IGF_BITRATE_SWB_9600:
     496             :         case IGF_BITRATE_SWB_13200_CPE:
     497             :         case IGF_BITRATE_RF_SWB_13200:
     498             :         default:
     499     2706170 :             hGrid->gFactor = 1.000f;
     500     2706170 :             hGrid->fFactor = 0.00f;
     501     2706170 :             hGrid->lFactor = 1.000f;
     502             :     }
     503             : 
     504    26920860 :     for ( t = hGrid->nTiles + 1; t < IGF_MAX_TILES; t++ )
     505             :     {
     506    21849588 :         hGrid->tile[t] = 0;
     507    21849588 :         hGrid->sbWrap[t - 1] = 0;
     508    21849588 :         hGrid->sfbWrap[t] = 0;
     509             :     }
     510             : 
     511     5071272 :     return;
     512             : }
     513             : 
     514             : 
     515             : /*---------------------------------------------------------------------*
     516             :  * IGFCommonFuncsIGFConfiguration()
     517             :  *
     518             :  * changes the IGF configuration
     519             :  *---------------------------------------------------------------------*/
     520             : 
     521             : /*! r: error value: 0 -> error, 1 -> ok */
     522     1690424 : int16_t IGFCommonFuncsIGFConfiguration(
     523             :     const int32_t total_brate,  /* i  : bitrate in bs e.g. 9600 for 9.6kbs  */
     524             :     const int16_t bwidth,       /* i  : audio bandwidth                     */
     525             :     const int16_t element_mode, /* i  : element mode                        */
     526             :     H_IGF_INFO hIGFInfo,        /* o  : IGF info handle                     */
     527             :     const int16_t rf_mode       /* i  : flag to signal the RF mode          */
     528             : )
     529             : {
     530             :     H_IGF_GRID hGrid;
     531             :     int16_t retValue;
     532             :     int32_t sampleRate;
     533             :     int16_t frameLength;
     534             :     int16_t igfMinFq;
     535             :     int16_t maxHopsize;
     536             : 
     537     1690424 :     retValue = 0; /* bitrate index is unknown -> error! */
     538             : 
     539             :     /* interface call for reading in settings */
     540     1690424 :     hIGFInfo->bitRateIndex = IGF_MapBitRateToIndex( total_brate, bwidth, element_mode, rf_mode );
     541             : 
     542     1690424 :     if ( hIGFInfo->bitRateIndex != IGF_BITRATE_UNKNOWN )
     543             :     {
     544     1690424 :         retValue = 1; /* no error */
     545             : 
     546             :         /* mapping to local values */
     547     1690424 :         sampleRate = igfMode[hIGFInfo->bitRateIndex].sampleRate;
     548     1690424 :         frameLength = igfMode[hIGFInfo->bitRateIndex].frameLength;
     549     1690424 :         igfMinFq = igfMode[hIGFInfo->bitRateIndex].igfMinFq;
     550     1690424 :         maxHopsize = igfMode[hIGFInfo->bitRateIndex].maxHopsize;
     551             : 
     552             :         /* basic information */
     553     1690424 :         hIGFInfo->sampleRate = sampleRate;
     554     1690424 :         hIGFInfo->frameLength = frameLength;
     555     1690424 :         hIGFInfo->maxHopsize = maxHopsize;
     556     1690424 :         hIGFInfo->nfSeedBuf[0] = 0;
     557     1690424 :         hIGFInfo->nfSeedBuf[1] = 0;
     558     1690424 :         hIGFInfo->nfSeed = &hIGFInfo->nfSeedBuf[0];
     559             : 
     560             :         /* set up regular IGF grid for TCX 20  (transfac = 1.f) */
     561     1690424 :         hGrid = &hIGFInfo->grid[IGF_GRID_LB_NORM];
     562     1690424 :         IGF_gridSetUp( hGrid, hIGFInfo->bitRateIndex, sampleRate, frameLength, 1.00f, igfMinFq );
     563             : 
     564             :         /* set up IGF grid for CELP->TCX 20 transitions (transfac = 1.25) */
     565     1690424 :         hGrid = &hIGFInfo->grid[IGF_GRID_LB_TRAN];
     566     1690424 :         IGF_gridSetUp( hGrid, hIGFInfo->bitRateIndex, sampleRate, frameLength, 1.25f, igfMinFq );
     567             : 
     568             :         /* set up IGF grid for TCX 10 (transfac = 0.5) */
     569     1690424 :         hGrid = &hIGFInfo->grid[IGF_GRID_LB_SHORT];
     570     1690424 :         IGF_gridSetUp( hGrid, hIGFInfo->bitRateIndex, sampleRate, frameLength, 0.50f, igfMinFq );
     571             :     }
     572             : 
     573     1690424 :     return retValue;
     574             : }
     575             : 
     576             : 
     577             : /*---------------------------------------------------------------------*
     578             :  * IGFCommonFuncsIGFGetCFTables()
     579             :  *
     580             :  * selects cumulative frequency tables and offsets for the IGF SCF arithmetic coder
     581             :  *---------------------------------------------------------------------*/
     582             : 
     583             : /*! r: error value: 0 -> error, 1 -> ok */
     584     1690424 : int16_t IGFCommonFuncsIGFGetCFTables(
     585             :     const int32_t total_brate,   /* i  : bitrate in bs e.g. 9600 for 9.6kbs  */
     586             :     const int16_t bwidth,        /* i  : audio bandwidth                     */
     587             :     const int16_t element_mode,  /* i  : element mode                        */
     588             :     const int16_t rf_mode,       /* i  : flag to signal the RF mode          */
     589             :     const uint16_t **cf_se00,    /* o  : CF table for t == 0 and f == 0      */
     590             :     const uint16_t **cf_se01,    /* o  : CF table for t == 0 and f == 1      */
     591             :     int16_t *cf_off_se01,        /* o  : offset for CF table above           */
     592             :     const uint16_t **cf_se02,    /* o  : CF tables for t == 0 and f >= 2     */
     593             :     const int16_t **cf_off_se02, /* o  : offsets for CF tables above         */
     594             :     const uint16_t **cf_se10,    /* o  : CF table for t == 1 and f == 0      */
     595             :     int16_t *cf_off_se10,        /* o  : offset for CF table above           */
     596             :     const uint16_t **cf_se11,    /* o  : CF tables for t == 1 and f >= 1     */
     597             :     const int16_t **cf_off_se11  /* o  : offsets for CF tables above         */
     598             : )
     599             : {
     600             :     int16_t retValue;
     601             :     int16_t bitRateIndex;
     602             : 
     603     1690424 :     retValue = 0; /* bitrate index is unknown -> error! */
     604             : 
     605     1690424 :     bitRateIndex = IGF_MapBitRateToIndex( total_brate, bwidth, element_mode, rf_mode );
     606             : 
     607     1690424 :     if ( bitRateIndex != IGF_BITRATE_UNKNOWN )
     608             :     {
     609     1690424 :         retValue = 1; /* no error */
     610             : 
     611     1690424 :         switch ( bitRateIndex )
     612             :         {
     613        2568 :             case IGF_BITRATE_WB_13200_CPE:
     614        2568 :                 bitRateIndex = IGF_BITRATE_WB_9600;
     615        2568 :                 break;
     616        1606 :             case IGF_BITRATE_WB_16400_CPE:
     617        1606 :                 bitRateIndex = IGF_BITRATE_WB_9600;
     618        1606 :                 break;
     619       81335 :             case IGF_BITRATE_SWB_13200_CPE:
     620       81335 :                 bitRateIndex = IGF_BITRATE_SWB_9600;
     621       81335 :                 break;
     622       75766 :             case IGF_BITRATE_SWB_16400_CPE:
     623       75766 :                 bitRateIndex = IGF_BITRATE_SWB_13200;
     624       75766 :                 break;
     625       84323 :             case IGF_BITRATE_SWB_24400_CPE:
     626       84323 :                 bitRateIndex = IGF_BITRATE_SWB_16400;
     627       84323 :                 break;
     628       87225 :             case IGF_BITRATE_FB_24400_CPE:
     629       87225 :                 bitRateIndex = IGF_BITRATE_FB_16400;
     630       87225 :                 break;
     631       58517 :             case IGF_BITRATE_SWB_32000_CPE:
     632       58517 :                 bitRateIndex = IGF_BITRATE_SWB_24400;
     633       58517 :                 break;
     634      140195 :             case IGF_BITRATE_FB_32000_CPE:
     635      140195 :                 bitRateIndex = IGF_BITRATE_FB_24400;
     636      140195 :                 break;
     637      435748 :             case IGF_BITRATE_FB_48000_CPE:
     638             :             case IGF_BITRATE_FB_64000_CPE:
     639      435748 :                 bitRateIndex = IGF_BITRATE_FB_32000;
     640      435748 :                 break;
     641             :         }
     642             : 
     643     1690424 :         switch ( bitRateIndex )
     644             :         {
     645      345637 :             case IGF_BITRATE_WB_9600:
     646             :             case IGF_BITRATE_RF_WB_13200:
     647             :             case IGF_BITRATE_SWB_9600:
     648             :             case IGF_BITRATE_SWB_13200:
     649             :             case IGF_BITRATE_RF_SWB_13200:
     650             :             case IGF_BITRATE_SWB_16400:
     651             :             case IGF_BITRATE_SWB_24400:
     652             :             case IGF_BITRATE_SWB_32000:
     653             :             case IGF_BITRATE_SWB_48000:
     654             :             case IGF_BITRATE_SWB_64000:
     655      345637 :                 *cf_se00 = cf_se00_tab;
     656      345637 :                 *cf_se01 = cf_se01_tab[bitRateIndex];
     657      345637 :                 *cf_off_se01 = cf_off_se01_tab[bitRateIndex];
     658      345637 :                 *cf_se02 = &cf_se02_tab[bitRateIndex][0][0];
     659      345637 :                 *cf_off_se02 = &cf_off_se02_tab[bitRateIndex][0];
     660      345637 :                 *cf_se10 = &cf_se10_tab[0];
     661      345637 :                 *cf_off_se10 = cf_off_se10_tab;
     662      345637 :                 *cf_se11 = &cf_se11_tab[0][0][0];
     663      345637 :                 *cf_off_se11 = &cf_off_se11_tab[0][0];
     664      345637 :                 break;
     665      734880 :             case IGF_BITRATE_FB_16400:
     666             :             case IGF_BITRATE_FB_24400:
     667             :             case IGF_BITRATE_FB_32000:
     668      734880 :                 bitRateIndex = bitRateIndex - IGF_BITRATE_FB_16400 + IGF_BITRATE_SWB_16400;
     669      734880 :                 *cf_se00 = cf_se00_tab;
     670      734880 :                 *cf_se01 = cf_se01_tab[bitRateIndex];
     671      734880 :                 *cf_off_se01 = cf_off_se01_tab[bitRateIndex];
     672      734880 :                 *cf_se02 = &cf_se02_tab[bitRateIndex][0][0];
     673      734880 :                 *cf_off_se02 = &cf_off_se02_tab[bitRateIndex][0];
     674      734880 :                 *cf_se10 = &cf_se10_tab[0];
     675      734880 :                 *cf_off_se10 = cf_off_se10_tab;
     676      734880 :                 *cf_se11 = &cf_se11_tab[0][0][0];
     677      734880 :                 *cf_off_se11 = &cf_off_se11_tab[0][0];
     678      734880 :                 break;
     679       91691 :             case IGF_BITRATE_FB_48000:
     680             :             case IGF_BITRATE_FB_64000:
     681       91691 :                 bitRateIndex = bitRateIndex - IGF_BITRATE_FB_48000 + IGF_BITRATE_SWB_48000;
     682       91691 :                 *cf_se00 = cf_se00_tab;
     683       91691 :                 *cf_se01 = cf_se01_tab[bitRateIndex];
     684       91691 :                 *cf_off_se01 = cf_off_se01_tab[bitRateIndex];
     685       91691 :                 *cf_se02 = &cf_se02_tab[bitRateIndex][0][0];
     686       91691 :                 *cf_off_se02 = &cf_off_se02_tab[bitRateIndex][0];
     687       91691 :                 *cf_se10 = &cf_se10_tab[0];
     688       91691 :                 *cf_off_se10 = cf_off_se10_tab;
     689       91691 :                 *cf_se11 = &cf_se11_tab[0][0][0];
     690       91691 :                 *cf_off_se11 = &cf_off_se11_tab[0][0];
     691       91691 :                 break;
     692      370121 :             case IGF_BITRATE_FB_96000:
     693             :             case IGF_BITRATE_FB_128000:
     694             :             case IGF_BITRATE_FB_80000_CPE:
     695             :             case IGF_BITRATE_FB_96000_CPE:
     696             :             case IGF_BITRATE_FB_128000_CPE:
     697      370121 :                 bitRateIndex = IGF_BITRATE_SWB_48000;
     698      370121 :                 *cf_se00 = cf_se00_tab;
     699      370121 :                 *cf_se01 = cf_se01_tab[bitRateIndex];
     700      370121 :                 *cf_off_se01 = cf_off_se01_tab[bitRateIndex];
     701      370121 :                 *cf_se02 = &cf_se02_tab[bitRateIndex][0][0];
     702      370121 :                 *cf_off_se02 = &cf_off_se02_tab[bitRateIndex][0];
     703      370121 :                 *cf_se10 = &cf_se10_tab[0];
     704      370121 :                 *cf_off_se10 = cf_off_se10_tab;
     705      370121 :                 *cf_se11 = &cf_se11_tab[0][0][0];
     706      370121 :                 *cf_off_se11 = &cf_off_se11_tab[0][0];
     707      370121 :                 break;
     708       44339 :             case IGF_BITRATE_SWB_48000_CPE:
     709       44339 :                 bitRateIndex = IGF_BITRATE_SWB_16400;
     710       44339 :                 *cf_se00 = cf_se00_tab;
     711       44339 :                 *cf_se01 = cf_se01_tab[bitRateIndex];
     712       44339 :                 *cf_off_se01 = cf_off_se01_tab[bitRateIndex];
     713       44339 :                 *cf_se02 = &cf_se02_tab[bitRateIndex][0][0];
     714       44339 :                 *cf_off_se02 = &cf_off_se02_tab[bitRateIndex][0];
     715       44339 :                 *cf_se10 = &cf_se10_tab[0];
     716       44339 :                 *cf_off_se10 = cf_off_se10_tab;
     717       44339 :                 *cf_se11 = &cf_se11_tab[0][0][0];
     718       44339 :                 *cf_off_se11 = &cf_off_se11_tab[0][0];
     719       44339 :                 break;
     720      103756 :             case IGF_BITRATE_SWB_64000_CPE:
     721             :             case IGF_BITRATE_SWB_80000_CPE:
     722             :             case IGF_BITRATE_SWB_96000_CPE:
     723      103756 :                 bitRateIndex = IGF_BITRATE_SWB_48000; /*bitRateIndex-IGF_BITRATE_SWB_56000+IGF_BITRATE_SWB_48000;*/
     724      103756 :                 *cf_se00 = cf_se00_tab;
     725      103756 :                 *cf_se01 = cf_se01_tab[bitRateIndex];
     726      103756 :                 *cf_off_se01 = cf_off_se01_tab[bitRateIndex];
     727      103756 :                 *cf_se02 = &cf_se02_tab[bitRateIndex][0][0];
     728      103756 :                 *cf_off_se02 = &cf_off_se02_tab[bitRateIndex][0];
     729      103756 :                 *cf_se10 = &cf_se10_tab[0];
     730      103756 :                 *cf_off_se10 = cf_off_se10_tab;
     731      103756 :                 *cf_se11 = &cf_se11_tab[0][0][0];
     732      103756 :                 *cf_off_se11 = &cf_off_se11_tab[0][0];
     733      103756 :                 break;
     734           0 :             case IGF_BITRATE_UNKNOWN:
     735             :             default:
     736           0 :                 assert( 0 );
     737             :         }
     738           0 :     }
     739             : 
     740     1690424 :     return retValue;
     741             : }

Generated by: LCOV version 1.14