LCOV - code coverage report
Current view: top level - lib_com - igf_base.c (source / functions) Hit Total Coverage
Test: Coverage on main @ 6baab0c613aa6c7100498ed7b93676aa8198a493 Lines: 337 350 96.3 %
Date: 2025-05-29 08:28:55 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    62708692 : 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    62708692 :     int16_t ret = val;
      60             : 
      61    62708692 :     if ( transFac != 1.f )
      62             :     {
      63    40848946 :         ret = (int16_t) round_f( val * transFac );
      64    40848946 :         ret += ( ret & 1 );
      65             :     }
      66             : 
      67    62708692 :     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    23376841 : 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    23376841 :     int16_t bitRateIndex = IGF_BITRATE_UNKNOWN;
      86             : 
      87             :     /* Stereo/CPE modes */
      88    23376841 :     if ( element_mode > IVAS_SCE )
      89             :     {
      90    22523249 :         switch ( bwidth )
      91             :         {
      92        4882 :             case IGF_MODE_WB:
      93        4882 :                 if ( brate <= IVAS_13k2 && rf_mode == 1 )
      94             :                 {
      95           0 :                     bitRateIndex = IGF_BITRATE_RF_WB_13200;
      96             :                 }
      97        4882 :                 else if ( brate <= ACELP_9k60 )
      98             :                 {
      99        3000 :                     bitRateIndex = IGF_BITRATE_WB_13200_CPE;
     100             :                 }
     101        1882 :                 else if ( brate <= IVAS_13k2 )
     102             :                 {
     103        1752 :                     bitRateIndex = IGF_BITRATE_WB_16400_CPE;
     104             :                 }
     105        4882 :                 break;
     106     6132050 :             case IGF_MODE_SWB:
     107             :                 /* DFT and TD Stereo bitrates */
     108     6132050 :                 if ( brate <= ACELP_9k60 )
     109             :                 {
     110       20490 :                     bitRateIndex = IGF_BITRATE_SWB_13200_CPE;
     111             :                 }
     112     6111560 :                 else if ( brate <= IVAS_13k2 )
     113             :                 {
     114       12852 :                     if ( rf_mode == 1 )
     115             :                     {
     116           0 :                         bitRateIndex = IGF_BITRATE_RF_SWB_13200;
     117             :                     }
     118             :                     else
     119             :                     {
     120       12852 :                         bitRateIndex = IGF_BITRATE_SWB_16400_CPE;
     121             :                     }
     122             :                 }
     123     6098708 :                 else if ( brate <= IVAS_16k4 )
     124             :                 {
     125       39842 :                     bitRateIndex = IGF_BITRATE_SWB_24400_CPE;
     126             :                 }
     127     6058866 :                 else if ( brate <= IVAS_24k4 )
     128             :                 {
     129       19324 :                     bitRateIndex = IGF_BITRATE_SWB_32000_CPE;
     130             :                 }
     131     6039542 :                 else if ( brate <= IVAS_32k )
     132             :                 {
     133           0 :                     bitRateIndex = IGF_BITRATE_SWB_32000;
     134             :                 }
     135             :                 /* MDCT Stereo bitrates */
     136     6039542 :                 else if ( brate <= IVAS_48k )
     137             :                 {
     138     2082397 :                     bitRateIndex = IGF_BITRATE_SWB_48000_CPE;
     139             :                 }
     140     3957145 :                 else if ( brate <= IVAS_64k )
     141             :                 {
     142     2315517 :                     bitRateIndex = IGF_BITRATE_SWB_64000_CPE;
     143             :                 }
     144     1641628 :                 else if ( brate <= IVAS_80k )
     145             :                 {
     146      714152 :                     bitRateIndex = IGF_BITRATE_SWB_80000_CPE;
     147             :                 }
     148      927476 :                 else if ( brate <= IVAS_96k )
     149             :                 {
     150      927452 :                     bitRateIndex = IGF_BITRATE_SWB_96000_CPE;
     151             :                 }
     152     6132050 :                 break;
     153    16386317 :             case IGF_MODE_FB:
     154             :                 /* DFT and TD Stereo bitrates */
     155    16386317 :                 if ( brate <= IVAS_16k4 )
     156             :                 {
     157       22812 :                     bitRateIndex = IGF_BITRATE_FB_24400_CPE;
     158             :                 }
     159    16363505 :                 else if ( brate <= IVAS_24k4 )
     160             :                 {
     161       22294 :                     bitRateIndex = IGF_BITRATE_FB_32000_CPE;
     162             :                 }
     163    16341211 :                 else if ( brate <= IVAS_32k )
     164             :                 {
     165           0 :                     bitRateIndex = IGF_BITRATE_FB_32000;
     166             :                 }
     167             :                 /* MDCT Stereo bitrates */
     168    16341211 :                 else if ( brate <= IVAS_48k )
     169             :                 {
     170     2815200 :                     bitRateIndex = IGF_BITRATE_FB_48000_CPE;
     171             :                 }
     172    13526011 :                 else if ( brate <= IVAS_64k )
     173             :                 {
     174     3899155 :                     bitRateIndex = IGF_BITRATE_FB_64000_CPE;
     175             :                 }
     176     9626856 :                 else if ( brate <= IVAS_80k )
     177             :                 {
     178     1090708 :                     bitRateIndex = IGF_BITRATE_FB_80000_CPE;
     179             :                 }
     180     8536148 :                 else if ( brate <= IVAS_96k )
     181             :                 {
     182     3189314 :                     bitRateIndex = IGF_BITRATE_FB_96000_CPE;
     183             :                 }
     184     5346834 :                 else if ( brate <= IVAS_128k )
     185             :                 {
     186     5346834 :                     bitRateIndex = IGF_BITRATE_FB_128000_CPE;
     187             :                 }
     188    16386317 :                 break;
     189             :         }
     190    22523249 :     }
     191             :     /* SCE modes: use tunings done for DFT stereo bitrates also for according SCE bitrates, otherwise same config as mono modes */
     192      853592 :     else if ( element_mode == IVAS_SCE )
     193             :     {
     194      849138 :         switch ( bwidth )
     195             :         {
     196       11486 :             case IGF_MODE_WB:
     197       11486 :                 if ( brate <= IVAS_13k2 && rf_mode == 1 )
     198             :                 {
     199           0 :                     bitRateIndex = IGF_BITRATE_RF_WB_13200;
     200             :                 }
     201       11486 :                 else if ( brate <= ACELP_9k60 ) /* bitrates 8000 and 9600 */
     202             :                 {
     203       11486 :                     bitRateIndex = IGF_BITRATE_WB_9600;
     204             :                 }
     205       11486 :                 break;
     206      349144 :             case IGF_MODE_SWB:
     207      349144 :                 if ( brate <= ACELP_9k60 )
     208             :                 {
     209       78742 :                     bitRateIndex = IGF_BITRATE_SWB_13200_CPE;
     210             :                 }
     211      270402 :                 else if ( brate <= IVAS_13k2 )
     212             :                 {
     213       83170 :                     if ( rf_mode == 1 )
     214             :                     {
     215           0 :                         bitRateIndex = IGF_BITRATE_RF_SWB_13200;
     216             :                     }
     217             :                     else
     218             :                     {
     219       83170 :                         bitRateIndex = IGF_BITRATE_SWB_16400_CPE;
     220             :                     }
     221             :                 }
     222      187232 :                 else if ( brate <= IVAS_16k4 )
     223             :                 {
     224       64470 :                     bitRateIndex = IGF_BITRATE_SWB_24400_CPE;
     225             :                 }
     226      122762 :                 else if ( brate <= IVAS_24k4 )
     227             :                 {
     228       75068 :                     bitRateIndex = IGF_BITRATE_SWB_32000_CPE;
     229             :                 }
     230       47694 :                 else if ( brate <= IVAS_32k )
     231             :                 {
     232       21898 :                     bitRateIndex = IGF_BITRATE_SWB_32000;
     233             :                 }
     234       25796 :                 else if ( brate <= IVAS_48k )
     235             :                 {
     236       14676 :                     bitRateIndex = IGF_BITRATE_SWB_48000;
     237             :                 }
     238       11120 :                 else if ( brate <= IVAS_64k )
     239             :                 {
     240       11120 :                     bitRateIndex = IGF_BITRATE_SWB_64000;
     241             :                 }
     242      349144 :                 break;
     243      488508 :             case IGF_MODE_FB:
     244      488508 :                 if ( brate <= IVAS_16k4 )
     245             :                 {
     246       83436 :                     bitRateIndex = IGF_BITRATE_FB_24400_CPE;
     247             :                 }
     248      405072 :                 else if ( brate <= IVAS_24k4 )
     249             :                 {
     250      173074 :                     bitRateIndex = IGF_BITRATE_FB_32000_CPE;
     251             :                 }
     252      231998 :                 else if ( brate <= IVAS_32k )
     253             :                 {
     254       81486 :                     bitRateIndex = IGF_BITRATE_FB_32000;
     255             :                 }
     256      150512 :                 else if ( brate <= IVAS_48k )
     257             :                 {
     258       66132 :                     bitRateIndex = IGF_BITRATE_FB_48000;
     259             :                 }
     260       84380 :                 else if ( brate <= IVAS_64k )
     261             :                 {
     262       47720 :                     bitRateIndex = IGF_BITRATE_FB_64000;
     263             :                 }
     264       36660 :                 else if ( brate <= IVAS_96k )
     265             :                 {
     266       27516 :                     bitRateIndex = IGF_BITRATE_FB_96000;
     267             :                 }
     268        9144 :                 else if ( brate <= IVAS_128k )
     269             :                 {
     270        9144 :                     bitRateIndex = IGF_BITRATE_FB_128000;
     271             :                 }
     272      488508 :                 break;
     273             :         }
     274      849138 :     }
     275             :     /* EVS mono */
     276             :     else
     277             :     {
     278        4454 :         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        3778 :             case IGF_MODE_SWB:
     291        3778 :                 if ( brate <= ACELP_9k60 )
     292             :                 {
     293          48 :                     bitRateIndex = IGF_BITRATE_SWB_9600;
     294             :                 }
     295        3730 :                 else if ( brate <= ACELP_13k20 )
     296             :                 {
     297        1154 :                     if ( rf_mode == 1 )
     298             :                     {
     299          98 :                         bitRateIndex = IGF_BITRATE_RF_SWB_13200;
     300             :                     }
     301             :                     else
     302             :                     {
     303        1056 :                         bitRateIndex = IGF_BITRATE_SWB_13200;
     304             :                     }
     305             :                 }
     306        2576 :                 else if ( brate <= ACELP_16k40 )
     307             :                 {
     308         316 :                     bitRateIndex = IGF_BITRATE_SWB_16400;
     309             :                 }
     310        2260 :                 else if ( brate <= ACELP_24k40 )
     311             :                 {
     312        2040 :                     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        3778 :                 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    23376841 :     }
     359             : 
     360    23376841 :     return bitRateIndex;
     361             : }
     362             : 
     363             : 
     364             : /*---------------------------------------------------------------------*
     365             :  * IGF_gridSetUp()
     366             :  *
     367             :  * IGF grid setup
     368             :  *---------------------------------------------------------------------*/
     369             : 
     370     3114786 : 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     3114786 :     swb_offset = NULL;
     388     3114786 :     swb_offset_len = 0;
     389     3114786 :     if ( transFac == 0.5f && bitRateIndex == IGF_BITRATE_SWB_48000_CPE )
     390             :     {
     391       28179 :         bitRateIndex = IGF_BITRATE_SWB_48000_CPE_TCX10;
     392             :     }
     393     3086607 :     else if ( transFac == 0.5f && bitRateIndex == IGF_BITRATE_FB_48000_CPE )
     394             :     {
     395      138639 :         bitRateIndex = IGF_BITRATE_FB_48000_CPE_TCX10;
     396             :     }
     397             : 
     398     3114786 :     if ( bitRateIndex != IGF_BITRATE_UNKNOWN )
     399             :     {
     400     3114786 :         swb_offset = &swb_offset_LB_new[bitRateIndex][1];
     401     3114786 :         swb_offset_len = swb_offset_LB_new[bitRateIndex][0];
     402     3114786 :         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    26274858 :     for ( sfb = 0; sfb < swb_offset_len; sfb++ )
     410             :     {
     411    23160072 :         hGrid->swb_offset[sfb] = IGF_ApplyTransFac( swb_offset[sfb], transFac );
     412             :     }
     413    51594792 :     for ( sfb = swb_offset_len; sfb < IGF_MAX_SFB; sfb++ )
     414             :     {
     415    48480006 :         hGrid->swb_offset[sfb] = 0;
     416             :     }
     417             : 
     418     3114786 :     hGrid->infoIsRefined = 0;
     419     3114786 :     frameLength = IGF_ApplyTransFac( frameLength, transFac );
     420     3114786 :     bandwidth = (float) sampleRate / 2.0f / (float) frameLength;
     421     3114786 :     hGrid->swb_offset_len = swb_offset_len;
     422     3114786 :     hGrid->startSfb = 0;
     423     3114786 :     hGrid->stopSfb = hGrid->swb_offset_len - 1;
     424     3114786 :     hGrid->startLine = hGrid->swb_offset[hGrid->startSfb];
     425     3114786 :     hGrid->stopLine = hGrid->swb_offset[hGrid->stopSfb];
     426     3114786 :     hGrid->startFrequency = (int16_t) round_f( bandwidth * hGrid->startLine );
     427     3114786 :     hGrid->stopFrequency = (int16_t) round_f( bandwidth * hGrid->stopLine );
     428     3114786 :     hGrid->minSrcSubband = (int16_t) round_f( ( igfMinFq * ( frameLength ) ) / ( sampleRate >> 1 ) );
     429     3114786 :     hGrid->minSrcSubband += hGrid->minSrcSubband % 2;
     430     3114786 :     hGrid->minSrcFrequency = (int16_t) round_f( bandwidth * hGrid->minSrcSubband );
     431     3114786 :     hGrid->infoGranuleLen = frameLength;
     432     3114786 :     hGrid->sfbWrap[0] = 0;
     433     3114786 :     hGrid->tile[0] = hGrid->startLine;
     434             : 
     435     3114786 :     igf_tile_offset = &igf_tile_offset_table[bitRateIndex][1];
     436     3114786 :     hGrid->nTiles = igf_tile_offset_table[bitRateIndex][0];
     437     3114786 :     hGrid->tile[0] = hGrid->startLine;
     438     3114786 :     hGrid->sfbWrap[0] = 0;
     439    18248457 :     for ( k = 0; k < hGrid->nTiles; k++ )
     440             :     {
     441    15133671 :         hGrid->sfbWrap[k + 1] = igf_tile_offset[2 * k];
     442    15133671 :         hGrid->sbWrap[k] = hGrid->minSrcSubband + IGF_ApplyTransFac( igf_tile_offset[2 * k + 1], transFac );
     443    15133671 :         hGrid->tile[k + 1] = hGrid->swb_offset[igf_tile_offset[2 * k]];
     444             :     }
     445    16307241 :     for ( t = hGrid->nTiles + 1; t < IGF_MAX_TILES; t++ )
     446             :     {
     447    13192455 :         hGrid->tile[t] = 0;
     448    13192455 :         hGrid->sbWrap[t - 1] = 0;
     449    13192455 :         hGrid->sfbWrap[t] = 0;
     450             :     }
     451             : 
     452             :     /* adapt level envelope: */
     453     3114786 :     switch ( bitRateIndex )
     454             :     {
     455       24825 :         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       24825 :             hGrid->gFactor = 0.800f;
     460       24825 :             hGrid->fFactor = 0.70f;
     461       24825 :             hGrid->lFactor = 0.60f;
     462       24825 :             break;
     463      462003 :         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      462003 :             hGrid->gFactor = 0.930f;
     470      462003 :             hGrid->fFactor = 0.20f;
     471      462003 :             hGrid->lFactor = 0.85f;
     472      462003 :             break;
     473      760206 :         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      760206 :             hGrid->gFactor = 0.965f;
     482      760206 :             hGrid->fFactor = 0.20f;
     483      760206 :             hGrid->lFactor = 0.85f;
     484      760206 :             break;
     485      305388 :         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      305388 :             hGrid->gFactor = 1.000f;
     492      305388 :             hGrid->fFactor = 0.20f;
     493      305388 :             hGrid->lFactor = 1.000f;
     494      305388 :             break;
     495     1562364 :         case IGF_BITRATE_SWB_9600:
     496             :         case IGF_BITRATE_SWB_13200_CPE:
     497             :         case IGF_BITRATE_RF_SWB_13200:
     498             :         default:
     499     1562364 :             hGrid->gFactor = 1.000f;
     500     1562364 :             hGrid->fFactor = 0.00f;
     501     1562364 :             hGrid->lFactor = 1.000f;
     502             :     }
     503             : 
     504    16307241 :     for ( t = hGrid->nTiles + 1; t < IGF_MAX_TILES; t++ )
     505             :     {
     506    13192455 :         hGrid->tile[t] = 0;
     507    13192455 :         hGrid->sbWrap[t - 1] = 0;
     508    13192455 :         hGrid->sfbWrap[t] = 0;
     509             :     }
     510             : 
     511     3114786 :     return;
     512             : }
     513             : 
     514             : 
     515             : /*---------------------------------------------------------------------*
     516             :  * IGFCommonFuncsIGFConfiguration()
     517             :  *
     518             :  * changes the IGF configuration
     519             :  *---------------------------------------------------------------------*/
     520             : 
     521             : /*! r: error value: 0 -> error, 1 -> ok */
     522     1038416 : 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     1038416 :     retValue = 0; /* bitrate index is unknown -> error! */
     538             : 
     539             :     /* interface call for reading in settings */
     540     1038416 :     hIGFInfo->bitRateIndex = IGF_MapBitRateToIndex( total_brate, bwidth, element_mode, rf_mode );
     541             : 
     542     1038416 :     if ( hIGFInfo->bitRateIndex != IGF_BITRATE_UNKNOWN )
     543             :     {
     544     1038262 :         retValue = 1; /* no error */
     545             : 
     546             :         /* mapping to local values */
     547     1038262 :         sampleRate = igfMode[hIGFInfo->bitRateIndex].sampleRate;
     548     1038262 :         frameLength = igfMode[hIGFInfo->bitRateIndex].frameLength;
     549     1038262 :         igfMinFq = igfMode[hIGFInfo->bitRateIndex].igfMinFq;
     550     1038262 :         maxHopsize = igfMode[hIGFInfo->bitRateIndex].maxHopsize;
     551             : 
     552             :         /* basic information */
     553     1038262 :         hIGFInfo->sampleRate = sampleRate;
     554     1038262 :         hIGFInfo->frameLength = frameLength;
     555     1038262 :         hIGFInfo->maxHopsize = maxHopsize;
     556     1038262 :         hIGFInfo->nfSeedBuf[0] = 0;
     557     1038262 :         hIGFInfo->nfSeedBuf[1] = 0;
     558     1038262 :         hIGFInfo->nfSeed = &hIGFInfo->nfSeedBuf[0];
     559             : 
     560             :         /* set up regular IGF grid for TCX 20  (transfac = 1.f) */
     561     1038262 :         hGrid = &hIGFInfo->grid[IGF_GRID_LB_NORM];
     562     1038262 :         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     1038262 :         hGrid = &hIGFInfo->grid[IGF_GRID_LB_TRAN];
     566     1038262 :         IGF_gridSetUp( hGrid, hIGFInfo->bitRateIndex, sampleRate, frameLength, 1.25f, igfMinFq );
     567             : 
     568             :         /* set up IGF grid for TCX 10 (transfac = 0.5) */
     569     1038262 :         hGrid = &hIGFInfo->grid[IGF_GRID_LB_SHORT];
     570     1038262 :         IGF_gridSetUp( hGrid, hIGFInfo->bitRateIndex, sampleRate, frameLength, 0.50f, igfMinFq );
     571             :     }
     572             : 
     573     1038416 :     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     1038262 : 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     1038262 :     retValue = 0; /* bitrate index is unknown -> error! */
     604             : 
     605     1038262 :     bitRateIndex = IGF_MapBitRateToIndex( total_brate, bwidth, element_mode, rf_mode );
     606             : 
     607     1038262 :     if ( bitRateIndex != IGF_BITRATE_UNKNOWN )
     608             :     {
     609     1038262 :         retValue = 1; /* no error */
     610             : 
     611     1038262 :         switch ( bitRateIndex )
     612             :         {
     613        1500 :             case IGF_BITRATE_WB_13200_CPE:
     614        1500 :                 bitRateIndex = IGF_BITRATE_WB_9600;
     615        1500 :                 break;
     616         876 :             case IGF_BITRATE_WB_16400_CPE:
     617         876 :                 bitRateIndex = IGF_BITRATE_WB_9600;
     618         876 :                 break;
     619       49616 :             case IGF_BITRATE_SWB_13200_CPE:
     620       49616 :                 bitRateIndex = IGF_BITRATE_SWB_9600;
     621       49616 :                 break;
     622       48011 :             case IGF_BITRATE_SWB_16400_CPE:
     623       48011 :                 bitRateIndex = IGF_BITRATE_SWB_13200;
     624       48011 :                 break;
     625       52156 :             case IGF_BITRATE_SWB_24400_CPE:
     626       52156 :                 bitRateIndex = IGF_BITRATE_SWB_16400;
     627       52156 :                 break;
     628       53124 :             case IGF_BITRATE_FB_24400_CPE:
     629       53124 :                 bitRateIndex = IGF_BITRATE_FB_16400;
     630       53124 :                 break;
     631       47196 :             case IGF_BITRATE_SWB_32000_CPE:
     632       47196 :                 bitRateIndex = IGF_BITRATE_SWB_24400;
     633       47196 :                 break;
     634       97684 :             case IGF_BITRATE_FB_32000_CPE:
     635       97684 :                 bitRateIndex = IGF_BITRATE_FB_24400;
     636       97684 :                 break;
     637      246429 :             case IGF_BITRATE_FB_48000_CPE:
     638             :             case IGF_BITRATE_FB_64000_CPE:
     639      246429 :                 bitRateIndex = IGF_BITRATE_FB_32000;
     640      246429 :                 break;
     641             :         }
     642             : 
     643     1038262 :         switch ( bitRateIndex )
     644             :         {
     645      230990 :             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      230990 :                 *cf_se00 = cf_se00_tab;
     656      230990 :                 *cf_se01 = cf_se01_tab[bitRateIndex];
     657      230990 :                 *cf_off_se01 = cf_off_se01_tab[bitRateIndex];
     658      230990 :                 *cf_se02 = &cf_se02_tab[bitRateIndex][0][0];
     659      230990 :                 *cf_off_se02 = &cf_off_se02_tab[bitRateIndex][0];
     660      230990 :                 *cf_se10 = &cf_se10_tab[0];
     661      230990 :                 *cf_off_se10 = cf_off_se10_tab;
     662      230990 :                 *cf_se11 = &cf_se11_tab[0][0][0];
     663      230990 :                 *cf_off_se11 = &cf_off_se11_tab[0][0];
     664      230990 :                 break;
     665      438086 :             case IGF_BITRATE_FB_16400:
     666             :             case IGF_BITRATE_FB_24400:
     667             :             case IGF_BITRATE_FB_32000:
     668      438086 :                 bitRateIndex = bitRateIndex - IGF_BITRATE_FB_16400 + IGF_BITRATE_SWB_16400;
     669      438086 :                 *cf_se00 = cf_se00_tab;
     670      438086 :                 *cf_se01 = cf_se01_tab[bitRateIndex];
     671      438086 :                 *cf_off_se01 = cf_off_se01_tab[bitRateIndex];
     672      438086 :                 *cf_se02 = &cf_se02_tab[bitRateIndex][0][0];
     673      438086 :                 *cf_off_se02 = &cf_off_se02_tab[bitRateIndex][0];
     674      438086 :                 *cf_se10 = &cf_se10_tab[0];
     675      438086 :                 *cf_off_se10 = cf_off_se10_tab;
     676      438086 :                 *cf_se11 = &cf_se11_tab[0][0][0];
     677      438086 :                 *cf_off_se11 = &cf_off_se11_tab[0][0];
     678      438086 :                 break;
     679       56946 :             case IGF_BITRATE_FB_48000:
     680             :             case IGF_BITRATE_FB_64000:
     681       56946 :                 bitRateIndex = bitRateIndex - IGF_BITRATE_FB_48000 + IGF_BITRATE_SWB_48000;
     682       56946 :                 *cf_se00 = cf_se00_tab;
     683       56946 :                 *cf_se01 = cf_se01_tab[bitRateIndex];
     684       56946 :                 *cf_off_se01 = cf_off_se01_tab[bitRateIndex];
     685       56946 :                 *cf_se02 = &cf_se02_tab[bitRateIndex][0][0];
     686       56946 :                 *cf_off_se02 = &cf_off_se02_tab[bitRateIndex][0];
     687       56946 :                 *cf_se10 = &cf_se10_tab[0];
     688       56946 :                 *cf_off_se10 = cf_off_se10_tab;
     689       56946 :                 *cf_se11 = &cf_se11_tab[0][0][0];
     690       56946 :                 *cf_off_se11 = &cf_off_se11_tab[0][0];
     691       56946 :                 break;
     692      215277 :             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      215277 :                 bitRateIndex = IGF_BITRATE_SWB_48000;
     698      215277 :                 *cf_se00 = cf_se00_tab;
     699      215277 :                 *cf_se01 = cf_se01_tab[bitRateIndex];
     700      215277 :                 *cf_off_se01 = cf_off_se01_tab[bitRateIndex];
     701      215277 :                 *cf_se02 = &cf_se02_tab[bitRateIndex][0][0];
     702      215277 :                 *cf_off_se02 = &cf_off_se02_tab[bitRateIndex][0];
     703      215277 :                 *cf_se10 = &cf_se10_tab[0];
     704      215277 :                 *cf_off_se10 = cf_off_se10_tab;
     705      215277 :                 *cf_se11 = &cf_se11_tab[0][0][0];
     706      215277 :                 *cf_off_se11 = &cf_off_se11_tab[0][0];
     707      215277 :                 break;
     708       28179 :             case IGF_BITRATE_SWB_48000_CPE:
     709       28179 :                 bitRateIndex = IGF_BITRATE_SWB_16400;
     710       28179 :                 *cf_se00 = cf_se00_tab;
     711       28179 :                 *cf_se01 = cf_se01_tab[bitRateIndex];
     712       28179 :                 *cf_off_se01 = cf_off_se01_tab[bitRateIndex];
     713       28179 :                 *cf_se02 = &cf_se02_tab[bitRateIndex][0][0];
     714       28179 :                 *cf_off_se02 = &cf_off_se02_tab[bitRateIndex][0];
     715       28179 :                 *cf_se10 = &cf_se10_tab[0];
     716       28179 :                 *cf_off_se10 = cf_off_se10_tab;
     717       28179 :                 *cf_se11 = &cf_se11_tab[0][0][0];
     718       28179 :                 *cf_off_se11 = &cf_off_se11_tab[0][0];
     719       28179 :                 break;
     720       68784 :             case IGF_BITRATE_SWB_64000_CPE:
     721             :             case IGF_BITRATE_SWB_80000_CPE:
     722             :             case IGF_BITRATE_SWB_96000_CPE:
     723       68784 :                 bitRateIndex = IGF_BITRATE_SWB_48000; /*bitRateIndex-IGF_BITRATE_SWB_56000+IGF_BITRATE_SWB_48000;*/
     724       68784 :                 *cf_se00 = cf_se00_tab;
     725       68784 :                 *cf_se01 = cf_se01_tab[bitRateIndex];
     726       68784 :                 *cf_off_se01 = cf_off_se01_tab[bitRateIndex];
     727       68784 :                 *cf_se02 = &cf_se02_tab[bitRateIndex][0][0];
     728       68784 :                 *cf_off_se02 = &cf_off_se02_tab[bitRateIndex][0];
     729       68784 :                 *cf_se10 = &cf_se10_tab[0];
     730       68784 :                 *cf_off_se10 = cf_off_se10_tab;
     731       68784 :                 *cf_se11 = &cf_se11_tab[0][0][0];
     732       68784 :                 *cf_off_se11 = &cf_off_se11_tab[0][0];
     733       68784 :                 break;
     734           0 :             case IGF_BITRATE_UNKNOWN:
     735             :             default:
     736           0 :                 assert( 0 );
     737             :         }
     738           0 :     }
     739             : 
     740     1038262 :     return retValue;
     741             : }

Generated by: LCOV version 1.14