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 @ efe53129c9ed87a5067dd0a8fb9dca41db9c4add Lines: 167 172 97.1 %
Date: 2026-02-12 08:06:16 Functions: 2 2 100.0 %

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

Generated by: LCOV version 1.14