Loading apps/renderer.c +47 −3 Original line number Diff line number Diff line Loading @@ -40,10 +40,10 @@ #include "hrtf_file_reader.h" #include "ism_file_reader.h" #include "lib_rend.h" #include "render_config_reader.h" #include "ls_custom_file_reader.h" #include "masa_file_reader.h" #include "prot.h" #include "render_config_reader.h" #ifdef WMOPS #include "PROM_Size_lib_rend.h" #include "wmops.h" Loading Loading @@ -460,8 +460,11 @@ int32_t main( int32_t argc, char **argv ) if ( args.renderConfigFile[0] != '\0' ) { RenderConfigReader_open( args.renderConfigFile, &renderConfigReader ); } if ( ( error = RenderConfigReader_open( args.renderConfigFile, &renderConfigReader ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nError: Can't open Renderer configuration file %s \n\n", args.renderConfigFile ); exit( -1 ); } } if ( args.sceneDescriptionInput ) { Loading Loading @@ -585,6 +588,47 @@ int32_t main( int32_t argc, char **argv ) hMasaMetadata = MasaFileReader_getMetadataHandle( masaReader ); } if ( args.renderConfigFile[0] != '\0' ) { IVAS_RENDER_CONFIG_DATA renderConfig; /* sanity check */ /* if ( args.outConfig.audioConfig != IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM ) { fprintf( stderr, "\nExternal Renderer Config is supported only when BINAURAL_ROOM is used as output. Exiting. \n" ); exit( -1 ); // goto cleanup; } if ( ( error = ivas_render_config_open( &hIvasRend->hRendererConfig ) ) != IVAS_ERR_OK ) { ivas_render_config_open(&renderConfig); return error; } if ( ivas_render_config_init_from_rom( &st->hRendererConfig, st->rendererConfigEnabled ) != IVAS_ERR_OK ) { return IVAS_ERR_INTERNAL_FATAL; } */ if ( ( error = IVAS_REND_GetRenderConfig( hIvasRend, &renderConfig ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nIVAS_DEC_GetRenderConfig failed\n" ); exit( -1 ); // goto cleanup; } if ( RenderConfigReader_read( renderConfigReader, &renderConfig ) != IVAS_ERR_OK ) { fprintf( stderr, "Failed to read renderer configuration from file %s\n", args.renderConfigFile ); exit( -1 ); // goto cleanup; } if ( ( error = IVAS_REND_FeedRenderConfig( hIvasRend, renderConfig ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nIVAS_DEC_FeedRenderConfig failed\n" ); exit( -1 ); // goto cleanup; } } int32_t numOutChannels; if ( ( error = IVAS_REND_NumOutChannels( hIvasRend, &numOutChannels ) ) != IVAS_ERR_OK ) { Loading lib_rend/lib_rend.c +82 −0 Original line number Diff line number Diff line Loading @@ -152,6 +152,7 @@ struct IVAS_REND EFAP_WRAPPER efapOutWrapper; IVAS_LSSETUP_CUSTOM_STRUCT customLsOut; IVAS_REND_HeadRotData headRotData; RENDER_CONFIG_DATA *hRendererConfig; /* Renderer config pointer */ }; static int32_t limitRendererOutput( Loading Loading @@ -2627,6 +2628,87 @@ ivas_error IVAS_REND_FeedInputObjectMetadata( return IVAS_ERR_OK; } int16_t IVAS_REND_GetRenderConfig( IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS decoder handle */ const IVAS_RENDER_CONFIG_HANDLE hRCout /* o : Render configuration handle */ ) { RENDER_CONFIG_HANDLE hRCin; if ( hIvasRend == NULL || hIvasRend->hRendererConfig == NULL || hRCout == NULL ) { return IVAS_ERR_UNEXPECTED_NULL_POINTER; } hRCin = hIvasRend->hRendererConfig; #ifdef DEBUGGING switch ( hRCin->renderer_type_override ) { case RENDER_TYPE_OVERRIDE_CREND: hRCout->renderer_type_override = IVAS_RENDER_TYPE_OVERRIDE_CREND; break; case RENDER_TYPE_OVERRIDE_FASTCONV: hRCout->renderer_type_override = IVAS_RENDER_TYPE_OVERRIDE_FASTCONV; break; default: hRCout->renderer_type_override = IVAS_RENDER_TYPE_OVERRIDE_NONE; break; } #endif hRCout->room_acoustics.override = hRCin->roomAcoustics.override; hRCout->room_acoustics.use_brir = hRCin->roomAcoustics.use_brir; hRCout->room_acoustics.late_reverb_on = hRCin->roomAcoustics.late_reverb_on; hRCout->room_acoustics.nBands = hRCin->roomAcoustics.nBands; hRCout->room_acoustics.acousticPreDelay = hRCin->roomAcoustics.acousticPreDelay; hRCout->room_acoustics.inputPreDelay = hRCin->roomAcoustics.inputPreDelay; mvr2r( hRCin->roomAcoustics.pFc_input, hRCout->room_acoustics.pFc_input, CLDFB_NO_CHANNELS_MAX ); mvr2r( hRCin->roomAcoustics.pAcoustic_rt60, hRCout->room_acoustics.pAcoustic_rt60, CLDFB_NO_CHANNELS_MAX ); mvr2r( hRCin->roomAcoustics.pAcoustic_dsr, hRCout->room_acoustics.pAcoustic_dsr, CLDFB_NO_CHANNELS_MAX ); return IVAS_ERR_OK; } int16_t IVAS_REND_FeedRenderConfig( IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS decoder handle */ const IVAS_RENDER_CONFIG_DATA renderConfig /* i : Render configuration struct */ ) { RENDER_CONFIG_HANDLE hRenderConfig; if ( hIvasRend == NULL || hIvasRend->hRendererConfig == NULL ) { return IVAS_ERR_UNEXPECTED_NULL_POINTER; } hRenderConfig = hIvasRend->hRendererConfig; #ifdef DEBUGGING hRenderConfig->renderer_type_override = RENDER_TYPE_OVERRIDE_NONE; if ( renderConfig.renderer_type_override == IVAS_RENDER_TYPE_OVERRIDE_FASTCONV ) { hRenderConfig->renderer_type_override = RENDER_TYPE_OVERRIDE_FASTCONV; } if ( renderConfig.renderer_type_override == IVAS_RENDER_TYPE_OVERRIDE_CREND ) { hRenderConfig->renderer_type_override = RENDER_TYPE_OVERRIDE_CREND; } #endif hRenderConfig->roomAcoustics.override = renderConfig.room_acoustics.override; hRenderConfig->roomAcoustics.use_brir = renderConfig.room_acoustics.use_brir; hRenderConfig->roomAcoustics.late_reverb_on = renderConfig.room_acoustics.late_reverb_on; hRenderConfig->roomAcoustics.nBands = renderConfig.room_acoustics.nBands; hRenderConfig->roomAcoustics.acousticPreDelay = renderConfig.room_acoustics.acousticPreDelay; hRenderConfig->roomAcoustics.inputPreDelay = renderConfig.room_acoustics.inputPreDelay; mvr2r( renderConfig.room_acoustics.pFc_input, hRenderConfig->roomAcoustics.pFc_input, CLDFB_NO_CHANNELS_MAX ); mvr2r( renderConfig.room_acoustics.pAcoustic_rt60, hRenderConfig->roomAcoustics.pAcoustic_rt60, CLDFB_NO_CHANNELS_MAX ); mvr2r( renderConfig.room_acoustics.pAcoustic_dsr, hRenderConfig->roomAcoustics.pAcoustic_dsr, CLDFB_NO_CHANNELS_MAX ); return IVAS_ERR_OK; } ivas_error IVAS_REND_SetHeadRotation( IVAS_REND_HANDLE hIvasRend, const IVAS_QUATERNION headRot[RENDERER_HEAD_POSITIONS_PER_FRAME] ) Loading lib_rend/lib_rend.h +10 −0 Original line number Diff line number Diff line Loading @@ -234,6 +234,16 @@ ivas_error IVAS_REND_FeedInputMasaMetadata( void* TODO ); int16_t IVAS_REND_GetRenderConfig( IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS decoder handle */ const IVAS_RENDER_CONFIG_HANDLE hRCout /* o : Render configuration handle */ ); int16_t IVAS_REND_FeedRenderConfig( IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS decoder handle */ const IVAS_RENDER_CONFIG_DATA renderConfig /* i : Render configuration struct */ ); ivas_error IVAS_REND_SetHeadRotation( IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ const IVAS_QUATERNION headRot[RENDERER_HEAD_POSITIONS_PER_FRAME] /* i : head positions for next rendering call */ Loading Loading
apps/renderer.c +47 −3 Original line number Diff line number Diff line Loading @@ -40,10 +40,10 @@ #include "hrtf_file_reader.h" #include "ism_file_reader.h" #include "lib_rend.h" #include "render_config_reader.h" #include "ls_custom_file_reader.h" #include "masa_file_reader.h" #include "prot.h" #include "render_config_reader.h" #ifdef WMOPS #include "PROM_Size_lib_rend.h" #include "wmops.h" Loading Loading @@ -460,8 +460,11 @@ int32_t main( int32_t argc, char **argv ) if ( args.renderConfigFile[0] != '\0' ) { RenderConfigReader_open( args.renderConfigFile, &renderConfigReader ); } if ( ( error = RenderConfigReader_open( args.renderConfigFile, &renderConfigReader ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nError: Can't open Renderer configuration file %s \n\n", args.renderConfigFile ); exit( -1 ); } } if ( args.sceneDescriptionInput ) { Loading Loading @@ -585,6 +588,47 @@ int32_t main( int32_t argc, char **argv ) hMasaMetadata = MasaFileReader_getMetadataHandle( masaReader ); } if ( args.renderConfigFile[0] != '\0' ) { IVAS_RENDER_CONFIG_DATA renderConfig; /* sanity check */ /* if ( args.outConfig.audioConfig != IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM ) { fprintf( stderr, "\nExternal Renderer Config is supported only when BINAURAL_ROOM is used as output. Exiting. \n" ); exit( -1 ); // goto cleanup; } if ( ( error = ivas_render_config_open( &hIvasRend->hRendererConfig ) ) != IVAS_ERR_OK ) { ivas_render_config_open(&renderConfig); return error; } if ( ivas_render_config_init_from_rom( &st->hRendererConfig, st->rendererConfigEnabled ) != IVAS_ERR_OK ) { return IVAS_ERR_INTERNAL_FATAL; } */ if ( ( error = IVAS_REND_GetRenderConfig( hIvasRend, &renderConfig ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nIVAS_DEC_GetRenderConfig failed\n" ); exit( -1 ); // goto cleanup; } if ( RenderConfigReader_read( renderConfigReader, &renderConfig ) != IVAS_ERR_OK ) { fprintf( stderr, "Failed to read renderer configuration from file %s\n", args.renderConfigFile ); exit( -1 ); // goto cleanup; } if ( ( error = IVAS_REND_FeedRenderConfig( hIvasRend, renderConfig ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nIVAS_DEC_FeedRenderConfig failed\n" ); exit( -1 ); // goto cleanup; } } int32_t numOutChannels; if ( ( error = IVAS_REND_NumOutChannels( hIvasRend, &numOutChannels ) ) != IVAS_ERR_OK ) { Loading
lib_rend/lib_rend.c +82 −0 Original line number Diff line number Diff line Loading @@ -152,6 +152,7 @@ struct IVAS_REND EFAP_WRAPPER efapOutWrapper; IVAS_LSSETUP_CUSTOM_STRUCT customLsOut; IVAS_REND_HeadRotData headRotData; RENDER_CONFIG_DATA *hRendererConfig; /* Renderer config pointer */ }; static int32_t limitRendererOutput( Loading Loading @@ -2627,6 +2628,87 @@ ivas_error IVAS_REND_FeedInputObjectMetadata( return IVAS_ERR_OK; } int16_t IVAS_REND_GetRenderConfig( IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS decoder handle */ const IVAS_RENDER_CONFIG_HANDLE hRCout /* o : Render configuration handle */ ) { RENDER_CONFIG_HANDLE hRCin; if ( hIvasRend == NULL || hIvasRend->hRendererConfig == NULL || hRCout == NULL ) { return IVAS_ERR_UNEXPECTED_NULL_POINTER; } hRCin = hIvasRend->hRendererConfig; #ifdef DEBUGGING switch ( hRCin->renderer_type_override ) { case RENDER_TYPE_OVERRIDE_CREND: hRCout->renderer_type_override = IVAS_RENDER_TYPE_OVERRIDE_CREND; break; case RENDER_TYPE_OVERRIDE_FASTCONV: hRCout->renderer_type_override = IVAS_RENDER_TYPE_OVERRIDE_FASTCONV; break; default: hRCout->renderer_type_override = IVAS_RENDER_TYPE_OVERRIDE_NONE; break; } #endif hRCout->room_acoustics.override = hRCin->roomAcoustics.override; hRCout->room_acoustics.use_brir = hRCin->roomAcoustics.use_brir; hRCout->room_acoustics.late_reverb_on = hRCin->roomAcoustics.late_reverb_on; hRCout->room_acoustics.nBands = hRCin->roomAcoustics.nBands; hRCout->room_acoustics.acousticPreDelay = hRCin->roomAcoustics.acousticPreDelay; hRCout->room_acoustics.inputPreDelay = hRCin->roomAcoustics.inputPreDelay; mvr2r( hRCin->roomAcoustics.pFc_input, hRCout->room_acoustics.pFc_input, CLDFB_NO_CHANNELS_MAX ); mvr2r( hRCin->roomAcoustics.pAcoustic_rt60, hRCout->room_acoustics.pAcoustic_rt60, CLDFB_NO_CHANNELS_MAX ); mvr2r( hRCin->roomAcoustics.pAcoustic_dsr, hRCout->room_acoustics.pAcoustic_dsr, CLDFB_NO_CHANNELS_MAX ); return IVAS_ERR_OK; } int16_t IVAS_REND_FeedRenderConfig( IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS decoder handle */ const IVAS_RENDER_CONFIG_DATA renderConfig /* i : Render configuration struct */ ) { RENDER_CONFIG_HANDLE hRenderConfig; if ( hIvasRend == NULL || hIvasRend->hRendererConfig == NULL ) { return IVAS_ERR_UNEXPECTED_NULL_POINTER; } hRenderConfig = hIvasRend->hRendererConfig; #ifdef DEBUGGING hRenderConfig->renderer_type_override = RENDER_TYPE_OVERRIDE_NONE; if ( renderConfig.renderer_type_override == IVAS_RENDER_TYPE_OVERRIDE_FASTCONV ) { hRenderConfig->renderer_type_override = RENDER_TYPE_OVERRIDE_FASTCONV; } if ( renderConfig.renderer_type_override == IVAS_RENDER_TYPE_OVERRIDE_CREND ) { hRenderConfig->renderer_type_override = RENDER_TYPE_OVERRIDE_CREND; } #endif hRenderConfig->roomAcoustics.override = renderConfig.room_acoustics.override; hRenderConfig->roomAcoustics.use_brir = renderConfig.room_acoustics.use_brir; hRenderConfig->roomAcoustics.late_reverb_on = renderConfig.room_acoustics.late_reverb_on; hRenderConfig->roomAcoustics.nBands = renderConfig.room_acoustics.nBands; hRenderConfig->roomAcoustics.acousticPreDelay = renderConfig.room_acoustics.acousticPreDelay; hRenderConfig->roomAcoustics.inputPreDelay = renderConfig.room_acoustics.inputPreDelay; mvr2r( renderConfig.room_acoustics.pFc_input, hRenderConfig->roomAcoustics.pFc_input, CLDFB_NO_CHANNELS_MAX ); mvr2r( renderConfig.room_acoustics.pAcoustic_rt60, hRenderConfig->roomAcoustics.pAcoustic_rt60, CLDFB_NO_CHANNELS_MAX ); mvr2r( renderConfig.room_acoustics.pAcoustic_dsr, hRenderConfig->roomAcoustics.pAcoustic_dsr, CLDFB_NO_CHANNELS_MAX ); return IVAS_ERR_OK; } ivas_error IVAS_REND_SetHeadRotation( IVAS_REND_HANDLE hIvasRend, const IVAS_QUATERNION headRot[RENDERER_HEAD_POSITIONS_PER_FRAME] ) Loading
lib_rend/lib_rend.h +10 −0 Original line number Diff line number Diff line Loading @@ -234,6 +234,16 @@ ivas_error IVAS_REND_FeedInputMasaMetadata( void* TODO ); int16_t IVAS_REND_GetRenderConfig( IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS decoder handle */ const IVAS_RENDER_CONFIG_HANDLE hRCout /* o : Render configuration handle */ ); int16_t IVAS_REND_FeedRenderConfig( IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS decoder handle */ const IVAS_RENDER_CONFIG_DATA renderConfig /* i : Render configuration struct */ ); ivas_error IVAS_REND_SetHeadRotation( IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ const IVAS_QUATERNION headRot[RENDERER_HEAD_POSITIONS_PER_FRAME] /* i : head positions for next rendering call */ Loading