LCOV - code coverage report
Current view: top level - lib_com - igf_base.c (source / functions) Hit Total Coverage
Test: Coverage on main -- short test vectors @ 6c9ddc4024a9c0e1ecb8f643f114a84a0e26ec6b Lines: 309 350 88.3 %
Date: 2025-05-23 08:37:30 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     5844706 : 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     5844706 :     int16_t ret = val;
      60             : 
      61     5844706 :     if ( transFac != 1.f )
      62             :     {
      63     3836674 :         ret = (int16_t) round_f( val * transFac );
      64     3836674 :         ret += ( ret & 1 );
      65             :     }
      66             : 
      67     5844706 :     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     2103782 : 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     2103782 :     int16_t bitRateIndex = IGF_BITRATE_UNKNOWN;
      86             : 
      87             :     /* Stereo/CPE modes */
      88     2103782 :     if ( element_mode > IVAS_SCE )
      89             :     {
      90     2009350 :         switch ( bwidth )
      91             :         {
      92         797 :             case IGF_MODE_WB:
      93         797 :                 if ( brate <= IVAS_13k2 && rf_mode == 1 )
      94             :                 {
      95           0 :                     bitRateIndex = IGF_BITRATE_RF_WB_13200;
      96             :                 }
      97         797 :                 else if ( brate <= ACELP_9k60 )
      98             :                 {
      99         480 :                     bitRateIndex = IGF_BITRATE_WB_13200_CPE;
     100             :                 }
     101         317 :                 else if ( brate <= IVAS_13k2 )
     102             :                 {
     103         298 :                     bitRateIndex = IGF_BITRATE_WB_16400_CPE;
     104             :                 }
     105         797 :                 break;
     106      554965 :             case IGF_MODE_SWB:
     107             :                 /* DFT and TD Stereo bitrates */
     108      554965 :                 if ( brate <= ACELP_9k60 )
     109             :                 {
     110        1432 :                     bitRateIndex = IGF_BITRATE_SWB_13200_CPE;
     111             :                 }
     112      553533 :                 else if ( brate <= IVAS_13k2 )
     113             :                 {
     114        1368 :                     if ( rf_mode == 1 )
     115             :                     {
     116           0 :                         bitRateIndex = IGF_BITRATE_RF_SWB_13200;
     117             :                     }
     118             :                     else
     119             :                     {
     120        1368 :                         bitRateIndex = IGF_BITRATE_SWB_16400_CPE;
     121             :                     }
     122             :                 }
     123      552165 :                 else if ( brate <= IVAS_16k4 )
     124             :                 {
     125        3030 :                     bitRateIndex = IGF_BITRATE_SWB_24400_CPE;
     126             :                 }
     127      549135 :                 else if ( brate <= IVAS_24k4 )
     128             :                 {
     129        2500 :                     bitRateIndex = IGF_BITRATE_SWB_32000_CPE;
     130             :                 }
     131      546635 :                 else if ( brate <= IVAS_32k )
     132             :                 {
     133           0 :                     bitRateIndex = IGF_BITRATE_SWB_32000;
     134             :                 }
     135             :                 /* MDCT Stereo bitrates */
     136      546635 :                 else if ( brate <= IVAS_48k )
     137             :                 {
     138      270485 :                     bitRateIndex = IGF_BITRATE_SWB_48000_CPE;
     139             :                 }
     140      276150 :                 else if ( brate <= IVAS_64k )
     141             :                 {
     142       98445 :                     bitRateIndex = IGF_BITRATE_SWB_64000_CPE;
     143             :                 }
     144      177705 :                 else if ( brate <= IVAS_80k )
     145             :                 {
     146       76748 :                     bitRateIndex = IGF_BITRATE_SWB_80000_CPE;
     147             :                 }
     148      100957 :                 else if ( brate <= IVAS_96k )
     149             :                 {
     150      100957 :                     bitRateIndex = IGF_BITRATE_SWB_96000_CPE;
     151             :                 }
     152      554965 :                 break;
     153     1453588 :             case IGF_MODE_FB:
     154             :                 /* DFT and TD Stereo bitrates */
     155     1453588 :                 if ( brate <= IVAS_16k4 )
     156             :                 {
     157        1402 :                     bitRateIndex = IGF_BITRATE_FB_24400_CPE;
     158             :                 }
     159     1452186 :                 else if ( brate <= IVAS_24k4 )
     160             :                 {
     161        2154 :                     bitRateIndex = IGF_BITRATE_FB_32000_CPE;
     162             :                 }
     163     1450032 :                 else if ( brate <= IVAS_32k )
     164             :                 {
     165           0 :                     bitRateIndex = IGF_BITRATE_FB_32000;
     166             :                 }
     167             :                 /* MDCT Stereo bitrates */
     168     1450032 :                 else if ( brate <= IVAS_48k )
     169             :                 {
     170      180828 :                     bitRateIndex = IGF_BITRATE_FB_48000_CPE;
     171             :                 }
     172     1269204 :                 else if ( brate <= IVAS_64k )
     173             :                 {
     174      333164 :                     bitRateIndex = IGF_BITRATE_FB_64000_CPE;
     175             :                 }
     176      936040 :                 else if ( brate <= IVAS_80k )
     177             :                 {
     178      107500 :                     bitRateIndex = IGF_BITRATE_FB_80000_CPE;
     179             :                 }
     180      828540 :                 else if ( brate <= IVAS_96k )
     181             :                 {
     182      228176 :                     bitRateIndex = IGF_BITRATE_FB_96000_CPE;
     183             :                 }
     184      600364 :                 else if ( brate <= IVAS_128k )
     185             :                 {
     186      600364 :                     bitRateIndex = IGF_BITRATE_FB_128000_CPE;
     187             :                 }
     188     1453588 :                 break;
     189             :         }
     190     2009350 :     }
     191             :     /* SCE modes: use tunings done for DFT stereo bitrates also for according SCE bitrates, otherwise same config as mono modes */
     192       94432 :     else if ( element_mode == IVAS_SCE )
     193             :     {
     194       94006 :         switch ( bwidth )
     195             :         {
     196         108 :             case IGF_MODE_WB:
     197         108 :                 if ( brate <= IVAS_13k2 && rf_mode == 1 )
     198             :                 {
     199           0 :                     bitRateIndex = IGF_BITRATE_RF_WB_13200;
     200             :                 }
     201         108 :                 else if ( brate <= ACELP_9k60 ) /* bitrates 8000 and 9600 */
     202             :                 {
     203         108 :                     bitRateIndex = IGF_BITRATE_WB_9600;
     204             :                 }
     205         108 :                 break;
     206       41612 :             case IGF_MODE_SWB:
     207       41612 :                 if ( brate <= ACELP_9k60 )
     208             :                 {
     209       13486 :                     bitRateIndex = IGF_BITRATE_SWB_13200_CPE;
     210             :                 }
     211       28126 :                 else if ( brate <= IVAS_13k2 )
     212             :                 {
     213       14372 :                     if ( rf_mode == 1 )
     214             :                     {
     215           0 :                         bitRateIndex = IGF_BITRATE_RF_SWB_13200;
     216             :                     }
     217             :                     else
     218             :                     {
     219       14372 :                         bitRateIndex = IGF_BITRATE_SWB_16400_CPE;
     220             :                     }
     221             :                 }
     222       13754 :                 else if ( brate <= IVAS_16k4 )
     223             :                 {
     224        6610 :                     bitRateIndex = IGF_BITRATE_SWB_24400_CPE;
     225             :                 }
     226        7144 :                 else if ( brate <= IVAS_24k4 )
     227             :                 {
     228        2962 :                     bitRateIndex = IGF_BITRATE_SWB_32000_CPE;
     229             :                 }
     230        4182 :                 else if ( brate <= IVAS_32k )
     231             :                 {
     232        2846 :                     bitRateIndex = IGF_BITRATE_SWB_32000;
     233             :                 }
     234        1336 :                 else if ( brate <= IVAS_48k )
     235             :                 {
     236         542 :                     bitRateIndex = IGF_BITRATE_SWB_48000;
     237             :                 }
     238         794 :                 else if ( brate <= IVAS_64k )
     239             :                 {
     240         794 :                     bitRateIndex = IGF_BITRATE_SWB_64000;
     241             :                 }
     242       41612 :                 break;
     243       52286 :             case IGF_MODE_FB:
     244       52286 :                 if ( brate <= IVAS_16k4 )
     245             :                 {
     246        9998 :                     bitRateIndex = IGF_BITRATE_FB_24400_CPE;
     247             :                 }
     248       42288 :                 else if ( brate <= IVAS_24k4 )
     249             :                 {
     250       13970 :                     bitRateIndex = IGF_BITRATE_FB_32000_CPE;
     251             :                 }
     252       28318 :                 else if ( brate <= IVAS_32k )
     253             :                 {
     254       11324 :                     bitRateIndex = IGF_BITRATE_FB_32000;
     255             :                 }
     256       16994 :                 else if ( brate <= IVAS_48k )
     257             :                 {
     258       10222 :                     bitRateIndex = IGF_BITRATE_FB_48000;
     259             :                 }
     260        6772 :                 else if ( brate <= IVAS_64k )
     261             :                 {
     262        3894 :                     bitRateIndex = IGF_BITRATE_FB_64000;
     263             :                 }
     264        2878 :                 else if ( brate <= IVAS_96k )
     265             :                 {
     266        2062 :                     bitRateIndex = IGF_BITRATE_FB_96000;
     267             :                 }
     268         816 :                 else if ( brate <= IVAS_128k )
     269             :                 {
     270         816 :                     bitRateIndex = IGF_BITRATE_FB_128000;
     271             :                 }
     272       52286 :                 break;
     273             :         }
     274       94006 :     }
     275             :     /* EVS mono */
     276             :     else
     277             :     {
     278         426 :         switch ( bwidth )
     279             :         {
     280           0 :             case IGF_MODE_WB:
     281           0 :                 if ( brate <= ACELP_13k20 && rf_mode == 1 )
     282             :                 {
     283           0 :                     bitRateIndex = IGF_BITRATE_RF_WB_13200;
     284             :                 }
     285           0 :                 else if ( brate <= ACELP_9k60 ) /* bitrates 8000 and 9600 */
     286             :                 {
     287           0 :                     bitRateIndex = IGF_BITRATE_WB_9600;
     288             :                 }
     289           0 :                 break;
     290         426 :             case IGF_MODE_SWB:
     291         426 :                 if ( brate <= ACELP_9k60 )
     292             :                 {
     293           0 :                     bitRateIndex = IGF_BITRATE_SWB_9600;
     294             :                 }
     295         426 :                 else if ( brate <= ACELP_13k20 )
     296             :                 {
     297         192 :                     if ( rf_mode == 1 )
     298             :                     {
     299           0 :                         bitRateIndex = IGF_BITRATE_RF_SWB_13200;
     300             :                     }
     301             :                     else
     302             :                     {
     303         192 :                         bitRateIndex = IGF_BITRATE_SWB_13200;
     304             :                     }
     305             :                 }
     306         234 :                 else if ( brate <= ACELP_16k40 )
     307             :                 {
     308           0 :                     bitRateIndex = IGF_BITRATE_SWB_16400;
     309             :                 }
     310         234 :                 else if ( brate <= ACELP_24k40 )
     311             :                 {
     312         234 :                     bitRateIndex = IGF_BITRATE_SWB_24400;
     313             :                 }
     314           0 :                 else if ( brate <= ACELP_32k )
     315             :                 {
     316           0 :                     bitRateIndex = IGF_BITRATE_SWB_32000;
     317             :                 }
     318           0 :                 else if ( brate <= ACELP_48k )
     319             :                 {
     320           0 :                     bitRateIndex = IGF_BITRATE_SWB_48000;
     321             :                 }
     322           0 :                 else if ( brate <= ACELP_64k )
     323             :                 {
     324           0 :                     bitRateIndex = IGF_BITRATE_SWB_64000;
     325             :                 }
     326         426 :                 break;
     327           0 :             case IGF_MODE_FB:
     328           0 :                 if ( brate <= ACELP_16k40 )
     329             :                 {
     330           0 :                     bitRateIndex = IGF_BITRATE_FB_16400;
     331             :                 }
     332           0 :                 else if ( brate <= ACELP_24k40 )
     333             :                 {
     334           0 :                     bitRateIndex = IGF_BITRATE_FB_24400;
     335             :                 }
     336           0 :                 else if ( brate <= ACELP_32k )
     337             :                 {
     338           0 :                     bitRateIndex = IGF_BITRATE_FB_32000;
     339             :                 }
     340           0 :                 else if ( brate <= ACELP_48k )
     341             :                 {
     342           0 :                     bitRateIndex = IGF_BITRATE_FB_48000;
     343             :                 }
     344           0 :                 else if ( brate <= ACELP_64k )
     345             :                 {
     346           0 :                     bitRateIndex = IGF_BITRATE_FB_64000;
     347             :                 }
     348           0 :                 else if ( brate <= HQ_96k )
     349             :                 {
     350           0 :                     bitRateIndex = IGF_BITRATE_FB_96000;
     351             :                 }
     352           0 :                 else if ( brate <= HQ_128k )
     353             :                 {
     354           0 :                     bitRateIndex = IGF_BITRATE_FB_128000;
     355             :                 }
     356           0 :                 break;
     357             :         }
     358     2103782 :     }
     359             : 
     360     2103782 :     return bitRateIndex;
     361             : }
     362             : 
     363             : 
     364             : /*---------------------------------------------------------------------*
     365             :  * IGF_gridSetUp()
     366             :  *
     367             :  * IGF grid setup
     368             :  *---------------------------------------------------------------------*/
     369             : 
     370      302583 : 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      302583 :     swb_offset = NULL;
     388      302583 :     swb_offset_len = 0;
     389      302583 :     if ( transFac == 0.5f && bitRateIndex == IGF_BITRATE_SWB_48000_CPE )
     390             :     {
     391        2928 :         bitRateIndex = IGF_BITRATE_SWB_48000_CPE_TCX10;
     392             :     }
     393      299655 :     else if ( transFac == 0.5f && bitRateIndex == IGF_BITRATE_FB_48000_CPE )
     394             :     {
     395        8449 :         bitRateIndex = IGF_BITRATE_FB_48000_CPE_TCX10;
     396             :     }
     397             : 
     398      302583 :     if ( bitRateIndex != IGF_BITRATE_UNKNOWN )
     399             :     {
     400      302583 :         swb_offset = &swb_offset_LB_new[bitRateIndex][1];
     401      302583 :         swb_offset_len = swb_offset_LB_new[bitRateIndex][0];
     402      302583 :         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     2524697 :     for ( sfb = 0; sfb < swb_offset_len; sfb++ )
     410             :     {
     411     2222114 :         hGrid->swb_offset[sfb] = IGF_ApplyTransFac( swb_offset[sfb], transFac );
     412             :     }
     413     5039878 :     for ( sfb = swb_offset_len; sfb < IGF_MAX_SFB; sfb++ )
     414             :     {
     415     4737295 :         hGrid->swb_offset[sfb] = 0;
     416             :     }
     417             : 
     418      302583 :     hGrid->infoIsRefined = 0;
     419      302583 :     frameLength = IGF_ApplyTransFac( frameLength, transFac );
     420      302583 :     bandwidth = (float) sampleRate / 2.0f / (float) frameLength;
     421      302583 :     hGrid->swb_offset_len = swb_offset_len;
     422      302583 :     hGrid->startSfb = 0;
     423      302583 :     hGrid->stopSfb = hGrid->swb_offset_len - 1;
     424      302583 :     hGrid->startLine = hGrid->swb_offset[hGrid->startSfb];
     425      302583 :     hGrid->stopLine = hGrid->swb_offset[hGrid->stopSfb];
     426      302583 :     hGrid->startFrequency = (int16_t) round_f( bandwidth * hGrid->startLine );
     427      302583 :     hGrid->stopFrequency = (int16_t) round_f( bandwidth * hGrid->stopLine );
     428      302583 :     hGrid->minSrcSubband = (int16_t) round_f( ( igfMinFq * ( frameLength ) ) / ( sampleRate >> 1 ) );
     429      302583 :     hGrid->minSrcSubband += hGrid->minSrcSubband % 2;
     430      302583 :     hGrid->minSrcFrequency = (int16_t) round_f( bandwidth * hGrid->minSrcSubband );
     431      302583 :     hGrid->infoGranuleLen = frameLength;
     432      302583 :     hGrid->sfbWrap[0] = 0;
     433      302583 :     hGrid->tile[0] = hGrid->startLine;
     434             : 
     435      302583 :     igf_tile_offset = &igf_tile_offset_table[bitRateIndex][1];
     436      302583 :     hGrid->nTiles = igf_tile_offset_table[bitRateIndex][0];
     437      302583 :     hGrid->tile[0] = hGrid->startLine;
     438      302583 :     hGrid->sfbWrap[0] = 0;
     439     1720551 :     for ( k = 0; k < hGrid->nTiles; k++ )
     440             :     {
     441     1417968 :         hGrid->sfbWrap[k + 1] = igf_tile_offset[2 * k];
     442     1417968 :         hGrid->sbWrap[k] = hGrid->minSrcSubband + IGF_ApplyTransFac( igf_tile_offset[2 * k + 1], transFac );
     443     1417968 :         hGrid->tile[k + 1] = hGrid->swb_offset[igf_tile_offset[2 * k]];
     444             :     }
     445     1632048 :     for ( t = hGrid->nTiles + 1; t < IGF_MAX_TILES; t++ )
     446             :     {
     447     1329465 :         hGrid->tile[t] = 0;
     448     1329465 :         hGrid->sbWrap[t - 1] = 0;
     449     1329465 :         hGrid->sfbWrap[t] = 0;
     450             :     }
     451             : 
     452             :     /* adapt level envelope: */
     453      302583 :     switch ( bitRateIndex )
     454             :     {
     455        1329 :         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        1329 :             hGrid->gFactor = 0.800f;
     460        1329 :             hGrid->fFactor = 0.70f;
     461        1329 :             hGrid->lFactor = 0.60f;
     462        1329 :             break;
     463       55458 :         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       55458 :             hGrid->gFactor = 0.930f;
     470       55458 :             hGrid->fFactor = 0.20f;
     471       55458 :             hGrid->lFactor = 0.85f;
     472       55458 :             break;
     473       73290 :         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       73290 :             hGrid->gFactor = 0.965f;
     482       73290 :             hGrid->fFactor = 0.20f;
     483       73290 :             hGrid->lFactor = 0.85f;
     484       73290 :             break;
     485       31200 :         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       31200 :             hGrid->gFactor = 1.000f;
     492       31200 :             hGrid->fFactor = 0.20f;
     493       31200 :             hGrid->lFactor = 1.000f;
     494       31200 :             break;
     495      141306 :         case IGF_BITRATE_SWB_9600:
     496             :         case IGF_BITRATE_SWB_13200_CPE:
     497             :         case IGF_BITRATE_RF_SWB_13200:
     498             :         default:
     499      141306 :             hGrid->gFactor = 1.000f;
     500      141306 :             hGrid->fFactor = 0.00f;
     501      141306 :             hGrid->lFactor = 1.000f;
     502             :     }
     503             : 
     504     1632048 :     for ( t = hGrid->nTiles + 1; t < IGF_MAX_TILES; t++ )
     505             :     {
     506     1329465 :         hGrid->tile[t] = 0;
     507     1329465 :         hGrid->sbWrap[t - 1] = 0;
     508     1329465 :         hGrid->sfbWrap[t] = 0;
     509             :     }
     510             : 
     511      302583 :     return;
     512             : }
     513             : 
     514             : 
     515             : /*---------------------------------------------------------------------*
     516             :  * IGFCommonFuncsIGFConfiguration()
     517             :  *
     518             :  * changes the IGF configuration
     519             :  *---------------------------------------------------------------------*/
     520             : 
     521             : /*! r: error value: 0 -> error, 1 -> ok */
     522      100880 : 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      100880 :     retValue = 0; /* bitrate index is unknown -> error! */
     538             : 
     539             :     /* interface call for reading in settings */
     540      100880 :     hIGFInfo->bitRateIndex = IGF_MapBitRateToIndex( total_brate, bwidth, element_mode, rf_mode );
     541             : 
     542      100880 :     if ( hIGFInfo->bitRateIndex != IGF_BITRATE_UNKNOWN )
     543             :     {
     544      100861 :         retValue = 1; /* no error */
     545             : 
     546             :         /* mapping to local values */
     547      100861 :         sampleRate = igfMode[hIGFInfo->bitRateIndex].sampleRate;
     548      100861 :         frameLength = igfMode[hIGFInfo->bitRateIndex].frameLength;
     549      100861 :         igfMinFq = igfMode[hIGFInfo->bitRateIndex].igfMinFq;
     550      100861 :         maxHopsize = igfMode[hIGFInfo->bitRateIndex].maxHopsize;
     551             : 
     552             :         /* basic information */
     553      100861 :         hIGFInfo->sampleRate = sampleRate;
     554      100861 :         hIGFInfo->frameLength = frameLength;
     555      100861 :         hIGFInfo->maxHopsize = maxHopsize;
     556      100861 :         hIGFInfo->nfSeedBuf[0] = 0;
     557      100861 :         hIGFInfo->nfSeedBuf[1] = 0;
     558      100861 :         hIGFInfo->nfSeed = &hIGFInfo->nfSeedBuf[0];
     559             : 
     560             :         /* set up regular IGF grid for TCX 20  (transfac = 1.f) */
     561      100861 :         hGrid = &hIGFInfo->grid[IGF_GRID_LB_NORM];
     562      100861 :         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      100861 :         hGrid = &hIGFInfo->grid[IGF_GRID_LB_TRAN];
     566      100861 :         IGF_gridSetUp( hGrid, hIGFInfo->bitRateIndex, sampleRate, frameLength, 1.25f, igfMinFq );
     567             : 
     568             :         /* set up IGF grid for TCX 10 (transfac = 0.5) */
     569      100861 :         hGrid = &hIGFInfo->grid[IGF_GRID_LB_SHORT];
     570      100861 :         IGF_gridSetUp( hGrid, hIGFInfo->bitRateIndex, sampleRate, frameLength, 0.50f, igfMinFq );
     571             :     }
     572             : 
     573      100880 :     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      100861 : 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      100861 :     retValue = 0; /* bitrate index is unknown -> error! */
     604             : 
     605      100861 :     bitRateIndex = IGF_MapBitRateToIndex( total_brate, bwidth, element_mode, rf_mode );
     606             : 
     607      100861 :     if ( bitRateIndex != IGF_BITRATE_UNKNOWN )
     608             :     {
     609      100861 :         retValue = 1; /* no error */
     610             : 
     611      100861 :         switch ( bitRateIndex )
     612             :         {
     613         240 :             case IGF_BITRATE_WB_13200_CPE:
     614         240 :                 bitRateIndex = IGF_BITRATE_WB_9600;
     615         240 :                 break;
     616         149 :             case IGF_BITRATE_WB_16400_CPE:
     617         149 :                 bitRateIndex = IGF_BITRATE_WB_9600;
     618         149 :                 break;
     619        7459 :             case IGF_BITRATE_SWB_13200_CPE:
     620        7459 :                 bitRateIndex = IGF_BITRATE_SWB_9600;
     621        7459 :                 break;
     622        7870 :             case IGF_BITRATE_SWB_16400_CPE:
     623        7870 :                 bitRateIndex = IGF_BITRATE_SWB_13200;
     624        7870 :                 break;
     625        4820 :             case IGF_BITRATE_SWB_24400_CPE:
     626        4820 :                 bitRateIndex = IGF_BITRATE_SWB_16400;
     627        4820 :                 break;
     628        5700 :             case IGF_BITRATE_FB_24400_CPE:
     629        5700 :                 bitRateIndex = IGF_BITRATE_FB_16400;
     630        5700 :                 break;
     631        2731 :             case IGF_BITRATE_SWB_32000_CPE:
     632        2731 :                 bitRateIndex = IGF_BITRATE_SWB_24400;
     633        2731 :                 break;
     634        8062 :             case IGF_BITRATE_FB_32000_CPE:
     635        8062 :                 bitRateIndex = IGF_BITRATE_FB_24400;
     636        8062 :                 break;
     637       19027 :             case IGF_BITRATE_FB_48000_CPE:
     638             :             case IGF_BITRATE_FB_64000_CPE:
     639       19027 :                 bitRateIndex = IGF_BITRATE_FB_32000;
     640       19027 :                 break;
     641             :         }
     642             : 
     643      100861 :         switch ( bitRateIndex )
     644             :         {
     645       25627 :             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       25627 :                 *cf_se00 = cf_se00_tab;
     656       25627 :                 *cf_se01 = cf_se01_tab[bitRateIndex];
     657       25627 :                 *cf_off_se01 = cf_off_se01_tab[bitRateIndex];
     658       25627 :                 *cf_se02 = &cf_se02_tab[bitRateIndex][0][0];
     659       25627 :                 *cf_off_se02 = &cf_off_se02_tab[bitRateIndex][0];
     660       25627 :                 *cf_se10 = &cf_se10_tab[0];
     661       25627 :                 *cf_off_se10 = cf_off_se10_tab;
     662       25627 :                 *cf_se11 = &cf_se11_tab[0][0][0];
     663       25627 :                 *cf_off_se11 = &cf_off_se11_tab[0][0];
     664       25627 :                 break;
     665       38451 :             case IGF_BITRATE_FB_16400:
     666             :             case IGF_BITRATE_FB_24400:
     667             :             case IGF_BITRATE_FB_32000:
     668       38451 :                 bitRateIndex = bitRateIndex - IGF_BITRATE_FB_16400 + IGF_BITRATE_SWB_16400;
     669       38451 :                 *cf_se00 = cf_se00_tab;
     670       38451 :                 *cf_se01 = cf_se01_tab[bitRateIndex];
     671       38451 :                 *cf_off_se01 = cf_off_se01_tab[bitRateIndex];
     672       38451 :                 *cf_se02 = &cf_se02_tab[bitRateIndex][0][0];
     673       38451 :                 *cf_off_se02 = &cf_off_se02_tab[bitRateIndex][0];
     674       38451 :                 *cf_se10 = &cf_se10_tab[0];
     675       38451 :                 *cf_off_se10 = cf_off_se10_tab;
     676       38451 :                 *cf_se11 = &cf_se11_tab[0][0][0];
     677       38451 :                 *cf_off_se11 = &cf_off_se11_tab[0][0];
     678       38451 :                 break;
     679        7058 :             case IGF_BITRATE_FB_48000:
     680             :             case IGF_BITRATE_FB_64000:
     681        7058 :                 bitRateIndex = bitRateIndex - IGF_BITRATE_FB_48000 + IGF_BITRATE_SWB_48000;
     682        7058 :                 *cf_se00 = cf_se00_tab;
     683        7058 :                 *cf_se01 = cf_se01_tab[bitRateIndex];
     684        7058 :                 *cf_off_se01 = cf_off_se01_tab[bitRateIndex];
     685        7058 :                 *cf_se02 = &cf_se02_tab[bitRateIndex][0][0];
     686        7058 :                 *cf_off_se02 = &cf_off_se02_tab[bitRateIndex][0];
     687        7058 :                 *cf_se10 = &cf_se10_tab[0];
     688        7058 :                 *cf_off_se10 = cf_off_se10_tab;
     689        7058 :                 *cf_se11 = &cf_se11_tab[0][0][0];
     690        7058 :                 *cf_off_se11 = &cf_off_se11_tab[0][0];
     691        7058 :                 break;
     692       19640 :             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       19640 :                 bitRateIndex = IGF_BITRATE_SWB_48000;
     698       19640 :                 *cf_se00 = cf_se00_tab;
     699       19640 :                 *cf_se01 = cf_se01_tab[bitRateIndex];
     700       19640 :                 *cf_off_se01 = cf_off_se01_tab[bitRateIndex];
     701       19640 :                 *cf_se02 = &cf_se02_tab[bitRateIndex][0][0];
     702       19640 :                 *cf_off_se02 = &cf_off_se02_tab[bitRateIndex][0];
     703       19640 :                 *cf_se10 = &cf_se10_tab[0];
     704       19640 :                 *cf_off_se10 = cf_off_se10_tab;
     705       19640 :                 *cf_se11 = &cf_se11_tab[0][0][0];
     706       19640 :                 *cf_off_se11 = &cf_off_se11_tab[0][0];
     707       19640 :                 break;
     708        2928 :             case IGF_BITRATE_SWB_48000_CPE:
     709        2928 :                 bitRateIndex = IGF_BITRATE_SWB_16400;
     710        2928 :                 *cf_se00 = cf_se00_tab;
     711        2928 :                 *cf_se01 = cf_se01_tab[bitRateIndex];
     712        2928 :                 *cf_off_se01 = cf_off_se01_tab[bitRateIndex];
     713        2928 :                 *cf_se02 = &cf_se02_tab[bitRateIndex][0][0];
     714        2928 :                 *cf_off_se02 = &cf_off_se02_tab[bitRateIndex][0];
     715        2928 :                 *cf_se10 = &cf_se10_tab[0];
     716        2928 :                 *cf_off_se10 = cf_off_se10_tab;
     717        2928 :                 *cf_se11 = &cf_se11_tab[0][0][0];
     718        2928 :                 *cf_off_se11 = &cf_off_se11_tab[0][0];
     719        2928 :                 break;
     720        7157 :             case IGF_BITRATE_SWB_64000_CPE:
     721             :             case IGF_BITRATE_SWB_80000_CPE:
     722             :             case IGF_BITRATE_SWB_96000_CPE:
     723        7157 :                 bitRateIndex = IGF_BITRATE_SWB_48000; /*bitRateIndex-IGF_BITRATE_SWB_56000+IGF_BITRATE_SWB_48000;*/
     724        7157 :                 *cf_se00 = cf_se00_tab;
     725        7157 :                 *cf_se01 = cf_se01_tab[bitRateIndex];
     726        7157 :                 *cf_off_se01 = cf_off_se01_tab[bitRateIndex];
     727        7157 :                 *cf_se02 = &cf_se02_tab[bitRateIndex][0][0];
     728        7157 :                 *cf_off_se02 = &cf_off_se02_tab[bitRateIndex][0];
     729        7157 :                 *cf_se10 = &cf_se10_tab[0];
     730        7157 :                 *cf_off_se10 = cf_off_se10_tab;
     731        7157 :                 *cf_se11 = &cf_se11_tab[0][0][0];
     732        7157 :                 *cf_off_se11 = &cf_off_se11_tab[0][0];
     733        7157 :                 break;
     734           0 :             case IGF_BITRATE_UNKNOWN:
     735             :             default:
     736           0 :                 assert( 0 );
     737             :         }
     738           0 :     }
     739             : 
     740      100861 :     return retValue;
     741             : }

Generated by: LCOV version 1.14