LCOV - code coverage report
Current view: top level - lib_dec - ivas_output_config.c (source / functions) Hit Total Coverage
Test: Coverage on main -- long test vectors @ 9b04ec3cb36f5e8dc438cf854fa3e349998fa1e9 Lines: 163 166 98.2 %
Date: 2025-10-31 05:43:07 Functions: 2 2 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             : #include <stdint.h>
      34             : #include "options.h"
      35             : #include "ivas_cnst.h"
      36             : #include "ivas_prot.h"
      37             : #include "ivas_stat_dec.h"
      38             : #ifdef DEBUGGING
      39             : #include "debug.h"
      40             : #include <assert.h>
      41             : #endif
      42             : #include "wmc_auto.h"
      43             : 
      44             : 
      45             : /*-------------------------------------------------------------------------*
      46             :  * ivas_renderer_select()
      47             :  *
      48             :  * Select and configure IVAS renderer parameters
      49             :  *-------------------------------------------------------------------------*/
      50             : 
      51    14677183 : void ivas_renderer_select(
      52             :     Decoder_Struct *st_ivas /* i/o: IVAS decoder structure                */
      53             : )
      54             : {
      55             :     RENDERER_TYPE *renderer_type;
      56             :     AUDIO_CONFIG *internal_config;
      57             :     AUDIO_CONFIG output_config;
      58             :     AUDIO_CONFIG transport_config;
      59             : 
      60             :     int16_t nchan_internal;
      61             : 
      62    14677183 :     renderer_type = &( st_ivas->renderer_type );
      63    14677183 :     internal_config = &( st_ivas->intern_config );
      64    14677183 :     output_config = st_ivas->hDecoderConfig->output_config;
      65    14677183 :     transport_config = st_ivas->transport_config;
      66             : 
      67             :     /* disabled rendering by default */
      68    14677183 :     *renderer_type = RENDERER_DISABLE;
      69             : 
      70             :     /*-----------------------------------------------------------------*
      71             :      * Binaural rendering configurations
      72             :      *-----------------------------------------------------------------*/
      73             : 
      74    14677183 :     if ( st_ivas->hDecoderConfig->Opt_Headrotation || st_ivas->hDecoderConfig->Opt_ExternalOrientation )
      75             :     {
      76     1978311 :         st_ivas->hCombinedOrientationData->shd_rot_max_order = -1;
      77             :     }
      78             : 
      79    14677183 :     if ( output_config == IVAS_AUDIO_CONFIG_BINAURAL || output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR || output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB || output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED || output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM )
      80             :     {
      81     5087346 :         if ( st_ivas->ivas_format == ISM_FORMAT )
      82             :         {
      83      939981 :             if ( st_ivas->ism_mode == ISM_MODE_PARAM )
      84             :             {
      85      199977 :                 if ( output_config == IVAS_AUDIO_CONFIG_BINAURAL || output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED || output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM )
      86             :                 {
      87      143214 :                     *renderer_type = RENDERER_BINAURAL_PARAMETRIC;
      88             :                 }
      89             :                 else
      90             :                 {
      91       56763 :                     *renderer_type = RENDERER_BINAURAL_PARAMETRIC_ROOM;
      92             :                 }
      93             :             }
      94             :             else /* ISM_MODE_DISC */
      95             :             {
      96      740004 :                 if ( output_config == IVAS_AUDIO_CONFIG_BINAURAL || output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB || output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED || output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM )
      97             :                 {
      98      548808 :                     *renderer_type = RENDERER_BINAURAL_OBJECTS_TD;
      99      548808 :                     *internal_config = output_config;
     100             :                 }
     101             :                 else
     102             :                 {
     103      191196 :                     *renderer_type = RENDERER_BINAURAL_MIXER_CONV_ROOM;
     104             : #ifdef DEBUGGING
     105             :                     if ( st_ivas->hRenderConfig->renderer_type_override == IVAS_RENDER_TYPE_OVERRIDE_FASTCONV )
     106             :                     {
     107             :                         *renderer_type = RENDERER_BINAURAL_FASTCONV_ROOM;
     108             :                     }
     109             : #endif
     110      191196 :                     *internal_config = IVAS_AUDIO_CONFIG_7_1_4;
     111             :                 }
     112             :             }
     113             :         }
     114     4147365 :         else if ( st_ivas->ivas_format == MASA_FORMAT || st_ivas->ivas_format == MASA_ISM_FORMAT || ( ( st_ivas->ivas_format == SBA_FORMAT || st_ivas->ivas_format == SBA_ISM_FORMAT ) && st_ivas->nchan_transport <= 2 ) )
     115             :         {
     116     2053728 :             *internal_config = output_config;
     117             : 
     118     2053728 :             if ( output_config == IVAS_AUDIO_CONFIG_BINAURAL || output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED || output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM )
     119             :             {
     120     1114908 :                 *renderer_type = RENDERER_BINAURAL_PARAMETRIC;
     121             :             }
     122             :             else
     123             :             {
     124      938820 :                 *renderer_type = RENDERER_BINAURAL_PARAMETRIC_ROOM;
     125             :             }
     126             :         }
     127     2093637 :         else if ( st_ivas->ivas_format == SBA_FORMAT || st_ivas->ivas_format == SBA_ISM_FORMAT )
     128             :         {
     129      772416 :             *internal_config = IVAS_AUDIO_CONFIG_HOA3;
     130             : 
     131      772416 :             if ( output_config == IVAS_AUDIO_CONFIG_BINAURAL || output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB || output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED || output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM )
     132             :             {
     133      507846 :                 *renderer_type = RENDERER_BINAURAL_FASTCONV;
     134             :             }
     135             :             else
     136             :             {
     137      264570 :                 *renderer_type = RENDERER_BINAURAL_FASTCONV_ROOM;
     138             :             }
     139             : 
     140      772416 :             if ( st_ivas->ivas_format == SBA_ISM_FORMAT && *renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM )
     141             :             {
     142       96363 :                 *internal_config = IVAS_AUDIO_CONFIG_7_1_4;
     143             :             }
     144             : 
     145      772416 :             if ( st_ivas->hDecoderConfig->Opt_Headrotation || st_ivas->hDecoderConfig->Opt_ExternalOrientation )
     146             :             {
     147             : 
     148      249156 :                 nchan_internal = ivas_sba_get_nchan_metadata( st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate );
     149      249156 :                 if ( nchan_internal == 2 )
     150             :                 {
     151          27 :                     st_ivas->hCombinedOrientationData->shd_rot_max_order = 1;
     152             :                 }
     153      249129 :                 else if ( nchan_internal == 4 || nchan_internal == 3 )
     154             :                 {
     155      221598 :                     st_ivas->hCombinedOrientationData->shd_rot_max_order = 0;
     156             :                 }
     157       27531 :                 else if ( nchan_internal == 6 || nchan_internal == 5 )
     158             :                 {
     159           0 :                     st_ivas->hCombinedOrientationData->shd_rot_max_order = 2;
     160             :                 }
     161       27531 :                 else if ( nchan_internal == 8 || nchan_internal == 7 )
     162             :                 {
     163        2400 :                     st_ivas->hCombinedOrientationData->shd_rot_max_order = 3;
     164             :                 }
     165             :             }
     166             :         }
     167     1321221 :         else if ( st_ivas->ivas_format == MC_FORMAT )
     168             :         {
     169     1321221 :             if ( st_ivas->mc_mode == MC_MODE_MCMASA )
     170             :             {
     171      244455 :                 *internal_config = output_config;
     172             : 
     173      244455 :                 if ( output_config == IVAS_AUDIO_CONFIG_BINAURAL || output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED || output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM )
     174             :                 {
     175      119952 :                     *renderer_type = RENDERER_BINAURAL_PARAMETRIC;
     176             :                 }
     177             :                 else
     178             :                 {
     179      124503 :                     *renderer_type = RENDERER_BINAURAL_PARAMETRIC_ROOM;
     180             :                 }
     181             :             }
     182             :             else
     183             :             {
     184     1076766 :                 *internal_config = transport_config;
     185             : 
     186     1076766 :                 if ( output_config == IVAS_AUDIO_CONFIG_BINAURAL || output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB || output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM || output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED )
     187             :                 {
     188      814827 :                     if ( ( st_ivas->transport_config == IVAS_AUDIO_CONFIG_5_1 || st_ivas->transport_config == IVAS_AUDIO_CONFIG_7_1 ) && ( st_ivas->hDecoderConfig->Opt_Headrotation || st_ivas->hDecoderConfig->Opt_ExternalOrientation ) && st_ivas->mc_mode == MC_MODE_MCT )
     189             :                     {
     190      121905 :                         *renderer_type = RENDERER_BINAURAL_OBJECTS_TD;
     191             :                     }
     192             :                     else
     193             :                     {
     194      692922 :                         if ( st_ivas->mc_mode == MC_MODE_MCT )
     195             :                         {
     196      431070 :                             *renderer_type = RENDERER_BINAURAL_MIXER_CONV;
     197             :                         }
     198             :                         else
     199             :                         {
     200      261852 :                             *renderer_type = RENDERER_BINAURAL_FASTCONV;
     201             :                         }
     202             : 
     203      692922 :                         if ( st_ivas->hDecoderConfig->Opt_Headrotation || st_ivas->hDecoderConfig->Opt_ExternalOrientation )
     204             :                         {
     205             :                             /* force HOA3 domain for rotation*/
     206      198129 :                             *internal_config = IVAS_AUDIO_CONFIG_HOA3;
     207             :                         }
     208             :                     }
     209             :                 }
     210             :                 else
     211             :                 {
     212      261939 :                     if ( st_ivas->mc_mode == MC_MODE_MCT )
     213             :                     {
     214      196443 :                         *renderer_type = RENDERER_BINAURAL_MIXER_CONV_ROOM;
     215             :                     }
     216             :                     else
     217             :                     {
     218       65496 :                         *renderer_type = RENDERER_BINAURAL_FASTCONV_ROOM;
     219             :                     }
     220             : #ifdef DEBUGGING
     221             :                     if ( st_ivas->hRenderConfig->renderer_type_override == IVAS_RENDER_TYPE_OVERRIDE_CREND )
     222             :                     {
     223             :                         *renderer_type = RENDERER_BINAURAL_MIXER_CONV_ROOM;
     224             :                     }
     225             :                     else if ( st_ivas->hRenderConfig->renderer_type_override == IVAS_RENDER_TYPE_OVERRIDE_FASTCONV )
     226             :                     {
     227             :                         *renderer_type = RENDERER_BINAURAL_FASTCONV_ROOM;
     228             :                     }
     229             : #endif
     230             :                 }
     231             :             }
     232             :         }
     233             :     }
     234             : 
     235             :     /*-----------------------------------------------------------------*
     236             :      * Non-binaural rendering configurations
     237             :      *-----------------------------------------------------------------*/
     238             : 
     239     9589837 :     else if ( st_ivas->ivas_format == MONO_FORMAT )
     240             :     {
     241          64 :         if ( output_config == IVAS_AUDIO_CONFIG_STEREO )
     242             :         {
     243           3 :             *renderer_type = RENDERER_NON_DIEGETIC_DOWNMIX;
     244             :         }
     245             :     }
     246     9589773 :     else if ( st_ivas->ivas_format == STEREO_FORMAT )
     247             :     {
     248     2013279 :         if ( output_config != IVAS_AUDIO_CONFIG_STEREO && output_config != IVAS_AUDIO_CONFIG_MONO && output_config != IVAS_AUDIO_CONFIG_EXTERNAL )
     249             :         {
     250           0 :             *renderer_type = RENDERER_MC;
     251             :         }
     252             :     }
     253     7576494 :     else if ( st_ivas->ivas_format == ISM_FORMAT )
     254             :     {
     255      895107 :         if ( ( output_config == IVAS_AUDIO_CONFIG_STEREO ) && ( st_ivas->hDecoderConfig->Opt_non_diegetic_pan ) )
     256             :         {
     257       23088 :             *renderer_type = RENDERER_NON_DIEGETIC_DOWNMIX;
     258             :         }
     259             :         else
     260             :         {
     261      872019 :             if ( st_ivas->ism_mode == ISM_MODE_PARAM )
     262             :             {
     263      166269 :                 *renderer_type = RENDERER_PARAM_ISM;
     264      166269 :                 if ( output_config == IVAS_AUDIO_CONFIG_MONO )
     265             :                 {
     266       24459 :                     *renderer_type = RENDERER_MONO_DOWNMIX;
     267             :                 }
     268      141810 :                 else if ( output_config == IVAS_AUDIO_CONFIG_STEREO )
     269             :                 {
     270       25908 :                     *renderer_type = RENDERER_DISABLE;
     271             :                 }
     272      115902 :                 else if ( output_config == IVAS_AUDIO_CONFIG_FOA || output_config == IVAS_AUDIO_CONFIG_HOA2 || output_config == IVAS_AUDIO_CONFIG_HOA3 )
     273             :                 {
     274       79626 :                     *renderer_type = RENDERER_SBA_LINEAR_ENC;
     275       79626 :                     *internal_config = IVAS_AUDIO_CONFIG_7_1_4;
     276             :                 }
     277             :             }
     278             :             else /* ISM_MODE_DISC */
     279             :             {
     280      705750 :                 *renderer_type = RENDERER_TD_PANNING;
     281      705750 :                 if ( output_config == IVAS_AUDIO_CONFIG_MONO )
     282             :                 {
     283       46251 :                     *renderer_type = RENDERER_MONO_DOWNMIX;
     284             :                 }
     285      659499 :                 else if ( output_config == IVAS_AUDIO_CONFIG_FOA || output_config == IVAS_AUDIO_CONFIG_HOA2 || output_config == IVAS_AUDIO_CONFIG_HOA3 )
     286             :                 {
     287      120648 :                     *renderer_type = RENDERER_SBA_LINEAR_ENC;
     288             :                 }
     289      538851 :                 else if ( output_config == IVAS_AUDIO_CONFIG_EXTERNAL )
     290             :                 {
     291      366081 :                     *renderer_type = RENDERER_DISABLE;
     292             :                 }
     293             :             }
     294             :         }
     295             :     }
     296     6681387 :     else if ( st_ivas->ivas_format == MASA_FORMAT || st_ivas->ivas_format == SBA_FORMAT || st_ivas->ivas_format == SBA_ISM_FORMAT )
     297     5407269 :     {
     298             :         IVAS_FORMAT ivas_format;
     299     5407269 :         *renderer_type = RENDERER_DIRAC;
     300     5407269 :         ivas_format = ( st_ivas->ivas_format == SBA_ISM_FORMAT && st_ivas->ism_mode == ISM_MODE_NONE ) ? SBA_FORMAT : st_ivas->ivas_format; /* treat ISM_SBA_MODE_NONE just like SBA_FORMAT */
     301             : 
     302     5407269 :         if ( ivas_format == SBA_FORMAT && ( output_config != IVAS_AUDIO_CONFIG_5_1 && output_config != IVAS_AUDIO_CONFIG_5_1_2 && output_config != IVAS_AUDIO_CONFIG_5_1_4 && output_config != IVAS_AUDIO_CONFIG_7_1 && output_config != IVAS_AUDIO_CONFIG_7_1_4 && output_config != IVAS_AUDIO_CONFIG_LS_CUSTOM && output_config != IVAS_AUDIO_CONFIG_MONO && output_config != IVAS_AUDIO_CONFIG_STEREO ) )
     303             :         {
     304     3459837 :             if ( output_config == IVAS_AUDIO_CONFIG_EXTERNAL )
     305             :             {
     306             :                 /* 'internal_config' was already set in ivas_set_audio_config_from_sba_order() */
     307             :             }
     308     3291282 :             else if ( output_config == IVAS_AUDIO_CONFIG_HOA2 || output_config == IVAS_AUDIO_CONFIG_FOA )
     309             :             {
     310     3073746 :                 *internal_config = output_config;
     311             :             }
     312             :             else
     313             :             {
     314      217536 :                 *internal_config = IVAS_AUDIO_CONFIG_HOA3;
     315             :             }
     316     3459837 :             *renderer_type = RENDERER_SBA_LINEAR_DEC;
     317             :         }
     318     1947432 :         else if ( ( ivas_format == MASA_FORMAT && output_config == IVAS_AUDIO_CONFIG_MONO && st_ivas->nchan_transport == 1 ) ||
     319      523326 :                   ( ivas_format == SBA_FORMAT && ( output_config == IVAS_AUDIO_CONFIG_STEREO || output_config == IVAS_AUDIO_CONFIG_MONO ) ) )
     320             :         {
     321      297168 :             *renderer_type = RENDERER_DISABLE;
     322             :         }
     323     1650264 :         else if ( ( ivas_format == MASA_FORMAT && output_config == IVAS_AUDIO_CONFIG_MONO && st_ivas->hDecoderConfig->ivas_total_brate < MASA_STEREO_MIN_BITRATE && st_ivas->hDecoderConfig->ivas_total_brate > IVAS_SID_5k2 ) )
     324             :         {
     325       38094 :             *renderer_type = RENDERER_DISABLE;
     326             :         }
     327     1612170 :         else if ( ivas_format == MASA_FORMAT && output_config == IVAS_AUDIO_CONFIG_STEREO )
     328             :         {
     329      140883 :             *renderer_type = RENDERER_STEREO_PARAMETRIC;
     330             :         }
     331     1471287 :         else if ( ivas_format == MASA_FORMAT && output_config == IVAS_AUDIO_CONFIG_EXTERNAL )
     332             :         {
     333      404724 :             *renderer_type = RENDERER_DISABLE;
     334             :         }
     335     1066563 :         else if ( ivas_format == SBA_ISM_FORMAT && output_config == IVAS_AUDIO_CONFIG_STEREO )
     336             :         {
     337       35436 :             *renderer_type = RENDERER_OSBA_STEREO;
     338             :         }
     339     1031127 :         else if ( ivas_format == SBA_ISM_FORMAT && output_config == IVAS_AUDIO_CONFIG_MONO )
     340             :         {
     341       23931 :             *renderer_type = RENDERER_MONO_DOWNMIX;
     342             :         }
     343     1007196 :         else if ( ivas_format == SBA_ISM_FORMAT && ( output_config == IVAS_AUDIO_CONFIG_FOA || output_config == IVAS_AUDIO_CONFIG_HOA2 || output_config == IVAS_AUDIO_CONFIG_HOA3 ) )
     344             :         {
     345       45510 :             *renderer_type = RENDERER_OSBA_AMBI;
     346             :         }
     347      961686 :         else if ( ivas_format == SBA_ISM_FORMAT && ( output_config == IVAS_AUDIO_CONFIG_5_1 || output_config == IVAS_AUDIO_CONFIG_5_1_2 || output_config == IVAS_AUDIO_CONFIG_5_1_4 || output_config == IVAS_AUDIO_CONFIG_7_1 || output_config == IVAS_AUDIO_CONFIG_7_1_4 || output_config == IVAS_AUDIO_CONFIG_LS_CUSTOM ) )
     348             :         {
     349       47658 :             *renderer_type = RENDERER_OSBA_LS;
     350             :         }
     351      914028 :         else if ( ivas_format == SBA_ISM_FORMAT && output_config == IVAS_AUDIO_CONFIG_EXTERNAL )
     352             :         {
     353       59562 :             *renderer_type = RENDERER_SBA_LINEAR_DEC;
     354             :         }
     355             :     }
     356     1274118 :     else if ( st_ivas->ivas_format == MASA_ISM_FORMAT )
     357             :     {
     358      539334 :         *renderer_type = RENDERER_DIRAC;
     359             : 
     360      539334 :         if ( output_config == IVAS_AUDIO_CONFIG_MONO )
     361             :         {
     362      106143 :             *renderer_type = RENDERER_MONO_DOWNMIX;
     363             :         }
     364      433191 :         else if ( output_config == IVAS_AUDIO_CONFIG_STEREO )
     365             :         {
     366      103680 :             *renderer_type = RENDERER_STEREO_PARAMETRIC;
     367             :         }
     368      329511 :         else if ( output_config == IVAS_AUDIO_CONFIG_EXTERNAL )
     369             :         {
     370       79851 :             if ( st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ )
     371             :             {
     372        8997 :                 *renderer_type = RENDERER_OMASA_OBJECT_EXT;
     373             :             }
     374       70854 :             else if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ )
     375             :             {
     376        9000 :                 *renderer_type = RENDERER_OMASA_MIX_EXT;
     377             :             }
     378             :             else
     379             :             {
     380       61854 :                 *renderer_type = RENDERER_DISABLE;
     381             :             }
     382             :         }
     383             :     }
     384      734784 :     else if ( st_ivas->ivas_format == MC_FORMAT )
     385             :     {
     386      734784 :         *internal_config = transport_config;
     387      734784 :         if ( st_ivas->mc_mode == MC_MODE_MCT && *internal_config != output_config && output_config != IVAS_AUDIO_CONFIG_EXTERNAL )
     388             :         {
     389      182094 :             if ( output_config != IVAS_AUDIO_CONFIG_FOA && output_config != IVAS_AUDIO_CONFIG_HOA2 && output_config != IVAS_AUDIO_CONFIG_HOA3 )
     390             :             {
     391      162585 :                 *renderer_type = RENDERER_MC;
     392             :             }
     393             :             else
     394             :             {
     395       19509 :                 *renderer_type = RENDERER_SBA_LINEAR_ENC;
     396             :             }
     397             :         }
     398      552690 :         else if ( st_ivas->mc_mode == MC_MODE_PARAMUPMIX )
     399             :         {
     400       33198 :             *internal_config = transport_config;
     401       33198 :             if ( *internal_config != output_config && output_config != IVAS_AUDIO_CONFIG_EXTERNAL )
     402             :             {
     403        5742 :                 if ( output_config != IVAS_AUDIO_CONFIG_FOA && output_config != IVAS_AUDIO_CONFIG_HOA2 && output_config != IVAS_AUDIO_CONFIG_HOA3 )
     404             :                 {
     405        2808 :                     *renderer_type = RENDERER_MC;
     406             :                 }
     407             :                 else
     408             :                 {
     409        2934 :                     *renderer_type = RENDERER_SBA_LINEAR_ENC;
     410             :                 }
     411             :             }
     412             :         }
     413      519492 :         else if ( st_ivas->mc_mode == MC_MODE_PARAMMC )
     414             :         {
     415      100023 :             if ( output_config == IVAS_AUDIO_CONFIG_FOA || output_config == IVAS_AUDIO_CONFIG_HOA2 || output_config == IVAS_AUDIO_CONFIG_HOA3 )
     416             :             {
     417       12726 :                 *renderer_type = RENDERER_SBA_LINEAR_ENC;
     418             :             }
     419             :             else
     420             :             {
     421       87297 :                 *renderer_type = RENDERER_MC_PARAMMC;
     422             :             }
     423             :         }
     424      419469 :         else if ( st_ivas->mc_mode == MC_MODE_MCMASA )
     425             :         {
     426      286644 :             if ( output_config != IVAS_AUDIO_CONFIG_EXTERNAL )
     427             :             {
     428      241824 :                 *internal_config = output_config;
     429             :             }
     430             : 
     431             :             /* No rendering for 1TC to Mono or Stereo and 2TC to Stereo */
     432      286644 :             if ( output_config == IVAS_AUDIO_CONFIG_MONO || output_config == IVAS_AUDIO_CONFIG_STEREO )
     433             :             {
     434      159816 :                 if ( st_ivas->nchan_transport == 1 )
     435             :                 {
     436       76239 :                     *renderer_type = RENDERER_DISABLE;
     437             :                 }
     438       83577 :                 else if ( output_config == IVAS_AUDIO_CONFIG_STEREO && st_ivas->nchan_transport == 2 && !st_ivas->hOutSetup.separateChannelEnabled )
     439             :                 {
     440        2613 :                     *renderer_type = RENDERER_DISABLE;
     441             :                 }
     442             :                 else
     443             :                 {
     444       80964 :                     *renderer_type = RENDERER_MCMASA_MONO_STEREO;
     445             :                 }
     446             :             }
     447             :             else
     448             :             {
     449      126828 :                 *renderer_type = RENDERER_DIRAC;
     450      126828 :                 if ( output_config == IVAS_AUDIO_CONFIG_FOA || output_config == IVAS_AUDIO_CONFIG_HOA2 || output_config == IVAS_AUDIO_CONFIG_HOA3 )
     451             :                 {
     452       27456 :                     *renderer_type = RENDERER_SBA_LINEAR_ENC;
     453       27456 :                     *internal_config = transport_config;
     454             :                 }
     455       99372 :                 else if ( transport_config == IVAS_AUDIO_CONFIG_5_1 && ( output_config == IVAS_AUDIO_CONFIG_7_1 || output_config == IVAS_AUDIO_CONFIG_5_1_4 ) )
     456             :                 {
     457           0 :                     *internal_config = transport_config;
     458             :                 }
     459             :             }
     460             :         }
     461             :     }
     462             : 
     463    14677183 :     return;
     464             : }
     465             : 
     466             : 
     467             : /*-------------------------------------------------------------------------*
     468             :  * ivas_renderer_secondary_select()
     469             :  *
     470             :  * Select IVAS secondary binaural renderer (used in combined formats)
     471             :  *-------------------------------------------------------------------------*/
     472             : 
     473             : /*! r: secondary binaural renderer type */
     474    29460920 : RENDERER_TYPE ivas_renderer_secondary_select(
     475             :     Decoder_Struct *st_ivas /* i/o: IVAS decoder structure  */
     476             : )
     477             : {
     478             :     RENDERER_TYPE renderer_type;
     479             :     AUDIO_CONFIG output_config;
     480             : 
     481             :     /* disabled by default */
     482    29460920 :     renderer_type = RENDERER_DISABLE;
     483    29460920 :     output_config = st_ivas->hDecoderConfig->output_config;
     484             : 
     485    29460920 :     if ( st_ivas->ivas_format == MASA_ISM_FORMAT && st_ivas->ism_mode == ISM_MASA_MODE_DISC &&
     486             : #ifdef FIX_1119_SPLIT_RENDERING_VOIP
     487      462645 :          ( output_config == IVAS_AUDIO_CONFIG_BINAURAL || output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED || output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM )
     488             : #else
     489             :          output_config == IVAS_AUDIO_CONFIG_BINAURAL
     490             : #endif
     491             :     )
     492             :     {
     493       81405 :         renderer_type = RENDERER_BINAURAL_OBJECTS_TD;
     494             :     }
     495             : #ifdef FIX_1119_SPLIT_RENDERING_VOIP
     496    29379515 :     else if ( st_ivas->ivas_format == SBA_ISM_FORMAT && st_ivas->ism_mode == ISM_SBA_MODE_DISC && ( output_config == IVAS_AUDIO_CONFIG_BINAURAL || output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB || output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED || output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) )
     497             : #else
     498             :     else if ( st_ivas->ivas_format == SBA_ISM_FORMAT && st_ivas->ism_mode == ISM_SBA_MODE_DISC && ( output_config == IVAS_AUDIO_CONFIG_BINAURAL || output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) )
     499             : #endif
     500             :     {
     501      457893 :         renderer_type = RENDERER_BINAURAL_OBJECTS_TD;
     502             :     }
     503             : 
     504    29460920 :     return renderer_type;
     505             : }

Generated by: LCOV version 1.14