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 20700821 : 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 20700821 : renderer_type = &( st_ivas->renderer_type ); 63 20700821 : internal_config = &( st_ivas->intern_config ); 64 20700821 : output_config = st_ivas->hDecoderConfig->output_config; 65 20700821 : transport_config = st_ivas->transport_config; 66 : 67 : /* disabled rendering by default */ 68 20700821 : *renderer_type = RENDERER_DISABLE; 69 : 70 : /*-----------------------------------------------------------------* 71 : * Binaural rendering configurations 72 : *-----------------------------------------------------------------*/ 73 : 74 20700821 : if ( st_ivas->hDecoderConfig->Opt_Headrotation || st_ivas->hDecoderConfig->Opt_ExternalOrientation ) 75 : { 76 2741269 : st_ivas->hCombinedOrientationData->shd_rot_max_order = -1; 77 : } 78 : 79 20700821 : 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 7383483 : if ( st_ivas->ivas_format == ISM_FORMAT ) 82 : { 83 1414556 : if ( st_ivas->ism_mode == ISM_MODE_PARAM ) 84 : { 85 268580 : 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 182246 : *renderer_type = RENDERER_BINAURAL_PARAMETRIC; 88 : } 89 : else 90 : { 91 86334 : *renderer_type = RENDERER_BINAURAL_PARAMETRIC_ROOM; 92 : } 93 : } 94 : else /* ISM_MODE_DISC */ 95 : { 96 1145976 : 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 844976 : *renderer_type = RENDERER_BINAURAL_OBJECTS_TD; 99 844976 : *internal_config = output_config; 100 : } 101 : else 102 : { 103 301000 : *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 301000 : *internal_config = IVAS_AUDIO_CONFIG_7_1_4; 111 : } 112 : } 113 : } 114 5968927 : 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 2981374 : *internal_config = output_config; 117 : 118 2981374 : 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 1592016 : *renderer_type = RENDERER_BINAURAL_PARAMETRIC; 121 : } 122 : else 123 : { 124 1389358 : *renderer_type = RENDERER_BINAURAL_PARAMETRIC_ROOM; 125 : } 126 : } 127 2987553 : else if ( st_ivas->ivas_format == SBA_FORMAT || st_ivas->ivas_format == SBA_ISM_FORMAT ) 128 : { 129 1307668 : *internal_config = IVAS_AUDIO_CONFIG_HOA3; 130 : 131 1307668 : 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 912836 : *renderer_type = RENDERER_BINAURAL_FASTCONV; 134 : } 135 : else 136 : { 137 394832 : *renderer_type = RENDERER_BINAURAL_FASTCONV_ROOM; 138 : } 139 : 140 1307668 : if ( st_ivas->ivas_format == SBA_ISM_FORMAT && *renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) 141 : { 142 179483 : *internal_config = IVAS_AUDIO_CONFIG_7_1_4; 143 : } 144 : 145 1307668 : if ( st_ivas->hDecoderConfig->Opt_Headrotation || st_ivas->hDecoderConfig->Opt_ExternalOrientation ) 146 : { 147 : 148 435730 : nchan_internal = ivas_sba_get_nchan_metadata( st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate ); 149 435730 : if ( nchan_internal == 2 ) 150 : { 151 439 : st_ivas->hCombinedOrientationData->shd_rot_max_order = 1; 152 : } 153 435291 : else if ( nchan_internal == 4 || nchan_internal == 3 ) 154 : { 155 347260 : st_ivas->hCombinedOrientationData->shd_rot_max_order = 0; 156 : } 157 88031 : else if ( nchan_internal == 6 || nchan_internal == 5 ) 158 : { 159 0 : st_ivas->hCombinedOrientationData->shd_rot_max_order = 2; 160 : } 161 88031 : else if ( nchan_internal == 8 || nchan_internal == 7 ) 162 : { 163 21296 : st_ivas->hCombinedOrientationData->shd_rot_max_order = 3; 164 : } 165 : } 166 : } 167 1679885 : else if ( st_ivas->ivas_format == MC_FORMAT ) 168 : { 169 1679885 : if ( st_ivas->mc_mode == MC_MODE_MCMASA ) 170 : { 171 307774 : *internal_config = output_config; 172 : 173 307774 : 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 145295 : *renderer_type = RENDERER_BINAURAL_PARAMETRIC; 176 : } 177 : else 178 : { 179 162479 : *renderer_type = RENDERER_BINAURAL_PARAMETRIC_ROOM; 180 : } 181 : } 182 : else 183 : { 184 1372111 : *internal_config = transport_config; 185 : 186 1372111 : 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 1057225 : 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 226561 : *renderer_type = RENDERER_BINAURAL_OBJECTS_TD; 191 : } 192 : else 193 : { 194 830664 : if ( st_ivas->mc_mode == MC_MODE_MCT ) 195 : { 196 503832 : *renderer_type = RENDERER_BINAURAL_MIXER_CONV; 197 : } 198 : else 199 : { 200 326832 : *renderer_type = RENDERER_BINAURAL_FASTCONV; 201 : } 202 : 203 830664 : if ( st_ivas->hDecoderConfig->Opt_Headrotation || st_ivas->hDecoderConfig->Opt_ExternalOrientation ) 204 : { 205 : /* force HOA3 domain for rotation*/ 206 250545 : *internal_config = IVAS_AUDIO_CONFIG_HOA3; 207 : } 208 : } 209 : } 210 : else 211 : { 212 314886 : if ( st_ivas->mc_mode == MC_MODE_MCT ) 213 : { 214 233273 : *renderer_type = RENDERER_BINAURAL_MIXER_CONV_ROOM; 215 : } 216 : else 217 : { 218 81613 : *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 13317338 : else if ( st_ivas->ivas_format == MONO_FORMAT ) 240 : { 241 564 : if ( output_config == IVAS_AUDIO_CONFIG_STEREO ) 242 : { 243 7 : *renderer_type = RENDERER_NON_DIEGETIC_DOWNMIX; 244 : } 245 : } 246 13316774 : else if ( st_ivas->ivas_format == STEREO_FORMAT ) 247 : { 248 2374558 : if ( output_config != IVAS_AUDIO_CONFIG_STEREO && output_config != IVAS_AUDIO_CONFIG_MONO && output_config != IVAS_AUDIO_CONFIG_EXTERNAL ) 249 : { 250 45387 : *renderer_type = RENDERER_MC; 251 : } 252 : } 253 10942216 : else if ( st_ivas->ivas_format == ISM_FORMAT ) 254 : { 255 1637514 : if ( ( output_config == IVAS_AUDIO_CONFIG_STEREO ) && ( st_ivas->hDecoderConfig->Opt_non_diegetic_pan ) ) 256 : { 257 29092 : *renderer_type = RENDERER_NON_DIEGETIC_DOWNMIX; 258 : } 259 : else 260 : { 261 1608422 : if ( st_ivas->ism_mode == ISM_MODE_PARAM ) 262 : { 263 264832 : *renderer_type = RENDERER_PARAM_ISM; 264 264832 : if ( output_config == IVAS_AUDIO_CONFIG_MONO ) 265 : { 266 34179 : *renderer_type = RENDERER_MONO_DOWNMIX; 267 : } 268 230653 : else if ( output_config == IVAS_AUDIO_CONFIG_STEREO ) 269 : { 270 41942 : *renderer_type = RENDERER_DISABLE; 271 : } 272 188711 : else if ( output_config == IVAS_AUDIO_CONFIG_FOA || output_config == IVAS_AUDIO_CONFIG_HOA2 || output_config == IVAS_AUDIO_CONFIG_HOA3 ) 273 : { 274 115912 : *renderer_type = RENDERER_SBA_LINEAR_ENC; 275 115912 : *internal_config = IVAS_AUDIO_CONFIG_7_1_4; 276 : } 277 : } 278 : else /* ISM_MODE_DISC */ 279 : { 280 1343590 : *renderer_type = RENDERER_TD_PANNING; 281 1343590 : if ( output_config == IVAS_AUDIO_CONFIG_MONO ) 282 : { 283 104401 : *renderer_type = RENDERER_MONO_DOWNMIX; 284 : } 285 1239189 : else if ( output_config == IVAS_AUDIO_CONFIG_FOA || output_config == IVAS_AUDIO_CONFIG_HOA2 || output_config == IVAS_AUDIO_CONFIG_HOA3 ) 286 : { 287 276684 : *renderer_type = RENDERER_SBA_LINEAR_ENC; 288 : } 289 962505 : else if ( output_config == IVAS_AUDIO_CONFIG_EXTERNAL ) 290 : { 291 489797 : *renderer_type = RENDERER_DISABLE; 292 : } 293 : } 294 : } 295 : } 296 9304702 : else if ( st_ivas->ivas_format == MASA_FORMAT || st_ivas->ivas_format == SBA_FORMAT || st_ivas->ivas_format == SBA_ISM_FORMAT ) 297 7458604 : { 298 : IVAS_FORMAT ivas_format; 299 7458604 : *renderer_type = RENDERER_DIRAC; 300 7458604 : 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 7458604 : 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 4047937 : if ( output_config == IVAS_AUDIO_CONFIG_EXTERNAL ) 305 : { 306 : /* 'internal_config' was already set in ivas_set_audio_config_from_sba_order() */ 307 : } 308 3763460 : else if ( output_config == IVAS_AUDIO_CONFIG_HOA2 || output_config == IVAS_AUDIO_CONFIG_FOA ) 309 : { 310 3419394 : *internal_config = output_config; 311 : } 312 : else 313 : { 314 344066 : *internal_config = IVAS_AUDIO_CONFIG_HOA3; 315 : } 316 4047937 : *renderer_type = RENDERER_SBA_LINEAR_DEC; 317 : } 318 3410667 : else if ( ( ivas_format == MASA_FORMAT && output_config == IVAS_AUDIO_CONFIG_MONO && st_ivas->nchan_transport == 1 ) || 319 1210173 : ( ivas_format == SBA_FORMAT && ( output_config == IVAS_AUDIO_CONFIG_STEREO || output_config == IVAS_AUDIO_CONFIG_MONO ) ) ) 320 : { 321 522931 : *renderer_type = RENDERER_DISABLE; 322 : } 323 2887736 : 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 47296 : *renderer_type = RENDERER_DISABLE; 326 : } 327 2840440 : else if ( ivas_format == MASA_FORMAT && output_config == IVAS_AUDIO_CONFIG_STEREO ) 328 : { 329 175967 : *renderer_type = RENDERER_STEREO_PARAMETRIC; 330 : } 331 2664473 : else if ( ivas_format == MASA_FORMAT && output_config == IVAS_AUDIO_CONFIG_EXTERNAL ) 332 : { 333 445264 : *renderer_type = RENDERER_DISABLE; 334 : } 335 2219209 : else if ( ivas_format == SBA_ISM_FORMAT && output_config == IVAS_AUDIO_CONFIG_STEREO ) 336 : { 337 78940 : *renderer_type = RENDERER_OSBA_STEREO; 338 : } 339 2140269 : else if ( ivas_format == SBA_ISM_FORMAT && output_config == IVAS_AUDIO_CONFIG_MONO ) 340 : { 341 65843 : *renderer_type = RENDERER_MONO_DOWNMIX; 342 : } 343 2074426 : 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 167014 : *renderer_type = RENDERER_OSBA_AMBI; 346 : } 347 1907412 : 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 245206 : *renderer_type = RENDERER_OSBA_LS; 350 : } 351 1662206 : else if ( ivas_format == SBA_ISM_FORMAT && output_config == IVAS_AUDIO_CONFIG_EXTERNAL ) 352 : { 353 109224 : *renderer_type = RENDERER_SBA_LINEAR_DEC; 354 : } 355 : } 356 1846098 : else if ( st_ivas->ivas_format == MASA_ISM_FORMAT ) 357 : { 358 826088 : *renderer_type = RENDERER_DIRAC; 359 : 360 826088 : if ( output_config == IVAS_AUDIO_CONFIG_MONO ) 361 : { 362 134403 : *renderer_type = RENDERER_MONO_DOWNMIX; 363 : } 364 691685 : else if ( output_config == IVAS_AUDIO_CONFIG_STEREO ) 365 : { 366 132928 : *renderer_type = RENDERER_STEREO_PARAMETRIC; 367 : } 368 558757 : else if ( output_config == IVAS_AUDIO_CONFIG_EXTERNAL ) 369 : { 370 106929 : if ( st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) 371 : { 372 12855 : *renderer_type = RENDERER_OMASA_OBJECT_EXT; 373 : } 374 94074 : else if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) 375 : { 376 11448 : *renderer_type = RENDERER_OMASA_MIX_EXT; 377 : } 378 : else 379 : { 380 82626 : *renderer_type = RENDERER_DISABLE; 381 : } 382 : } 383 : } 384 1020010 : else if ( st_ivas->ivas_format == MC_FORMAT ) 385 : { 386 1020010 : *internal_config = transport_config; 387 1020010 : if ( st_ivas->mc_mode == MC_MODE_MCT && *internal_config != output_config && output_config != IVAS_AUDIO_CONFIG_EXTERNAL ) 388 : { 389 286014 : if ( output_config != IVAS_AUDIO_CONFIG_FOA && output_config != IVAS_AUDIO_CONFIG_HOA2 && output_config != IVAS_AUDIO_CONFIG_HOA3 ) 390 : { 391 239043 : *renderer_type = RENDERER_MC; 392 : } 393 : else 394 : { 395 46971 : *renderer_type = RENDERER_SBA_LINEAR_ENC; 396 : } 397 : } 398 733996 : else if ( st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) 399 : { 400 37316 : *internal_config = transport_config; 401 37316 : if ( *internal_config != output_config && output_config != IVAS_AUDIO_CONFIG_EXTERNAL ) 402 : { 403 8566 : if ( output_config != IVAS_AUDIO_CONFIG_FOA && output_config != IVAS_AUDIO_CONFIG_HOA2 && output_config != IVAS_AUDIO_CONFIG_HOA3 ) 404 : { 405 4774 : *renderer_type = RENDERER_MC; 406 : } 407 : else 408 : { 409 3792 : *renderer_type = RENDERER_SBA_LINEAR_ENC; 410 : } 411 : } 412 : } 413 696680 : else if ( st_ivas->mc_mode == MC_MODE_PARAMMC ) 414 : { 415 152111 : if ( output_config == IVAS_AUDIO_CONFIG_FOA || output_config == IVAS_AUDIO_CONFIG_HOA2 || output_config == IVAS_AUDIO_CONFIG_HOA3 ) 416 : { 417 26096 : *renderer_type = RENDERER_SBA_LINEAR_ENC; 418 : } 419 : else 420 : { 421 126015 : *renderer_type = RENDERER_MC_PARAMMC; 422 : } 423 : } 424 544569 : else if ( st_ivas->mc_mode == MC_MODE_MCMASA ) 425 : { 426 381910 : if ( output_config != IVAS_AUDIO_CONFIG_EXTERNAL ) 427 : { 428 327603 : *internal_config = output_config; 429 : } 430 : 431 : /* No rendering for 1TC to Mono or Stereo and 2TC to Stereo */ 432 381910 : if ( output_config == IVAS_AUDIO_CONFIG_MONO || output_config == IVAS_AUDIO_CONFIG_STEREO ) 433 : { 434 184102 : if ( st_ivas->nchan_transport == 1 ) 435 : { 436 93999 : *renderer_type = RENDERER_DISABLE; 437 : } 438 90103 : else if ( output_config == IVAS_AUDIO_CONFIG_STEREO && st_ivas->nchan_transport == 2 && !st_ivas->hOutSetup.separateChannelEnabled ) 439 : { 440 3177 : *renderer_type = RENDERER_DISABLE; 441 : } 442 : else 443 : { 444 86926 : *renderer_type = RENDERER_MCMASA_MONO_STEREO; 445 : } 446 : } 447 : else 448 : { 449 197808 : *renderer_type = RENDERER_DIRAC; 450 197808 : if ( output_config == IVAS_AUDIO_CONFIG_FOA || output_config == IVAS_AUDIO_CONFIG_HOA2 || output_config == IVAS_AUDIO_CONFIG_HOA3 ) 451 : { 452 48872 : *renderer_type = RENDERER_SBA_LINEAR_ENC; 453 48872 : *internal_config = transport_config; 454 : } 455 148936 : 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 1884 : *internal_config = transport_config; 458 : } 459 : } 460 : } 461 : } 462 : 463 20700821 : 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 41394605 : 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 41394605 : renderer_type = RENDERER_DISABLE; 483 41394605 : output_config = st_ivas->hDecoderConfig->output_config; 484 : 485 41394605 : if ( st_ivas->ivas_format == MASA_ISM_FORMAT && st_ivas->ism_mode == ISM_MASA_MODE_DISC && 486 : #ifdef FIX_1119_SPLIT_RENDERING_VOIP 487 1078709 : ( 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 237961 : renderer_type = RENDERER_BINAURAL_OBJECTS_TD; 494 : } 495 : #ifdef FIX_1119_SPLIT_RENDERING_VOIP 496 41156644 : 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 924425 : renderer_type = RENDERER_BINAURAL_OBJECTS_TD; 502 : } 503 : 504 41394605 : return renderer_type; 505 : }