Loading lib_com/ivas_prot.h +9 −8 Original line number Diff line number Diff line Loading @@ -5561,6 +5561,7 @@ void ivas_osba_enc( const int16_t input_frame, /* i : Input frame size */ const int16_t nchan_ism, /* i : Number of objects for parameter analysis */ const ISM_MODE ism_mode, /* i : ISM mode */ const int16_t sba_analysis_order, /* i : SBA order evaluated in DirAC/SPAR encoder */ float data_separated_object[L_FRAME48k], /* o : Separated object audio signal */ int16_t *idx_separated_object /* o : Index of the separated object */ ); Loading lib_enc/ivas_enc.c +1 −1 Original line number Diff line number Diff line Loading @@ -282,7 +282,7 @@ ivas_error ivas_enc( if ( st_ivas->ism_mode == ISM_MODE_NONE ) /*rendering of objects in SBA signal*/ { /* Analyze objects and determine needed audio signals */ ivas_osba_enc( st_ivas->hOSba, st_ivas->hIsmMetaData, data_f, input_frame, hEncoderConfig->nchan_ism, st_ivas->ism_mode, data_separated_object, &idx_separated_object ); ivas_osba_enc( st_ivas->hOSba, st_ivas->hIsmMetaData, data_f, input_frame, hEncoderConfig->nchan_ism, st_ivas->ism_mode, st_ivas->sba_analysis_order, data_separated_object, &idx_separated_object ); } else /*not an option for now*/ { Loading lib_enc/ivas_init_enc.c +1 −2 Original line number Diff line number Diff line Loading @@ -220,8 +220,7 @@ int16_t getNumChanAnalysis( #ifdef SBA_AND_OBJECTS else if ( st_ivas->hEncoderConfig->ivas_format == SBA_ISM_FORMAT ) { // Todo OSBA merge: This might be wrong after addition of HO-DirAC. Decide if that is desired for combined format. n = st_ivas->hEncoderConfig->nchan_ism + FOA_CHANNELS; n = st_ivas->hEncoderConfig->nchan_ism + ( st_ivas->sba_analysis_order + 1 ) * ( st_ivas->sba_analysis_order + 1 ); } #endif return n; Loading lib_enc/ivas_osba_enc.c +18 −12 Original line number Diff line number Diff line Loading @@ -52,7 +52,7 @@ static void ivas_osba_energy_and_ratio_est( OSBA_ENC_HANDLE hOSba, float data_f[][L_FRAME48k], const int16_t input_frame, const int16_t nchan_inp ); static void ivas_osba_render_ism_to_sba( float data_in_f[][L_FRAME48k], float data_out_f[][L_FRAME48k], const int16_t input_frame, const int16_t nchan_sba, const int16_t nchan_ism, ISM_METADATA_HANDLE hIsmMeta[], float prev_gains[][FOA_CHANNELS], const float interpolator[L_FRAME48k] ); static void ivas_osba_render_ism_to_sba( float data_in_f[][L_FRAME48k], float data_out_f[][L_FRAME48k], const int16_t input_frame, const int16_t nchan_sba, const int16_t nchan_ism, ISM_METADATA_HANDLE hIsmMeta[], float prev_gains[][MAX_INPUT_CHANNELS], const float interpolator[L_FRAME48k] ); /*-------------------------------------------------------------------* * ivas_merge_sba_transports() Loading @@ -65,11 +65,13 @@ static void ivas_merge_sba_transports( float data_in_f2[][L_FRAME48k], float data_out_f[][L_FRAME48k], const int16_t input_frame, const int16_t num_transport_channels ) const int16_t sba_analysis_order ) { int16_t i, j; int16_t i, j, nchan_sba; for ( i = 0; i < num_transport_channels; i++ ) nchan_sba = (sba_analysis_order+1)*(sba_analysis_order+1); for ( i = 0; i < nchan_sba; i++ ) { for ( j = 0; j < input_frame; j++ ) { Loading Loading @@ -105,7 +107,7 @@ ivas_error ivas_osba_enc_open( for ( i = 0; i < MAX_NUM_OBJECTS; i++ ) { set_f( hOSba->prev_object_dm_gains[i], (float) sqrt( 0.5 ), FOA_CHANNELS ); set_f( hOSba->prev_object_dm_gains[i], (float) sqrt( 0.5 ), MAX_INPUT_CHANNELS ); } set_zero( hOSba->broadband_energy_sm, MAX_NUM_OBJECTS + FOA_CHANNELS ); set_zero( hOSba->broadband_energy_prev, MAX_NUM_OBJECTS + FOA_CHANNELS ); Loading Loading @@ -192,19 +194,20 @@ void ivas_osba_enc( const int16_t input_frame, /* i : Input frame size */ const int16_t nchan_ism, /* i : Number of objects for parameter analysis */ const ISM_MODE ism_mode, /* i : ISM mode */ const int16_t sba_analysis_order, /* i : SBA order evaluated in DirAC/SPAR encoder */ float data_separated_object[L_FRAME48k], /* o : Separated object audio signal */ int16_t *idx_separated_object /* o : Index of the separated object */ ) { float data_out_f[FOA_CHANNELS][L_FRAME48k]; float data_out_f[MAX_INPUT_CHANNELS][L_FRAME48k]; if ( ism_mode == ISM_MODE_NONE ) { /* Convert ISM to SBA */ ivas_osba_render_ism_to_sba( data_in_f, data_out_f, input_frame, FOA_CHANNELS, nchan_ism, hIsmMeta, hOSba->prev_object_dm_gains, hOSba->interpolator ); ivas_osba_render_ism_to_sba( data_in_f, data_out_f, input_frame, sba_analysis_order, nchan_ism, hIsmMeta, hOSba->prev_object_dm_gains, hOSba->interpolator ); /* Merge SBA signals */ ivas_merge_sba_transports( data_out_f, &( data_in_f[nchan_ism] ), data_in_f, input_frame, FOA_CHANNELS ); ivas_merge_sba_transports( data_out_f, &( data_in_f[nchan_ism] ), data_in_f, input_frame, sba_analysis_order ); } /* Set the number of objects */ hOSba->nchan_ism = nchan_ism; Loading Loading @@ -317,18 +320,21 @@ static void ivas_osba_render_ism_to_sba( float data_in_f[][L_FRAME48k], float data_out_f[][L_FRAME48k], const int16_t input_frame, const int16_t nchan_sba, const int16_t sba_analysis_order, const int16_t nchan_ism, ISM_METADATA_HANDLE hIsmMeta[], float prev_gains[][FOA_CHANNELS], float prev_gains[][MAX_INPUT_CHANNELS], const float interpolator[L_FRAME48k] ) { int16_t i, j, k; int16_t azimuth, elevation; float gains[FOA_CHANNELS]; float gains[MAX_INPUT_CHANNELS]; float g1, g2; float output_gain; int16_t nchan_sba; nchan_sba = (sba_analysis_order+1)*(sba_analysis_order+1); for ( i = 0; i < nchan_sba; i++ ) { Loading @@ -340,7 +346,7 @@ static void ivas_osba_render_ism_to_sba( azimuth = (int16_t) floorf( hIsmMeta[i]->azimuth + 0.5f ); elevation = (int16_t) floorf( hIsmMeta[i]->elevation + 0.5f ); ivas_dirac_dec_get_response( azimuth, elevation, gains, 1 ); ivas_dirac_dec_get_response( azimuth, elevation, gains, sba_analysis_order ); /* Render using the sh gains */ for ( j = 0; j < nchan_sba; j++ ) Loading lib_enc/ivas_stat_enc.h +1 −1 Original line number Diff line number Diff line Loading @@ -887,7 +887,7 @@ typedef struct ivas_osba_enc_data_structure float interpolator[L_FRAME48k]; float prev_object_dm_gains[MAX_NUM_OBJECTS][FOA_CHANNELS]; float prev_object_dm_gains[MAX_NUM_OBJECTS][MAX_INPUT_CHANNELS]; float broadband_energy_sm[MAX_NUM_OBJECTS + FOA_CHANNELS]; float broadband_energy_prev[MAX_NUM_OBJECTS + FOA_CHANNELS]; int16_t prev_selected_object; Loading Loading
lib_com/ivas_prot.h +9 −8 Original line number Diff line number Diff line Loading @@ -5561,6 +5561,7 @@ void ivas_osba_enc( const int16_t input_frame, /* i : Input frame size */ const int16_t nchan_ism, /* i : Number of objects for parameter analysis */ const ISM_MODE ism_mode, /* i : ISM mode */ const int16_t sba_analysis_order, /* i : SBA order evaluated in DirAC/SPAR encoder */ float data_separated_object[L_FRAME48k], /* o : Separated object audio signal */ int16_t *idx_separated_object /* o : Index of the separated object */ ); Loading
lib_enc/ivas_enc.c +1 −1 Original line number Diff line number Diff line Loading @@ -282,7 +282,7 @@ ivas_error ivas_enc( if ( st_ivas->ism_mode == ISM_MODE_NONE ) /*rendering of objects in SBA signal*/ { /* Analyze objects and determine needed audio signals */ ivas_osba_enc( st_ivas->hOSba, st_ivas->hIsmMetaData, data_f, input_frame, hEncoderConfig->nchan_ism, st_ivas->ism_mode, data_separated_object, &idx_separated_object ); ivas_osba_enc( st_ivas->hOSba, st_ivas->hIsmMetaData, data_f, input_frame, hEncoderConfig->nchan_ism, st_ivas->ism_mode, st_ivas->sba_analysis_order, data_separated_object, &idx_separated_object ); } else /*not an option for now*/ { Loading
lib_enc/ivas_init_enc.c +1 −2 Original line number Diff line number Diff line Loading @@ -220,8 +220,7 @@ int16_t getNumChanAnalysis( #ifdef SBA_AND_OBJECTS else if ( st_ivas->hEncoderConfig->ivas_format == SBA_ISM_FORMAT ) { // Todo OSBA merge: This might be wrong after addition of HO-DirAC. Decide if that is desired for combined format. n = st_ivas->hEncoderConfig->nchan_ism + FOA_CHANNELS; n = st_ivas->hEncoderConfig->nchan_ism + ( st_ivas->sba_analysis_order + 1 ) * ( st_ivas->sba_analysis_order + 1 ); } #endif return n; Loading
lib_enc/ivas_osba_enc.c +18 −12 Original line number Diff line number Diff line Loading @@ -52,7 +52,7 @@ static void ivas_osba_energy_and_ratio_est( OSBA_ENC_HANDLE hOSba, float data_f[][L_FRAME48k], const int16_t input_frame, const int16_t nchan_inp ); static void ivas_osba_render_ism_to_sba( float data_in_f[][L_FRAME48k], float data_out_f[][L_FRAME48k], const int16_t input_frame, const int16_t nchan_sba, const int16_t nchan_ism, ISM_METADATA_HANDLE hIsmMeta[], float prev_gains[][FOA_CHANNELS], const float interpolator[L_FRAME48k] ); static void ivas_osba_render_ism_to_sba( float data_in_f[][L_FRAME48k], float data_out_f[][L_FRAME48k], const int16_t input_frame, const int16_t nchan_sba, const int16_t nchan_ism, ISM_METADATA_HANDLE hIsmMeta[], float prev_gains[][MAX_INPUT_CHANNELS], const float interpolator[L_FRAME48k] ); /*-------------------------------------------------------------------* * ivas_merge_sba_transports() Loading @@ -65,11 +65,13 @@ static void ivas_merge_sba_transports( float data_in_f2[][L_FRAME48k], float data_out_f[][L_FRAME48k], const int16_t input_frame, const int16_t num_transport_channels ) const int16_t sba_analysis_order ) { int16_t i, j; int16_t i, j, nchan_sba; for ( i = 0; i < num_transport_channels; i++ ) nchan_sba = (sba_analysis_order+1)*(sba_analysis_order+1); for ( i = 0; i < nchan_sba; i++ ) { for ( j = 0; j < input_frame; j++ ) { Loading Loading @@ -105,7 +107,7 @@ ivas_error ivas_osba_enc_open( for ( i = 0; i < MAX_NUM_OBJECTS; i++ ) { set_f( hOSba->prev_object_dm_gains[i], (float) sqrt( 0.5 ), FOA_CHANNELS ); set_f( hOSba->prev_object_dm_gains[i], (float) sqrt( 0.5 ), MAX_INPUT_CHANNELS ); } set_zero( hOSba->broadband_energy_sm, MAX_NUM_OBJECTS + FOA_CHANNELS ); set_zero( hOSba->broadband_energy_prev, MAX_NUM_OBJECTS + FOA_CHANNELS ); Loading Loading @@ -192,19 +194,20 @@ void ivas_osba_enc( const int16_t input_frame, /* i : Input frame size */ const int16_t nchan_ism, /* i : Number of objects for parameter analysis */ const ISM_MODE ism_mode, /* i : ISM mode */ const int16_t sba_analysis_order, /* i : SBA order evaluated in DirAC/SPAR encoder */ float data_separated_object[L_FRAME48k], /* o : Separated object audio signal */ int16_t *idx_separated_object /* o : Index of the separated object */ ) { float data_out_f[FOA_CHANNELS][L_FRAME48k]; float data_out_f[MAX_INPUT_CHANNELS][L_FRAME48k]; if ( ism_mode == ISM_MODE_NONE ) { /* Convert ISM to SBA */ ivas_osba_render_ism_to_sba( data_in_f, data_out_f, input_frame, FOA_CHANNELS, nchan_ism, hIsmMeta, hOSba->prev_object_dm_gains, hOSba->interpolator ); ivas_osba_render_ism_to_sba( data_in_f, data_out_f, input_frame, sba_analysis_order, nchan_ism, hIsmMeta, hOSba->prev_object_dm_gains, hOSba->interpolator ); /* Merge SBA signals */ ivas_merge_sba_transports( data_out_f, &( data_in_f[nchan_ism] ), data_in_f, input_frame, FOA_CHANNELS ); ivas_merge_sba_transports( data_out_f, &( data_in_f[nchan_ism] ), data_in_f, input_frame, sba_analysis_order ); } /* Set the number of objects */ hOSba->nchan_ism = nchan_ism; Loading Loading @@ -317,18 +320,21 @@ static void ivas_osba_render_ism_to_sba( float data_in_f[][L_FRAME48k], float data_out_f[][L_FRAME48k], const int16_t input_frame, const int16_t nchan_sba, const int16_t sba_analysis_order, const int16_t nchan_ism, ISM_METADATA_HANDLE hIsmMeta[], float prev_gains[][FOA_CHANNELS], float prev_gains[][MAX_INPUT_CHANNELS], const float interpolator[L_FRAME48k] ) { int16_t i, j, k; int16_t azimuth, elevation; float gains[FOA_CHANNELS]; float gains[MAX_INPUT_CHANNELS]; float g1, g2; float output_gain; int16_t nchan_sba; nchan_sba = (sba_analysis_order+1)*(sba_analysis_order+1); for ( i = 0; i < nchan_sba; i++ ) { Loading @@ -340,7 +346,7 @@ static void ivas_osba_render_ism_to_sba( azimuth = (int16_t) floorf( hIsmMeta[i]->azimuth + 0.5f ); elevation = (int16_t) floorf( hIsmMeta[i]->elevation + 0.5f ); ivas_dirac_dec_get_response( azimuth, elevation, gains, 1 ); ivas_dirac_dec_get_response( azimuth, elevation, gains, sba_analysis_order ); /* Render using the sh gains */ for ( j = 0; j < nchan_sba; j++ ) Loading
lib_enc/ivas_stat_enc.h +1 −1 Original line number Diff line number Diff line Loading @@ -887,7 +887,7 @@ typedef struct ivas_osba_enc_data_structure float interpolator[L_FRAME48k]; float prev_object_dm_gains[MAX_NUM_OBJECTS][FOA_CHANNELS]; float prev_object_dm_gains[MAX_NUM_OBJECTS][MAX_INPUT_CHANNELS]; float broadband_energy_sm[MAX_NUM_OBJECTS + FOA_CHANNELS]; float broadband_energy_prev[MAX_NUM_OBJECTS + FOA_CHANNELS]; int16_t prev_selected_object; Loading