LCOV - code coverage report
Current view: top level - lib_com - igf_base.c (source / functions) Hit Total Coverage
Test: Coverage on main -- conformance test test_26252.py @ a21f94bc6bac334fe001a5bad2f7b32b79038097 Lines: 309 350 88.3 %
Date: 2025-11-01 05:07:43 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     3405104 : 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     3405104 :     int16_t ret = val;
      60             : 
      61     3405104 :     if ( transFac != 1.f )
      62             :     {
      63     2236124 :         ret = (int16_t) round_f( val * transFac );
      64     2236124 :         ret += ( ret & 1 );
      65             :     }
      66             : 
      67     3405104 :     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     1488912 : 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     1488912 :     int16_t bitRateIndex = IGF_BITRATE_UNKNOWN;
      86             : 
      87             :     /* Stereo/CPE modes */
      88     1488912 :     if ( element_mode > IVAS_SCE )
      89             :     {
      90     1438592 :         switch ( bwidth )
      91             :         {
      92         360 :             case IGF_MODE_WB:
      93         360 :                 if ( brate <= IVAS_13k2 && rf_mode == 1 )
      94             :                 {
      95           0 :                     bitRateIndex = IGF_BITRATE_RF_WB_13200;
      96             :                 }
      97         360 :                 else if ( brate <= ACELP_9k60 )
      98             :                 {
      99         208 :                     bitRateIndex = IGF_BITRATE_WB_13200_CPE;
     100             :                 }
     101         152 :                 else if ( brate <= IVAS_13k2 )
     102             :                 {
     103         152 :                     bitRateIndex = IGF_BITRATE_WB_16400_CPE;
     104             :                 }
     105         360 :                 break;
     106      203766 :             case IGF_MODE_SWB:
     107             :                 /* DFT and TD Stereo bitrates */
     108      203766 :                 if ( brate <= ACELP_9k60 )
     109             :                 {
     110         652 :                     bitRateIndex = IGF_BITRATE_SWB_13200_CPE;
     111             :                 }
     112      203114 :                 else if ( brate <= IVAS_13k2 )
     113             :                 {
     114         568 :                     if ( rf_mode == 1 )
     115             :                     {
     116           0 :                         bitRateIndex = IGF_BITRATE_RF_SWB_13200;
     117             :                     }
     118             :                     else
     119             :                     {
     120         568 :                         bitRateIndex = IGF_BITRATE_SWB_16400_CPE;
     121             :                     }
     122             :                 }
     123      202546 :                 else if ( brate <= IVAS_16k4 )
     124             :                 {
     125        1638 :                     bitRateIndex = IGF_BITRATE_SWB_24400_CPE;
     126             :                 }
     127      200908 :                 else if ( brate <= IVAS_24k4 )
     128             :                 {
     129         762 :                     bitRateIndex = IGF_BITRATE_SWB_32000_CPE;
     130             :                 }
     131      200146 :                 else if ( brate <= IVAS_32k )
     132             :                 {
     133           0 :                     bitRateIndex = IGF_BITRATE_SWB_32000;
     134             :                 }
     135             :                 /* MDCT Stereo bitrates */
     136      200146 :                 else if ( brate <= IVAS_48k )
     137             :                 {
     138       95372 :                     bitRateIndex = IGF_BITRATE_SWB_48000_CPE;
     139             :                 }
     140      104774 :                 else if ( brate <= IVAS_64k )
     141             :                 {
     142       41595 :                     bitRateIndex = IGF_BITRATE_SWB_64000_CPE;
     143             :                 }
     144       63179 :                 else if ( brate <= IVAS_80k )
     145             :                 {
     146       26432 :                     bitRateIndex = IGF_BITRATE_SWB_80000_CPE;
     147             :                 }
     148       36747 :                 else if ( brate <= IVAS_96k )
     149             :                 {
     150       36747 :                     bitRateIndex = IGF_BITRATE_SWB_96000_CPE;
     151             :                 }
     152      203766 :                 break;
     153     1234466 :             case IGF_MODE_FB:
     154             :                 /* DFT and TD Stereo bitrates */
     155     1234466 :                 if ( brate <= IVAS_16k4 )
     156             :                 {
     157         588 :                     bitRateIndex = IGF_BITRATE_FB_24400_CPE;
     158             :                 }
     159     1233878 :                 else if ( brate <= IVAS_24k4 )
     160             :                 {
     161         906 :                     bitRateIndex = IGF_BITRATE_FB_32000_CPE;
     162             :                 }
     163     1232972 :                 else if ( brate <= IVAS_32k )
     164             :                 {
     165           0 :                     bitRateIndex = IGF_BITRATE_FB_32000;
     166             :                 }
     167             :                 /* MDCT Stereo bitrates */
     168     1232972 :                 else if ( brate <= IVAS_48k )
     169             :                 {
     170      125430 :                     bitRateIndex = IGF_BITRATE_FB_48000_CPE;
     171             :                 }
     172     1107542 :                 else if ( brate <= IVAS_64k )
     173             :                 {
     174      272368 :                     bitRateIndex = IGF_BITRATE_FB_64000_CPE;
     175             :                 }
     176      835174 :                 else if ( brate <= IVAS_80k )
     177             :                 {
     178      171398 :                     bitRateIndex = IGF_BITRATE_FB_80000_CPE;
     179             :                 }
     180      663776 :                 else if ( brate <= IVAS_96k )
     181             :                 {
     182      102574 :                     bitRateIndex = IGF_BITRATE_FB_96000_CPE;
     183             :                 }
     184      561202 :                 else if ( brate <= IVAS_128k )
     185             :                 {
     186      561202 :                     bitRateIndex = IGF_BITRATE_FB_128000_CPE;
     187             :                 }
     188     1234466 :                 break;
     189             :         }
     190     1438592 :     }
     191             :     /* SCE modes: use tunings done for DFT stereo bitrates also for according SCE bitrates, otherwise same config as mono modes */
     192       50320 :     else if ( element_mode == IVAS_SCE )
     193             :     {
     194       49988 :         switch ( bwidth )
     195             :         {
     196          54 :             case IGF_MODE_WB:
     197          54 :                 if ( brate <= IVAS_13k2 && rf_mode == 1 )
     198             :                 {
     199           0 :                     bitRateIndex = IGF_BITRATE_RF_WB_13200;
     200             :                 }
     201          54 :                 else if ( brate <= ACELP_9k60 ) /* bitrates 8000 and 9600 */
     202             :                 {
     203          54 :                     bitRateIndex = IGF_BITRATE_WB_9600;
     204             :                 }
     205          54 :                 break;
     206       18922 :             case IGF_MODE_SWB:
     207       18922 :                 if ( brate <= ACELP_9k60 )
     208             :                 {
     209        6300 :                     bitRateIndex = IGF_BITRATE_SWB_13200_CPE;
     210             :                 }
     211       12622 :                 else if ( brate <= IVAS_13k2 )
     212             :                 {
     213        6488 :                     if ( rf_mode == 1 )
     214             :                     {
     215           0 :                         bitRateIndex = IGF_BITRATE_RF_SWB_13200;
     216             :                     }
     217             :                     else
     218             :                     {
     219        6488 :                         bitRateIndex = IGF_BITRATE_SWB_16400_CPE;
     220             :                     }
     221             :                 }
     222        6134 :                 else if ( brate <= IVAS_16k4 )
     223             :                 {
     224        2844 :                     bitRateIndex = IGF_BITRATE_SWB_24400_CPE;
     225             :                 }
     226        3290 :                 else if ( brate <= IVAS_24k4 )
     227             :                 {
     228        1222 :                     bitRateIndex = IGF_BITRATE_SWB_32000_CPE;
     229             :                 }
     230        2068 :                 else if ( brate <= IVAS_32k )
     231             :                 {
     232        1474 :                     bitRateIndex = IGF_BITRATE_SWB_32000;
     233             :                 }
     234         594 :                 else if ( brate <= IVAS_48k )
     235             :                 {
     236         234 :                     bitRateIndex = IGF_BITRATE_SWB_48000;
     237             :                 }
     238         360 :                 else if ( brate <= IVAS_64k )
     239             :                 {
     240         360 :                     bitRateIndex = IGF_BITRATE_SWB_64000;
     241             :                 }
     242       18922 :                 break;
     243       31012 :             case IGF_MODE_FB:
     244       31012 :                 if ( brate <= IVAS_16k4 )
     245             :                 {
     246        5002 :                     bitRateIndex = IGF_BITRATE_FB_24400_CPE;
     247             :                 }
     248       26010 :                 else if ( brate <= IVAS_24k4 )
     249             :                 {
     250        7152 :                     bitRateIndex = IGF_BITRATE_FB_32000_CPE;
     251             :                 }
     252       18858 :                 else if ( brate <= IVAS_32k )
     253             :                 {
     254        8818 :                     bitRateIndex = IGF_BITRATE_FB_32000;
     255             :                 }
     256       10040 :                 else if ( brate <= IVAS_48k )
     257             :                 {
     258        6932 :                     bitRateIndex = IGF_BITRATE_FB_48000;
     259             :                 }
     260        3108 :                 else if ( brate <= IVAS_64k )
     261             :                 {
     262        1716 :                     bitRateIndex = IGF_BITRATE_FB_64000;
     263             :                 }
     264        1392 :                 else if ( brate <= IVAS_96k )
     265             :                 {
     266         878 :                     bitRateIndex = IGF_BITRATE_FB_96000;
     267             :                 }
     268         514 :                 else if ( brate <= IVAS_128k )
     269             :                 {
     270         514 :                     bitRateIndex = IGF_BITRATE_FB_128000;
     271             :                 }
     272       31012 :                 break;
     273             :         }
     274       49988 :     }
     275             :     /* EVS mono */
     276             :     else
     277             :     {
     278         332 :         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         332 :             case IGF_MODE_SWB:
     291         332 :                 if ( brate <= ACELP_9k60 )
     292             :                 {
     293           0 :                     bitRateIndex = IGF_BITRATE_SWB_9600;
     294             :                 }
     295         332 :                 else if ( brate <= ACELP_13k20 )
     296             :                 {
     297         126 :                     if ( rf_mode == 1 )
     298             :                     {
     299           0 :                         bitRateIndex = IGF_BITRATE_RF_SWB_13200;
     300             :                     }
     301             :                     else
     302             :                     {
     303         126 :                         bitRateIndex = IGF_BITRATE_SWB_13200;
     304             :                     }
     305             :                 }
     306         206 :                 else if ( brate <= ACELP_16k40 )
     307             :                 {
     308           0 :                     bitRateIndex = IGF_BITRATE_SWB_16400;
     309             :                 }
     310         206 :                 else if ( brate <= ACELP_24k40 )
     311             :                 {
     312         206 :                     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         332 :                 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     1488912 :     }
     359             : 
     360     1488912 :     return bitRateIndex;
     361             : }
     362             : 
     363             : 
     364             : /*---------------------------------------------------------------------*
     365             :  * IGF_gridSetUp()
     366             :  *
     367             :  * IGF grid setup
     368             :  *---------------------------------------------------------------------*/
     369             : 
     370      157203 : 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      157203 :     swb_offset = NULL;
     388      157203 :     swb_offset_len = 0;
     389      157203 :     if ( transFac == 0.5f && bitRateIndex == IGF_BITRATE_SWB_48000_CPE )
     390             :     {
     391        1470 :         bitRateIndex = IGF_BITRATE_SWB_48000_CPE_TCX10;
     392             :     }
     393      155733 :     else if ( transFac == 0.5f && bitRateIndex == IGF_BITRATE_FB_48000_CPE )
     394             :     {
     395        3961 :         bitRateIndex = IGF_BITRATE_FB_48000_CPE_TCX10;
     396             :     }
     397             : 
     398      157203 :     if ( bitRateIndex != IGF_BITRATE_UNKNOWN )
     399             :     {
     400      157203 :         swb_offset = &swb_offset_LB_new[bitRateIndex][1];
     401      157203 :         swb_offset_len = swb_offset_LB_new[bitRateIndex][0];
     402      157203 :         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     1313576 :     for ( sfb = 0; sfb < swb_offset_len; sfb++ )
     410             :     {
     411     1156373 :         hGrid->swb_offset[sfb] = IGF_ApplyTransFac( swb_offset[sfb], transFac );
     412             :     }
     413     2616499 :     for ( sfb = swb_offset_len; sfb < IGF_MAX_SFB; sfb++ )
     414             :     {
     415     2459296 :         hGrid->swb_offset[sfb] = 0;
     416             :     }
     417             : 
     418      157203 :     hGrid->infoIsRefined = 0;
     419      157203 :     frameLength = IGF_ApplyTransFac( frameLength, transFac );
     420      157203 :     bandwidth = (float) sampleRate / 2.0f / (float) frameLength;
     421      157203 :     hGrid->swb_offset_len = swb_offset_len;
     422      157203 :     hGrid->startSfb = 0;
     423      157203 :     hGrid->stopSfb = hGrid->swb_offset_len - 1;
     424      157203 :     hGrid->startLine = hGrid->swb_offset[hGrid->startSfb];
     425      157203 :     hGrid->stopLine = hGrid->swb_offset[hGrid->stopSfb];
     426      157203 :     hGrid->startFrequency = (int16_t) round_f( bandwidth * hGrid->startLine );
     427      157203 :     hGrid->stopFrequency = (int16_t) round_f( bandwidth * hGrid->stopLine );
     428      157203 :     hGrid->minSrcSubband = (int16_t) round_f( ( igfMinFq * ( frameLength ) ) / ( sampleRate >> 1 ) );
     429      157203 :     hGrid->minSrcSubband += hGrid->minSrcSubband % 2;
     430      157203 :     hGrid->minSrcFrequency = (int16_t) round_f( bandwidth * hGrid->minSrcSubband );
     431      157203 :     hGrid->infoGranuleLen = frameLength;
     432      157203 :     hGrid->sfbWrap[0] = 0;
     433      157203 :     hGrid->tile[0] = hGrid->startLine;
     434             : 
     435      157203 :     igf_tile_offset = &igf_tile_offset_table[bitRateIndex][1];
     436      157203 :     hGrid->nTiles = igf_tile_offset_table[bitRateIndex][0];
     437      157203 :     hGrid->tile[0] = hGrid->startLine;
     438      157203 :     hGrid->sfbWrap[0] = 0;
     439      864621 :     for ( k = 0; k < hGrid->nTiles; k++ )
     440             :     {
     441      707418 :         hGrid->sfbWrap[k + 1] = igf_tile_offset[2 * k];
     442      707418 :         hGrid->sbWrap[k] = hGrid->minSrcSubband + IGF_ApplyTransFac( igf_tile_offset[2 * k + 1], transFac );
     443      707418 :         hGrid->tile[k + 1] = hGrid->swb_offset[igf_tile_offset[2 * k]];
     444             :     }
     445      876699 :     for ( t = hGrid->nTiles + 1; t < IGF_MAX_TILES; t++ )
     446             :     {
     447      719496 :         hGrid->tile[t] = 0;
     448      719496 :         hGrid->sbWrap[t - 1] = 0;
     449      719496 :         hGrid->sfbWrap[t] = 0;
     450             :     }
     451             : 
     452             :     /* adapt level envelope: */
     453      157203 :     switch ( bitRateIndex )
     454             :     {
     455         621 :         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         621 :             hGrid->gFactor = 0.800f;
     460         621 :             hGrid->fFactor = 0.70f;
     461         621 :             hGrid->lFactor = 0.60f;
     462         621 :             break;
     463       25881 :         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       25881 :             hGrid->gFactor = 0.930f;
     470       25881 :             hGrid->fFactor = 0.20f;
     471       25881 :             hGrid->lFactor = 0.85f;
     472       25881 :             break;
     473       40773 :         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       40773 :             hGrid->gFactor = 0.965f;
     482       40773 :             hGrid->fFactor = 0.20f;
     483       40773 :             hGrid->lFactor = 0.85f;
     484       40773 :             break;
     485       18204 :         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       18204 :             hGrid->gFactor = 1.000f;
     492       18204 :             hGrid->fFactor = 0.20f;
     493       18204 :             hGrid->lFactor = 1.000f;
     494       18204 :             break;
     495       71724 :         case IGF_BITRATE_SWB_9600:
     496             :         case IGF_BITRATE_SWB_13200_CPE:
     497             :         case IGF_BITRATE_RF_SWB_13200:
     498             :         default:
     499       71724 :             hGrid->gFactor = 1.000f;
     500       71724 :             hGrid->fFactor = 0.00f;
     501       71724 :             hGrid->lFactor = 1.000f;
     502             :     }
     503             : 
     504      876699 :     for ( t = hGrid->nTiles + 1; t < IGF_MAX_TILES; t++ )
     505             :     {
     506      719496 :         hGrid->tile[t] = 0;
     507      719496 :         hGrid->sbWrap[t - 1] = 0;
     508      719496 :         hGrid->sfbWrap[t] = 0;
     509             :     }
     510             : 
     511      157203 :     return;
     512             : }
     513             : 
     514             : 
     515             : /*---------------------------------------------------------------------*
     516             :  * IGFCommonFuncsIGFConfiguration()
     517             :  *
     518             :  * changes the IGF configuration
     519             :  *---------------------------------------------------------------------*/
     520             : 
     521             : /*! r: error value: 0 -> error, 1 -> ok */
     522       52401 : 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       52401 :     retValue = 0; /* bitrate index is unknown -> error! */
     538             : 
     539             :     /* interface call for reading in settings */
     540       52401 :     hIGFInfo->bitRateIndex = IGF_MapBitRateToIndex( total_brate, bwidth, element_mode, rf_mode );
     541             : 
     542       52401 :     if ( hIGFInfo->bitRateIndex != IGF_BITRATE_UNKNOWN )
     543             :     {
     544       52401 :         retValue = 1; /* no error */
     545             : 
     546             :         /* mapping to local values */
     547       52401 :         sampleRate = igfMode[hIGFInfo->bitRateIndex].sampleRate;
     548       52401 :         frameLength = igfMode[hIGFInfo->bitRateIndex].frameLength;
     549       52401 :         igfMinFq = igfMode[hIGFInfo->bitRateIndex].igfMinFq;
     550       52401 :         maxHopsize = igfMode[hIGFInfo->bitRateIndex].maxHopsize;
     551             : 
     552             :         /* basic information */
     553       52401 :         hIGFInfo->sampleRate = sampleRate;
     554       52401 :         hIGFInfo->frameLength = frameLength;
     555       52401 :         hIGFInfo->maxHopsize = maxHopsize;
     556       52401 :         hIGFInfo->nfSeedBuf[0] = 0;
     557       52401 :         hIGFInfo->nfSeedBuf[1] = 0;
     558       52401 :         hIGFInfo->nfSeed = &hIGFInfo->nfSeedBuf[0];
     559             : 
     560             :         /* set up regular IGF grid for TCX 20  (transfac = 1.f) */
     561       52401 :         hGrid = &hIGFInfo->grid[IGF_GRID_LB_NORM];
     562       52401 :         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       52401 :         hGrid = &hIGFInfo->grid[IGF_GRID_LB_TRAN];
     566       52401 :         IGF_gridSetUp( hGrid, hIGFInfo->bitRateIndex, sampleRate, frameLength, 1.25f, igfMinFq );
     567             : 
     568             :         /* set up IGF grid for TCX 10 (transfac = 0.5) */
     569       52401 :         hGrid = &hIGFInfo->grid[IGF_GRID_LB_SHORT];
     570       52401 :         IGF_gridSetUp( hGrid, hIGFInfo->bitRateIndex, sampleRate, frameLength, 0.50f, igfMinFq );
     571             :     }
     572             : 
     573       52401 :     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       52401 : 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       52401 :     retValue = 0; /* bitrate index is unknown -> error! */
     604             : 
     605       52401 :     bitRateIndex = IGF_MapBitRateToIndex( total_brate, bwidth, element_mode, rf_mode );
     606             : 
     607       52401 :     if ( bitRateIndex != IGF_BITRATE_UNKNOWN )
     608             :     {
     609       52401 :         retValue = 1; /* no error */
     610             : 
     611       52401 :         switch ( bitRateIndex )
     612             :         {
     613         104 :             case IGF_BITRATE_WB_13200_CPE:
     614         104 :                 bitRateIndex = IGF_BITRATE_WB_9600;
     615         104 :                 break;
     616          76 :             case IGF_BITRATE_WB_16400_CPE:
     617          76 :                 bitRateIndex = IGF_BITRATE_WB_9600;
     618          76 :                 break;
     619        3476 :             case IGF_BITRATE_SWB_13200_CPE:
     620        3476 :                 bitRateIndex = IGF_BITRATE_SWB_9600;
     621        3476 :                 break;
     622        3528 :             case IGF_BITRATE_SWB_16400_CPE:
     623        3528 :                 bitRateIndex = IGF_BITRATE_SWB_13200;
     624        3528 :                 break;
     625        2241 :             case IGF_BITRATE_SWB_24400_CPE:
     626        2241 :                 bitRateIndex = IGF_BITRATE_SWB_16400;
     627        2241 :                 break;
     628        2795 :             case IGF_BITRATE_FB_24400_CPE:
     629        2795 :                 bitRateIndex = IGF_BITRATE_FB_16400;
     630        2795 :                 break;
     631         992 :             case IGF_BITRATE_SWB_32000_CPE:
     632         992 :                 bitRateIndex = IGF_BITRATE_SWB_24400;
     633         992 :                 break;
     634        4029 :             case IGF_BITRATE_FB_32000_CPE:
     635        4029 :                 bitRateIndex = IGF_BITRATE_FB_24400;
     636        4029 :                 break;
     637        9232 :             case IGF_BITRATE_FB_48000_CPE:
     638             :             case IGF_BITRATE_FB_64000_CPE:
     639        9232 :                 bitRateIndex = IGF_BITRATE_FB_32000;
     640        9232 :                 break;
     641             :         }
     642             : 
     643       52401 :         switch ( bitRateIndex )
     644             :         {
     645       11644 :             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       11644 :                 *cf_se00 = cf_se00_tab;
     656       11644 :                 *cf_se01 = cf_se01_tab[bitRateIndex];
     657       11644 :                 *cf_off_se01 = cf_off_se01_tab[bitRateIndex];
     658       11644 :                 *cf_se02 = &cf_se02_tab[bitRateIndex][0][0];
     659       11644 :                 *cf_off_se02 = &cf_off_se02_tab[bitRateIndex][0];
     660       11644 :                 *cf_se10 = &cf_se10_tab[0];
     661       11644 :                 *cf_off_se10 = cf_off_se10_tab;
     662       11644 :                 *cf_se11 = &cf_se11_tab[0][0][0];
     663       11644 :                 *cf_off_se11 = &cf_off_se11_tab[0][0];
     664       11644 :                 break;
     665       20465 :             case IGF_BITRATE_FB_16400:
     666             :             case IGF_BITRATE_FB_24400:
     667             :             case IGF_BITRATE_FB_32000:
     668       20465 :                 bitRateIndex = bitRateIndex - IGF_BITRATE_FB_16400 + IGF_BITRATE_SWB_16400;
     669       20465 :                 *cf_se00 = cf_se00_tab;
     670       20465 :                 *cf_se01 = cf_se01_tab[bitRateIndex];
     671       20465 :                 *cf_off_se01 = cf_off_se01_tab[bitRateIndex];
     672       20465 :                 *cf_se02 = &cf_se02_tab[bitRateIndex][0][0];
     673       20465 :                 *cf_off_se02 = &cf_off_se02_tab[bitRateIndex][0];
     674       20465 :                 *cf_se10 = &cf_se10_tab[0];
     675       20465 :                 *cf_off_se10 = cf_off_se10_tab;
     676       20465 :                 *cf_se11 = &cf_se11_tab[0][0][0];
     677       20465 :                 *cf_off_se11 = &cf_off_se11_tab[0][0];
     678       20465 :                 break;
     679        4324 :             case IGF_BITRATE_FB_48000:
     680             :             case IGF_BITRATE_FB_64000:
     681        4324 :                 bitRateIndex = bitRateIndex - IGF_BITRATE_FB_48000 + IGF_BITRATE_SWB_48000;
     682        4324 :                 *cf_se00 = cf_se00_tab;
     683        4324 :                 *cf_se01 = cf_se01_tab[bitRateIndex];
     684        4324 :                 *cf_off_se01 = cf_off_se01_tab[bitRateIndex];
     685        4324 :                 *cf_se02 = &cf_se02_tab[bitRateIndex][0][0];
     686        4324 :                 *cf_off_se02 = &cf_off_se02_tab[bitRateIndex][0];
     687        4324 :                 *cf_se10 = &cf_se10_tab[0];
     688        4324 :                 *cf_off_se10 = cf_off_se10_tab;
     689        4324 :                 *cf_se11 = &cf_se11_tab[0][0][0];
     690        4324 :                 *cf_off_se11 = &cf_off_se11_tab[0][0];
     691        4324 :                 break;
     692       10710 :             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       10710 :                 bitRateIndex = IGF_BITRATE_SWB_48000;
     698       10710 :                 *cf_se00 = cf_se00_tab;
     699       10710 :                 *cf_se01 = cf_se01_tab[bitRateIndex];
     700       10710 :                 *cf_off_se01 = cf_off_se01_tab[bitRateIndex];
     701       10710 :                 *cf_se02 = &cf_se02_tab[bitRateIndex][0][0];
     702       10710 :                 *cf_off_se02 = &cf_off_se02_tab[bitRateIndex][0];
     703       10710 :                 *cf_se10 = &cf_se10_tab[0];
     704       10710 :                 *cf_off_se10 = cf_off_se10_tab;
     705       10710 :                 *cf_se11 = &cf_se11_tab[0][0][0];
     706       10710 :                 *cf_off_se11 = &cf_off_se11_tab[0][0];
     707       10710 :                 break;
     708        1470 :             case IGF_BITRATE_SWB_48000_CPE:
     709        1470 :                 bitRateIndex = IGF_BITRATE_SWB_16400;
     710        1470 :                 *cf_se00 = cf_se00_tab;
     711        1470 :                 *cf_se01 = cf_se01_tab[bitRateIndex];
     712        1470 :                 *cf_off_se01 = cf_off_se01_tab[bitRateIndex];
     713        1470 :                 *cf_se02 = &cf_se02_tab[bitRateIndex][0][0];
     714        1470 :                 *cf_off_se02 = &cf_off_se02_tab[bitRateIndex][0];
     715        1470 :                 *cf_se10 = &cf_se10_tab[0];
     716        1470 :                 *cf_off_se10 = cf_off_se10_tab;
     717        1470 :                 *cf_se11 = &cf_se11_tab[0][0][0];
     718        1470 :                 *cf_off_se11 = &cf_off_se11_tab[0][0];
     719        1470 :                 break;
     720        3788 :             case IGF_BITRATE_SWB_64000_CPE:
     721             :             case IGF_BITRATE_SWB_80000_CPE:
     722             :             case IGF_BITRATE_SWB_96000_CPE:
     723        3788 :                 bitRateIndex = IGF_BITRATE_SWB_48000; /*bitRateIndex-IGF_BITRATE_SWB_56000+IGF_BITRATE_SWB_48000;*/
     724        3788 :                 *cf_se00 = cf_se00_tab;
     725        3788 :                 *cf_se01 = cf_se01_tab[bitRateIndex];
     726        3788 :                 *cf_off_se01 = cf_off_se01_tab[bitRateIndex];
     727        3788 :                 *cf_se02 = &cf_se02_tab[bitRateIndex][0][0];
     728        3788 :                 *cf_off_se02 = &cf_off_se02_tab[bitRateIndex][0];
     729        3788 :                 *cf_se10 = &cf_se10_tab[0];
     730        3788 :                 *cf_off_se10 = cf_off_se10_tab;
     731        3788 :                 *cf_se11 = &cf_se11_tab[0][0][0];
     732        3788 :                 *cf_off_se11 = &cf_off_se11_tab[0][0];
     733        3788 :                 break;
     734           0 :             case IGF_BITRATE_UNKNOWN:
     735             :             default:
     736           0 :                 assert( 0 );
     737             :         }
     738           0 :     }
     739             : 
     740       52401 :     return retValue;
     741             : }

Generated by: LCOV version 1.14