From 01f58a6ba463a0d16187b3dbc3d10cbec68b78a1 Mon Sep 17 00:00:00 2001 From: vaclav Date: Thu, 20 Jun 2024 11:49:45 +0200 Subject: [PATCH] issue 745: implicit data type conversion when calling IVAS_DEC_Configure(); UNDER FIX_745_FIX_DATA_TYPE_CONVERSION --- apps/decoder.c | 48 ++++++++++++++++++++++++++++ lib_com/options.h | 1 + lib_dec/lib_dec.c | 79 ++++++++++++++++++++++++++++++++++++++--------- lib_dec/lib_dec.h | 24 ++++++++++++++ 4 files changed, 137 insertions(+), 15 deletions(-) diff --git a/apps/decoder.c b/apps/decoder.c index 354d611a95..8bc31fdea6 100644 --- a/apps/decoder.c +++ b/apps/decoder.c @@ -128,7 +128,11 @@ typedef struct bool customLsOutputEnabled; char *customLsSetupFilename; int16_t orientation_tracking; +#ifdef FIX_745_FIX_DATA_TYPE_CONVERSION + bool non_diegetic_pan_enabled; +#else int16_t Opt_non_diegetic_pan; +#endif float non_diegetic_pan_gain; bool renderConfigEnabled; char *renderConfigFilename; @@ -148,7 +152,11 @@ typedef struct #endif #endif AcousticEnvironmentSequence aeSequence; +#ifdef FIX_745_FIX_DATA_TYPE_CONVERSION + bool dpidEnabled; +#else int16_t Opt_dpid_on; +#endif uint16_t directivityPatternId[IVAS_MAX_NUM_OBJECTS]; } DecArguments; @@ -407,8 +415,12 @@ int main( if ( arg.renderConfigEnabled ) { /* sanity check */ +#ifdef FIX_745_FIX_DATA_TYPE_CONVERSION + if ( arg.outputConfig != IVAS_AUDIO_CONFIG_BINAURAL && arg.outputConfig != IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR && arg.outputConfig != IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB && arg.outputConfig != IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED && arg.outputConfig != IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM && arg.non_diegetic_pan_enabled == false ) +#else if ( arg.outputConfig != IVAS_AUDIO_CONFIG_BINAURAL && arg.outputConfig != IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR && arg.outputConfig != IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB && arg.outputConfig != IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED && arg.outputConfig != IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM && arg.Opt_non_diegetic_pan == 0 ) +#endif { fprintf( stderr, "\nError: Renderer configuration file cannot be used in this output configuration.\n\n" ); goto cleanup; @@ -427,8 +439,14 @@ int main( asked_frame_size = arg.renderFramesize; uint16_t aeID = arg.aeSequence.count > 0 ? arg.aeSequence.pID[0] : 65535; + +#ifdef FIX_745_FIX_DATA_TYPE_CONVERSION + if ( ( error = IVAS_DEC_Configure( hIvasDec, arg.output_Fs, arg.outputConfig, arg.tsmEnabled, arg.renderFramesize, arg.customLsOutputEnabled, arg.hrtfReaderEnabled, arg.enableHeadRotation, arg.enableExternalOrientation, arg.orientation_tracking, arg.renderConfigEnabled, arg.non_diegetic_pan_enabled, arg.non_diegetic_pan_gain, + arg.dpidEnabled, aeID, arg.delayCompensationEnabled ) ) != IVAS_ERR_OK ) +#else if ( ( error = IVAS_DEC_Configure( hIvasDec, arg.output_Fs, arg.outputConfig, arg.tsmEnabled, arg.renderFramesize, arg.customLsOutputEnabled, arg.hrtfReaderEnabled, arg.enableHeadRotation, arg.enableExternalOrientation, arg.orientation_tracking, arg.renderConfigEnabled, arg.Opt_non_diegetic_pan, arg.non_diegetic_pan_gain, arg.Opt_dpid_on, aeID, arg.delayCompensationEnabled ) ) != IVAS_ERR_OK ) +#endif { fprintf( stderr, "\nConfigure failed: %s\n\n", IVAS_DEC_GetErrorMessage( error ) ); goto cleanup; @@ -594,8 +612,12 @@ int main( /* sanity check */ if ( arg.outputConfig != IVAS_AUDIO_CONFIG_BINAURAL && arg.outputConfig != IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR && arg.outputConfig != IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB && +#ifdef FIX_745_FIX_DATA_TYPE_CONVERSION + arg.outputConfig != IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED && arg.outputConfig != IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM && arg.non_diegetic_pan_enabled == false ) +#else arg.outputConfig != IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED && arg.outputConfig != IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM && arg.Opt_non_diegetic_pan == 0 ) +#endif { fprintf( stderr, "\nExternal Renderer Config is supported only when binaural output configurations is used as output OR when Split rendering mode is enabled. Exiting. \n" ); goto cleanup; @@ -1066,12 +1088,20 @@ static bool parseCmdlIVAS_dec( arg->renderConfigEnabled = false; arg->renderConfigFilename = NULL; +#ifdef FIX_745_FIX_DATA_TYPE_CONVERSION + arg->dpidEnabled = false; +#else arg->Opt_dpid_on = 0; +#endif arg->outputMdFilename = NULL; arg->inputFormat = IVAS_DEC_INPUT_FORMAT_G192; +#ifdef FIX_745_FIX_DATA_TYPE_CONVERSION + arg->non_diegetic_pan_enabled = false; +#else arg->Opt_non_diegetic_pan = 0; +#endif arg->non_diegetic_pan_gain = 0.f; arg->tsmEnabled = false; arg->renderFramesize = IVAS_RENDER_FRAMESIZE_20MS; @@ -1410,7 +1440,11 @@ static bool parseCmdlIVAS_dec( else if ( strcmp( argv_to_upper, "-NON_DIEGETIC_PAN" ) == 0 ) { i++; +#ifdef FIX_745_FIX_DATA_TYPE_CONVERSION + arg->non_diegetic_pan_enabled = true; +#else arg->Opt_non_diegetic_pan = 1; +#endif strncpy( argv_to_upper, argv[i], sizeof( argv_to_upper ) - 1 ); argv_to_upper[sizeof( argv_to_upper ) - 1] = '\0'; to_upper( argv_to_upper ); @@ -1507,7 +1541,11 @@ static bool parseCmdlIVAS_dec( { int16_t id, tmp; +#ifdef FIX_745_FIX_DATA_TYPE_CONVERSION + arg->dpidEnabled = true; +#else arg->Opt_dpid_on = 1; +#endif ++i; tmp = 0; while ( is_number( argv[i + tmp] ) && tmp < IVAS_MAX_NUM_OBJECTS ) @@ -1587,7 +1625,12 @@ static bool parseCmdlIVAS_dec( arg->customLsSetupFilename = argv[i]; } i++; + +#ifdef FIX_745_FIX_DATA_TYPE_CONVERSION + if ( arg->non_diegetic_pan_enabled && arg->outputConfig != IVAS_AUDIO_CONFIG_STEREO ) +#else if ( ( arg->Opt_non_diegetic_pan ) && ( arg->outputConfig != IVAS_AUDIO_CONFIG_STEREO ) ) +#endif { fprintf( stderr, "Error: non-diegetic panning is supported in stereo only\n\n" ); usage_dec(); @@ -1605,7 +1648,12 @@ static bool parseCmdlIVAS_dec( { arg->outputConfig = IVAS_AUDIO_CONFIG_MONO; arg->decMode = IVAS_DEC_MODE_EVS; + +#ifdef FIX_745_FIX_DATA_TYPE_CONVERSION + if ( arg->non_diegetic_pan_enabled ) +#else if ( ( arg->Opt_non_diegetic_pan ) ) +#endif { arg->outputConfig = IVAS_AUDIO_CONFIG_STEREO; } diff --git a/lib_com/options.h b/lib_com/options.h index 1e56a65dcf..5b273c2513 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -164,6 +164,7 @@ #define FIX_1099_JBM_MD_HANDLE_ALLOC /* VA: issue 1099: Limit the allocation of `hJbmMetadata` handle to MASA and OMASA only */ #define FIX_1111_TDM_LSP_BUFFER /* VA: issue 1111: remove unused buffer `tdm_lspQ_PCh[]' */ #define FIX_1101_CLEANING_JBM_CALL /* VA: issue 1101: remove obsolete call of ivas_jbm_dec_tc_buffer_open() */ +#define FIX_745_FIX_DATA_TYPE_CONVERSION /* VA: issue 745: implicit data type conversion when calling IVAS_DEC_Configure() */ /* #################### End BE switches ################################## */ diff --git a/lib_dec/lib_dec.c b/lib_dec/lib_dec.c index 66032833c1..487beb8c62 100644 --- a/lib_dec/lib_dec.c +++ b/lib_dec/lib_dec.c @@ -401,22 +401,46 @@ static IVAS_DEC_BS_FORMAT mapIvasFormat( *---------------------------------------------------------------------*/ ivas_error IVAS_DEC_Configure( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - const uint32_t sampleRate, /* i : output sampling frequency */ - const AUDIO_CONFIG outputConfig, /* i : output configuration */ - const int16_t tsmEnabled, /* i : enable time scale modification */ - const IVAS_RENDER_FRAMESIZE renderFramesize, /* i : rendering frame size */ - const int16_t customLsOutputEnabled, /* i : enable custom loudspeaker setup handle */ - const int16_t hrtfReaderEnabled, /* i : enable HRTF binary file input */ - const int16_t enableHeadRotation, /* i : enable head rotation for binaural output */ - const int16_t enableExternalOrientation, /* i : enable external orientations */ + IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ + const uint32_t sampleRate, /* i : output sampling frequency */ + const AUDIO_CONFIG outputConfig, /* i : output configuration */ +#ifdef FIX_745_FIX_DATA_TYPE_CONVERSION + const bool tsmEnabled, /* i : enable TSM */ +#else + const int16_t tsmEnabled, /* i : enable time scale modification */ +#endif + const IVAS_RENDER_FRAMESIZE renderFramesize, /* i : rendering frame size */ +#ifdef FIX_745_FIX_DATA_TYPE_CONVERSION + const bool customLsOutputEnabled, /* i : enable custom loudspeaker setup handle */ + const bool hrtfReaderEnabled, /* i : enable HRTF binary file input */ + const bool enableHeadRotation, /* i : enable head rotation for binaural output */ + const bool enableExternalOrientation, /* i : enable external orientations */ +#else + const int16_t customLsOutputEnabled, /* i : enable custom loudspeaker setup handle */ + const int16_t hrtfReaderEnabled, /* i : enable HRTF binary file input */ + const int16_t enableHeadRotation, /* i : enable head rotation for binaural output */ + const int16_t enableExternalOrientation, /* i : enable external orientations */ +#endif const IVAS_HEAD_ORIENT_TRK_T orientation_tracking, /* i : head orientation tracking type */ - const int16_t renderConfigEnabled, /* i : enable Renderer config. file for binaural output */ - const int16_t Opt_non_diegetic_pan, /* i : diegetic or not */ - const float non_diegetic_pan_gain, /* i : non diegetic panning gain */ - const int16_t Opt_dpid_on, /* i : enable directivity pattern option */ - const uint16_t acousticEnvironmentId, /* i : Acoustic environment ID */ - const int16_t delayCompensationEnabled /* i : enable delay compensation */ +#ifdef FIX_745_FIX_DATA_TYPE_CONVERSION + const bool renderConfigEnabled, /* i : enable Renderer config. file for binaural output */ + const bool non_diegetic_pan_enabled, /* i : enabled diegetic panning */ +#else + const int16_t renderConfigEnabled, /* i : enable Renderer config. file for binaural output */ + const int16_t Opt_non_diegetic_pan, /* i : diegetic or not */ +#endif + const float non_diegetic_pan_gain, /* i : non diegetic panning gain */ +#ifdef FIX_745_FIX_DATA_TYPE_CONVERSION + const bool dpidEnabled, /* i : enable directivity pattern option */ +#else + const int16_t Opt_dpid_on, /* i : enable directivity pattern option */ +#endif + const uint16_t acousticEnvironmentId, /* i : Acoustic environment ID */ +#ifdef FIX_745_FIX_DATA_TYPE_CONVERSION + const bool delayCompensationEnabled /* i : enable delay compensation */ +#else + const int16_t delayCompensationEnabled /* i : enable delay compensation */ +#endif ) { Decoder_Struct *st_ivas; @@ -434,8 +458,13 @@ ivas_error IVAS_DEC_Configure( return IVAS_ERR_WRONG_PARAMS; } +#ifdef FIX_745_FIX_DATA_TYPE_CONVERSION + if ( hIvasDec->mode == IVAS_DEC_MODE_EVS && !( ( outputConfig == IVAS_AUDIO_CONFIG_MONO && !non_diegetic_pan_enabled ) || + ( outputConfig == IVAS_AUDIO_CONFIG_STEREO && non_diegetic_pan_enabled ) ) ) +#else if ( hIvasDec->mode == IVAS_DEC_MODE_EVS && !( ( outputConfig == IVAS_AUDIO_CONFIG_MONO && Opt_non_diegetic_pan == 0 ) || ( outputConfig == IVAS_AUDIO_CONFIG_STEREO && Opt_non_diegetic_pan == 1 ) ) ) +#endif { return IVAS_ERR_WRONG_MODE; } @@ -463,17 +492,37 @@ ivas_error IVAS_DEC_Configure( hDecoderConfig->nchan_out = audioCfg2channels( hDecoderConfig->output_config ); } +#ifdef FIX_745_FIX_DATA_TYPE_CONVERSION + hDecoderConfig->Opt_tsm = (int16_t) tsmEnabled; + hDecoderConfig->Opt_LsCustom = (int16_t) customLsOutputEnabled; + hDecoderConfig->Opt_Headrotation = (int16_t) enableHeadRotation; +#else hDecoderConfig->Opt_tsm = tsmEnabled; hDecoderConfig->Opt_LsCustom = customLsOutputEnabled; hDecoderConfig->Opt_Headrotation = enableHeadRotation; +#endif hDecoderConfig->orientation_tracking = orientation_tracking; +#ifdef FIX_745_FIX_DATA_TYPE_CONVERSION + hDecoderConfig->Opt_HRTF_binary = (int16_t) hrtfReaderEnabled; + hDecoderConfig->Opt_RendConfigCustom = (int16_t) renderConfigEnabled; + hDecoderConfig->Opt_non_diegetic_pan = (int16_t) non_diegetic_pan_enabled; +#else hDecoderConfig->Opt_HRTF_binary = hrtfReaderEnabled; hDecoderConfig->Opt_RendConfigCustom = renderConfigEnabled; hDecoderConfig->Opt_non_diegetic_pan = Opt_non_diegetic_pan; +#endif hDecoderConfig->non_diegetic_pan_gain = non_diegetic_pan_gain; +#ifdef FIX_745_FIX_DATA_TYPE_CONVERSION + hDecoderConfig->Opt_delay_comp = (int16_t) delayCompensationEnabled; +#else hDecoderConfig->Opt_delay_comp = delayCompensationEnabled; +#endif hDecoderConfig->Opt_ExternalOrientation = enableExternalOrientation; +#ifdef FIX_745_FIX_DATA_TYPE_CONVERSION + hDecoderConfig->Opt_dpid_on = (int16_t) dpidEnabled; +#else hDecoderConfig->Opt_dpid_on = Opt_dpid_on; +#endif hDecoderConfig->Opt_aeid_on = acousticEnvironmentId != 65535 ? TRUE : FALSE; if ( renderFramesize == IVAS_RENDER_FRAMESIZE_UNKNOWN ) diff --git a/lib_dec/lib_dec.h b/lib_dec/lib_dec.h index 0be389a61d..85f5d60566 100644 --- a/lib_dec/lib_dec.h +++ b/lib_dec/lib_dec.h @@ -122,19 +122,43 @@ ivas_error IVAS_DEC_Configure( IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ const uint32_t sampleRate, /* i : output sampling frequency */ const IVAS_AUDIO_CONFIG outputConfig, /* i : audio configuration */ +#ifdef FIX_745_FIX_DATA_TYPE_CONVERSION + const bool tsmEnabled, /* i : enable TSM */ +#else const int16_t tsmEnabled, /* i : enable TSM */ +#endif const IVAS_RENDER_FRAMESIZE renderFramesize, /* i : rendering frame size */ +#ifdef FIX_745_FIX_DATA_TYPE_CONVERSION + const bool customLsOutputEnabled, /* i : enable custom loudspeaker setup handle */ + const bool hrtfReaderEnabled, /* i : enable HRTF binary file input */ + const bool enableHeadRotation, /* i : enable head rotation for binaural output */ + const bool enableExternalOrientation, /* i : enable external orientations */ +#else const int16_t customLsOutputEnabled, /* i : enable custom loudspeaker setup handle */ const int16_t hrtfReaderEnabled, /* i : enable HRTF binary file input */ const int16_t enableHeadRotation, /* i : enable head rotation for binaural output */ const int16_t enableExternalOrientation, /* i : enable external orientations */ +#endif const IVAS_HEAD_ORIENT_TRK_T orientation_tracking, /* i : head orientation tracking type */ +#ifdef FIX_745_FIX_DATA_TYPE_CONVERSION + const bool renderConfigEnabled, /* i : enable Renderer config. file for binaural output */ + const bool non_diegetic_pan_enabled, /* i : enabled diegetic panning */ +#else const int16_t renderConfigEnabled, /* i : enable Renderer config. file for binaural output */ const int16_t Opt_non_diegetic_pan, /* i : diegetic or not */ +#endif const float non_diegetic_pan_gain, /* i : non diegetic panning gain */ +#ifdef FIX_745_FIX_DATA_TYPE_CONVERSION + const bool dpidEnabled, /* i : enable directivity pattern option */ +#else const int16_t Opt_dpid_on, /* i : enable directivity pattern option */ +#endif const uint16_t acousticEnvironmentId, /* i : Acoustic environment ID */ +#ifdef FIX_745_FIX_DATA_TYPE_CONVERSION + const bool delayCompensationEnabled /* i : enable delay compensation */ +#else const int16_t delayCompensationEnabled /* i : enable delay compensation */ +#endif ); void IVAS_DEC_Close( -- GitLab