diff --git a/lib_com/bitstream.c b/lib_com/bitstream.c index 9b54224860c6d9bb0b569fe76ba7a14b26868ec1..d7c063bf1a9a2daa1d27a1be9e79d8be020cd002 100644 --- a/lib_com/bitstream.c +++ b/lib_com/bitstream.c @@ -1972,37 +1972,13 @@ ivas_error preview_indices( else if ( st_ivas->ivas_format == MASA_ISM_FORMAT ) { /* read number of objects from the bitstream */ -#ifdef OMASA_UPDATES st_ivas->nchan_transport = 2; /* always 2 MASA transport channels */ st_ivas->nchan_ism = 0; -#else - st_ivas->nchan_transport = 0; -#endif if ( total_brate != SID_2k40 && total_brate != FRAME_NO_DATA ) { -#ifdef OMASA_UPDATES st_ivas->nchan_ism = 2 * bit_stream[total_brate / FRAMES_PER_SEC - 1] + bit_stream[total_brate / FRAMES_PER_SEC - 2] + 1; -#endif st_ivas->ism_mode = ivas_omasa_ism_mode_select( total_brate, st_ivas->nchan_ism ); - -#ifndef OMASA_UPDATES - if ( st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ ) - { - st_ivas->nchan_transport = 0; - } - else if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC ) - { - st_ivas->nchan_transport = 2 * st_ivas->bit_stream[total_brate / FRAMES_PER_SEC - 2] + st_ivas->bit_stream[total_brate / FRAMES_PER_SEC - 3] + 1; - } - - k = (int16_t) ( ( total_brate / FRAMES_PER_SEC ) - 1 ); - - { - st_ivas->nchan_transport++; - k--; - } -#endif } } #endif diff --git a/lib_com/delay_comp.c b/lib_com/delay_comp.c index 8e811e6938d30856f82b72dda9687451928ef639..2566ad5fad4b0ba5f43f70aee323a8af57141992 100644 --- a/lib_com/delay_comp.c +++ b/lib_com/delay_comp.c @@ -69,7 +69,7 @@ int32_t get_delay( { delay = IVAS_ENC_DELAY_NS; -#ifdef FIX_OMASA_DELAY_COMP +#ifdef MASA_AND_OBJECTS if ( ivas_format == MASA_FORMAT || ivas_format == MASA_ISM_FORMAT ) #else if ( ivas_format == MASA_FORMAT ) @@ -109,7 +109,7 @@ int32_t get_delay( } -#ifdef FIX_OMASA_DELAY_COMP +#ifdef MASA_AND_OBJECTS if ( ivas_format == MASA_FORMAT || ivas_format == MASA_ISM_FORMAT ) #else if ( ivas_format == MASA_FORMAT ) diff --git a/lib_com/ivas_cnst.h b/lib_com/ivas_cnst.h index 07d6c66f75f38d26e6e9b6bfa756681b8a27d122..2f8d004a9eac6db7e086f09a084fcbf2bbf81ede 100644 --- a/lib_com/ivas_cnst.h +++ b/lib_com/ivas_cnst.h @@ -373,15 +373,11 @@ typedef enum ISM_MODE_PARAM /* parametric ISM */ #ifdef MASA_AND_OBJECTS , - ISM_MASA_MODE_PARAM, /* parametric ISM mode for combined MASA ISM format */ -#ifdef OMASA_UPDATES ISM_MASA_MODE_MASA_ONE_OBJ, /* MASA ISM mode when one object is encoded separately and remainder using MASA parameters */ ISM_MASA_MODE_PARAM_ONE_OBJ, /* MASA ISM mode when one object is encoded separately and remainder using parametric object model */ -#else - ISM_MASA_MODE_ONE_OBJ, /* MASA ISM mode when one object is encoded separarately */ -#endif ISM_MASA_MODE_DISC /* MASA ISM mode when all objects are encoded separarately */ #endif + } ISM_MODE; @@ -639,11 +635,7 @@ enum IND_STEREO_DFT_SIDEGAIN_FLAG, IND_STEREO_DFT_SIDEGAINS, - #ifdef OMASA_UPDATES - IND_STEREO_DFT_ITD_MODE = IND_STEREO_DFT_SIDEGAINS + 4 * STEREO_DFT_BAND_MAX + 120, - #else - IND_STEREO_DFT_ITD_MODE = IND_STEREO_DFT_SIDEGAINS + 4 * STEREO_DFT_BAND_MAX + 72, - #endif + IND_STEREO_DFT_ITD_MODE = IND_STEREO_DFT_SIDEGAINS + 4 * STEREO_DFT_BAND_MAX + 120, IND_STEREO_DFT_ITD_HUFF, IND_STEREO_DFT_ITD_NEG, diff --git a/lib_com/ivas_ism_com.c b/lib_com/ivas_ism_com.c index adde308208ec72cb02e9e40b20b28ca48ce4046d..3db790e924ee104c6c4ac3889fd68658099b28f9 100644 --- a/lib_com/ivas_ism_com.c +++ b/lib_com/ivas_ism_com.c @@ -606,7 +606,7 @@ ISM_MODE ivas_ism_mode_select( void ivas_ism_metadata_close( ISM_METADATA_HANDLE hIsmMetaData[] /* i/o : object metadata handles */ -#ifdef OMASA_BRATE_SW +#ifdef MASA_AND_OBJECTS , const int16_t first_idx /* i : index of first handle to deallocate */ #endif @@ -619,7 +619,7 @@ void ivas_ism_metadata_close( return; } -#ifdef OMASA_BRATE_SW +#ifdef MASA_AND_OBJECTS for ( n = first_idx; n < MAX_NUM_OBJECTS; n++ ) #else for ( n = 0; n < MAX_NUM_OBJECTS; n++ ) diff --git a/lib_com/ivas_masa_com.c b/lib_com/ivas_masa_com.c index c4ab8be9af3bcff079e5f56970ab2a5f6ed2c3a9..dd088fca52ddf32c3d7e1a92bb328d8cc5e1af53 100644 --- a/lib_com/ivas_masa_com.c +++ b/lib_com/ivas_masa_com.c @@ -96,11 +96,7 @@ void ivas_masa_set_elements( if ( ivas_total_brate > MIN_BRATE_MDCT_STEREO ) { *element_mode = IVAS_CPE_MDCT; -#ifdef OMASA_UPDATES if ( ( ism_mode == ISM_MASA_MODE_DISC || ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) && ( ivas_total_brate - ism_total_brate < MIN_BRATE_MDCT_STEREO ) ) -#else - if ( ( ism_mode == ISM_MASA_MODE_DISC || ism_mode == ISM_MASA_MODE_ONE_OBJ ) && ( ivas_total_brate - ism_total_brate < MIN_BRATE_MDCT_STEREO ) ) -#endif { *element_mode = IVAS_CPE_DFT; } @@ -119,11 +115,7 @@ void ivas_masa_set_elements( } hQMetaData->bits_frame_nominal = (int16_t) ( ivas_total_brate / FRAMES_PER_SEC ); #ifdef MASA_AND_OBJECTS -#ifdef OMASA_UPDATES if ( ivas_format == MASA_ISM_FORMAT && ( ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || ism_mode == ISM_MASA_MODE_DISC ) ) -#else - if ( ivas_format == MASA_ISM_FORMAT && ( ism_mode == ISM_MASA_MODE_ONE_OBJ || ism_mode == ISM_MASA_MODE_DISC ) ) -#endif { hQMetaData->bits_frame_nominal -= (int16_t) ( ism_total_brate / FRAMES_PER_SEC ); } @@ -634,11 +626,7 @@ int32_t calculate_cpe_brate_MASA_ISM( k++; } -#ifdef OMASA_UPDATES if ( ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) -#else - if ( ism_mode == ISM_MASA_MODE_ONE_OBJ ) -#endif { cpe_brate = ivas_total_brate - sep_object_brate[k - 2][0]; /* take data from the first column */ } diff --git a/lib_com/ivas_omasa_com.c b/lib_com/ivas_omasa_com.c index 57618c9540f11b765ad29a620b322467d09bd650..8e385537c3738d0099c6f0ff060192ff4ba7eb0d 100644 --- a/lib_com/ivas_omasa_com.c +++ b/lib_com/ivas_omasa_com.c @@ -58,15 +58,9 @@ #define GAMMA_ISM_MEDIUM_IMP3 1.15f #define GAMMA_ISM_HIGH_IMP3 1.3f -#ifdef OMASA_UPDATES #define GAMMA_ISM_LOW_IMP4 0.8f #define GAMMA_ISM_MEDIUM_IMP4 1.0f #define GAMMA_ISM_HIGH_IMP4 1.2f -#else -#define GAMMA_ISM_LOW_IMP4 0.6f -#define GAMMA_ISM_MEDIUM_IMP4 0.8f -#define GAMMA_ISM_HIGH_IMP4 1.0f -#endif /*--------------------------------------------------------------- @@ -103,11 +97,7 @@ ISM_MODE ivas_omasa_ism_mode_select( } else if ( ivas_total_brate >= IVAS_32k ) { -#ifdef OMASA_UPDATES ism_mode = ISM_MASA_MODE_PARAM_ONE_OBJ; -#else - ism_mode = ISM_MASA_MODE_ONE_OBJ; -#endif } else { @@ -121,23 +111,12 @@ ISM_MODE ivas_omasa_ism_mode_select( } else if ( ivas_total_brate >= IVAS_64k ) { -#ifdef OMASA_UPDATES ism_mode = ISM_MASA_MODE_PARAM_ONE_OBJ; -#else - ism_mode = ISM_MASA_MODE_ONE_OBJ; -#endif } -#ifdef OMASA_UPDATES else if ( ivas_total_brate >= IVAS_32k ) { ism_mode = ISM_MASA_MODE_MASA_ONE_OBJ; } -#else - else if ( ivas_total_brate >= IVAS_48k ) - { - ism_mode = ISM_MASA_MODE_PARAM; - } -#endif else { ism_mode = ISM_MODE_NONE; @@ -148,7 +127,6 @@ ISM_MODE ivas_omasa_ism_mode_select( { ism_mode = ISM_MASA_MODE_DISC; } -#ifdef OMASA_UPDATES else if ( ivas_total_brate >= IVAS_64k ) { ism_mode = ISM_MASA_MODE_PARAM_ONE_OBJ; @@ -157,16 +135,6 @@ ISM_MODE ivas_omasa_ism_mode_select( { ism_mode = ISM_MASA_MODE_MASA_ONE_OBJ; } -#else - else if ( ivas_total_brate >= IVAS_64k ) - { - ism_mode = ISM_MASA_MODE_ONE_OBJ; - } - else if ( ivas_total_brate >= IVAS_48k ) - { - ism_mode = ISM_MASA_MODE_PARAM; - } -#endif else { ism_mode = ISM_MODE_NONE; @@ -178,7 +146,6 @@ ISM_MODE ivas_omasa_ism_mode_select( } -#ifdef OMASA_BRATE_SW /*--------------------------------------------------------------- * ivas_set_omasa_TC() * @@ -194,16 +161,8 @@ void ivas_set_omasa_TC( { switch ( ism_mode ) { - case ISM_MASA_MODE_PARAM: - *nCPE = 1; - *nSCE = 0; - break; -#ifdef OMASA_UPDATES case ISM_MASA_MODE_MASA_ONE_OBJ: case ISM_MASA_MODE_PARAM_ONE_OBJ: -#else - case ISM_MASA_MODE_ONE_OBJ: -#endif *nCPE = 1; *nSCE = 1; break; @@ -221,7 +180,6 @@ void ivas_set_omasa_TC( return; } -#endif /*--------------------------------------------------------------- @@ -232,14 +190,11 @@ void ivas_set_omasa_TC( /*! r: adjusted bitrate */ int32_t ivas_interformat_brate( - const ISM_MODE ism_mode, /* i : ISM mode */ - const int16_t nchan_ism, /* i : number of ISM channels */ - const int32_t element_brate, /* i : element bitrate */ - const int16_t ism_imp /* i : ISM importance flag */ -#ifdef OMASA_UPDATES - , - const int16_t limit_flag /* i : flag to limit the bitrate increase */ -#endif + const ISM_MODE ism_mode, /* i : ISM mode */ + const int16_t nchan_ism, /* i : number of ISM channels */ + const int32_t element_brate, /* i : element bitrate */ + const int16_t ism_imp, /* i : ISM importance flag */ + const int16_t limit_flag /* i : flag to limit the bitrate increase */ ) { int32_t element_brate_out; @@ -255,13 +210,11 @@ int32_t ivas_interformat_brate( { if ( ism_mode == ISM_MASA_MODE_DISC && ( ( nchan_ism == 4 && element_brate == 24000 ) || ( nchan_ism == 3 && element_brate <= 24000 ) || ( nchan_ism == 2 && element_brate <= 11000 ) ) ) /* for border case in DISC mode */ { - -#ifdef OMASA_UPDATES - if ( ( limit_flag == 1 ) && ( ( nchan_ism == 4 && element_brate == 24000 ) || ( nchan_ism == 3 && element_brate == 20000 ) || ( nchan_ism == 2 && element_brate <= 11000 ) ) ) + if ( limit_flag == 1 && ( ( nchan_ism == 4 && element_brate == 24000 ) || ( nchan_ism == 3 && element_brate == 20000 ) || ( nchan_ism == 2 && element_brate <= 11000 ) ) ) { return element_brate; } -#endif + if ( ism_imp == ISM_LOW_IMP ) { nBits = (int16_t) ( nBits * GAMMA_ISM_LOW_IMP4 ); @@ -283,14 +236,9 @@ int32_t ivas_interformat_brate( } } } - else -#ifdef OMASA_UPDATES - if ( ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || -#else - if ( ism_mode == ISM_MASA_MODE_ONE_OBJ || -#endif - ( ism_mode == ISM_MASA_MODE_DISC && element_brate == 9600 ) /* this condition corresponds to the ivas_total_brate = 24400 and 1 object */ - ) + else if ( ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || + ( ism_mode == ISM_MASA_MODE_DISC && element_brate == 9600 ) /* this condition corresponds to the ivas_total_brate = 24400 and 1 object */ + ) { if ( ism_imp == ISM_LOW_IMP ) { diff --git a/lib_com/ivas_prot.h b/lib_com/ivas_prot.h index 5a5d7023d85b4054b1d7d53ae95be729dbb02a8e..dd3c65845515330c100b245d08a477a73eb3199a 100755 --- a/lib_com/ivas_prot.h +++ b/lib_com/ivas_prot.h @@ -883,7 +883,7 @@ void ivas_param_ism_enc_close( void ivas_ism_metadata_close( ISM_METADATA_HANDLE hIsmMetaData[] /* i/o : object metadata handles */ -#ifdef OMASA_BRATE_SW +#ifdef MASA_AND_OBJECTS , const int16_t first_idx /* i : index of first handle to deallocate */ #endif @@ -1778,7 +1778,7 @@ void stereo_tdm_prep_dwnmx ( ); int16_t stereo_tdm_ener_analysis( -#ifdef OMASA_TUNING_TD_STEREO +#ifdef MASA_AND_OBJECTS const int16_t ivas_format, /* i : IVAS format */ #endif CPE_ENC_HANDLE hCPE, /* i : CPE structure */ @@ -1803,7 +1803,7 @@ void stereo_td_init_dec( ); void tdm_configure_dec( -#ifdef OMASA_TUNING_TD_STEREO +#ifdef MASA_AND_OBJECTS const int16_t ivas_format, /* i : IVAS format */ #endif CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ @@ -1855,7 +1855,7 @@ void tdm_ol_pitch_comparison( ); void tdm_configure_enc( -#ifdef OMASA_TUNING_TD_STEREO +#ifdef MASA_AND_OBJECTS const int16_t ivas_format, /* i : IVAS format */ #endif CPE_ENC_HANDLE hCPE, /* i : CPE encoder structure */ @@ -1874,7 +1874,7 @@ ivas_error signaling_enc_secondary( ); void tdm_bit_alloc( -#ifdef OMASA_TUNING_TD_STEREO +#ifdef MASA_AND_OBJECTS const int16_t ivas_format, /* i : IVAS format */ #endif const int32_t element_brate_wo_meta, /* i : element bitrate without metadata */ @@ -4844,7 +4844,7 @@ ivas_error vbap_init_data( const float *speaker_node_azi_deg, /* i : vector of speaker node azimuths (positive left) */ const float *speaker_node_ele_deg, /* i : vector of speaker node elevations (positive up) */ const int16_t num_speaker_nodes /* i : number of speaker nodes in the set */ -#ifdef OMASA_UPDATES +#ifdef MASA_AND_OBJECTS , const int16_t support_object_mode /* i : init VBAP also for object panning mode */ #endif @@ -4859,7 +4859,7 @@ void vbap_determine_gains( float *gains, /* o : gain vector for speaker nodes for given direction */ const int16_t azi_deg, /* i : azimuth in degrees for panning direction (positive left) */ const int16_t ele_deg /* i : elevation in degrees for panning direction (positive up) */ -#ifdef OMASA_UPDATES +#ifdef MASA_AND_OBJECTS , const int16_t use_object_mode /* i : select between object mode panning and spatial mode panning */ #endif @@ -5127,15 +5127,9 @@ ivas_error ivas_omasa_enc_open( ); void ivas_omasa_enc_close( -#ifdef FIX_OMASA_DELAY_COMP - OMASA_ENC_HANDLE hOMasa /* i/o: encoder OMASA handle */ -#else - OMASA_ENC_HANDLE hOMasa, /* i/o: encoder OMASA handle */ - const int16_t nchan_ism /* i : number of objects */ -#endif + OMASA_ENC_HANDLE *hOMasa /* i/o: encoder OMASA handle */ ); -#ifdef OMASA_BRATE_SW ivas_error ivas_omasa_enc_config( Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ ); @@ -5143,13 +5137,12 @@ ivas_error ivas_omasa_enc_config( ivas_error ivas_omasa_dec_config( Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ ); -#endif void ivas_omasa_set_config( OMASA_ENC_HANDLE hOMasa, /* i/o: OMASA encoder handle */ MASA_ENCODER_HANDLE hMasa, /* i : MASA encoder handle */ const int32_t input_Fs, /* i : Input sample rate */ - const ISM_MODE ismMode /* i : ISM mode */ + const ISM_MODE ism_mode /* i : ISM mode */ ); void ivas_omasa_enc( @@ -5192,10 +5185,8 @@ int32_t ivas_interformat_brate( const ISM_MODE ism_mode, /* i : ISM mode */ const int16_t nchan_ism, /* i : number of ISM channels */ const int32_t element_brate, /* i : element bitrate */ - const int16_t ism_imp /* i : ISM importance flag */ -#ifdef OMASA_UPDATES - , const int16_t limit_flag /* i : flag to limit the bitrate increase */ -#endif + const int16_t ism_imp, /* i : ISM importance flag */ + const int16_t limit_flag /* i : flag to limit the bitrate increase */ ); void ivas_combined_format_brate_sanity( @@ -5205,20 +5196,17 @@ void ivas_combined_format_brate_sanity( int16_t *diff_nBits /* o : number of differential bits */ ); - ISM_MODE ivas_omasa_ism_mode_select( const int32_t ivas_total_brate, /* i : IVAS total bitrate */ const int16_t nchan_ism /* i : number of input ISM's */ ); -#ifdef OMASA_BRATE_SW void ivas_set_omasa_TC( const ISM_MODE ism_mode, /* i : ISM mode */ const int16_t nchan_ism, /* i : number of input ISMs */ int16_t *nSCE, /* o : number of SCEs */ int16_t *nCPE /* o : number of CPEs */ ); -#endif void ivas_merge_masa_transports( float data_in_f1[][L_FRAME48k], /* i : Transport audio signals 1 */ @@ -5232,11 +5220,30 @@ ivas_error ivas_masa_ism_data_open( Decoder_Struct* st_ivas /* i/o: IVAS decoder handle */ ); -#ifdef OMASA_BRATE_SW void ivas_masa_ism_data_close( MASA_ISM_DATA_HANDLE *hMasaIsmData /* i/o: MASA_ISM rendering handle */ ); -#endif + +ivas_error ivas_omasa_ism_metadata_dec( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + const int32_t ism_total_brate, /* i : ISM total bitrate */ + int16_t *nchan_ism, /* o : number of ISM separated channels */ + int16_t *nchan_transport_ism, /* o : number of ISM TCs */ + const int16_t dirac_bs_md_write_idx, /* i : DirAC bitstream write index */ + int16_t nb_bits_metadata[] /* o : number of ISM metadata bits */ +); + +ivas_error ivas_omasa_dirac_td_binaural( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + float output[][L_FRAME48k], /* o : output synthesis signal */ + const int16_t output_frame /* i : output frame length per channel */ +); + +void ivas_omasa_dirac_rend( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + float output[][L_FRAME48k], /* o : output synthesis signal */ + const int16_t output_frame /* i : output frame length per channel */ +); void preProcessStereoTransportsForMovedObjects( Decoder_Struct* st_ivas, diff --git a/lib_com/ivas_stat_com.h b/lib_com/ivas_stat_com.h index 80e3712dadc3406d859ca209cfac6ac7af8420a5..5f09e0d45a331acae46cfa398580f351393b791e 100644 --- a/lib_com/ivas_stat_com.h +++ b/lib_com/ivas_stat_com.h @@ -74,11 +74,9 @@ typedef struct #ifdef MASA_AND_OBJECTS int16_t ism_imp; /* ISM importance flag */ int16_t ism_vad_flag; -#ifdef OMASA_UPDATES float q_azimuth_old; float q_elevation_old; #endif -#endif } ISM_METADATA_FRAME, *ISM_METADATA_HANDLE; diff --git a/lib_com/ivas_stereo_td_bit_alloc.c b/lib_com/ivas_stereo_td_bit_alloc.c index f593d41a18a54351efa4191bedb1333273aa28dd..97ddb731febd8c2c52c96441c8ea1fdbe1a0623a 100644 --- a/lib_com/ivas_stereo_td_bit_alloc.c +++ b/lib_com/ivas_stereo_td_bit_alloc.c @@ -74,7 +74,7 @@ *-------------------------------------------------------------------*/ void tdm_bit_alloc( -#ifdef OMASA_TUNING_TD_STEREO +#ifdef MASA_AND_OBJECTS const int16_t ivas_format, /* i : IVAS format */ #endif const int32_t element_brate_wo_meta, /* i : element bitrate without metadata */ @@ -139,7 +139,7 @@ void tdm_bit_alloc( *total_brate_sec = tdm_bit_allc_tbl[idx][coder_type]; /* secondary channel bitrate allocation based on the energy scaling ratio */ -#ifdef OMASA_TUNING_TD_STEREO +#ifdef MASA_AND_OBJECTS if ( ( ivas_format != MASA_ISM_FORMAT && ( ( coder_type != UNVOICED ) || tdm_LRTD_flag == 1 ) ) || ( ivas_format == MASA_ISM_FORMAT && coder_type > UNVOICED ) ) #else if ( ( coder_type != UNVOICED ) || tdm_LRTD_flag == 1 ) diff --git a/lib_com/options.h b/lib_com/options.h index 32b61cf5bade004ae83fd5be260721f347a2d9a5..64aab7987873d07c1a742bbd2a44360636bfc151 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -168,13 +168,7 @@ #define MASA_AND_OBJECTS /* Nokia: Combination of MASA and objects */ #ifdef MASA_AND_OBJECTS #define MASAISM_EDIT_OBJECTS /* Nokia: Temporary command line editing of object directions in the decoder */ -#define OMASA_UPDATES /* Nokia: Updates to the OMASA processing */ -#define OMASA_BRATE_SW /* VA: support of bitrate switching in OMASA format */ -#define FIX_TD5_IN_OMASA // do not transmit extended MD in OMASA -#define OMASA_TUNING_TD_STEREO /* VA: tuning of TD stereo in OMASA format */ -#define FIX_OMASA_DELAY_COMP /* Nokia: OMASA audio/meta delay compensation */ - -#endif /* MASA_AND_OBJECTS */ +#endif /* ################## End DEVELOPMENT switches ######################### */ diff --git a/lib_dec/ivas_cpe_dec.c b/lib_dec/ivas_cpe_dec.c index 43b02b01202dd409bef2c066e8306ac60df2fced..9667995683fa7c0f417b5319ba067df960897a41 100644 --- a/lib_dec/ivas_cpe_dec.c +++ b/lib_dec/ivas_cpe_dec.c @@ -268,11 +268,7 @@ ivas_error ivas_cpe_dec( #ifdef MASA_AND_OBJECTS /* subtract bit-rate for combined format coding */ -#ifdef OMASA_UPDATES if ( st_ivas->ivas_format == MASA_ISM_FORMAT && ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC ) ) -#else - if ( st_ivas->ivas_format == MASA_ISM_FORMAT && ( st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC ) ) -#endif { sts[0]->total_brate += hCPE->brate_surplus; } @@ -301,11 +297,7 @@ ivas_error ivas_cpe_dec( #ifdef MASA_AND_OBJECTS /* compute bit-rate surplus per channel in combined format coding */ int32_t brate_surplus[CPE_CHANNELS]; -#ifdef OMASA_UPDATES if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC ) -#else - if ( st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC ) -#endif { brate_surplus[0] = ( ( hCPE->brate_surplus / FRAMES_PER_SEC ) >> 1 ) * FRAMES_PER_SEC; brate_surplus[1] = hCPE->brate_surplus - brate_surplus[0]; @@ -339,11 +331,7 @@ ivas_error ivas_cpe_dec( #ifdef MASA_AND_OBJECTS /* subtract bit-rate for combined format coding */ -#ifdef OMASA_UPDATES if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC ) -#else - if ( st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC ) -#endif { sts[n]->bits_frame_channel += (int16_t) ( brate_surplus[n] / FRAMES_PER_SEC ); sts[n]->total_brate += brate_surplus[n]; @@ -414,7 +402,7 @@ ivas_error ivas_cpe_dec( if ( !st_ivas->bfi ) { tdm_configure_dec( -#ifdef OMASA_TUNING_TD_STEREO +#ifdef MASA_AND_OBJECTS st_ivas->ivas_format, #endif hCPE, &tdm_ratio_idx, nb_bits_metadata ); @@ -681,11 +669,7 @@ ivas_error create_cpe_dec( } #ifdef MASA_AND_OBJECTS -#ifdef OMASA_UPDATES if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC ) -#else - if ( st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC ) -#endif { cpe_brate = element_brate; } @@ -1116,11 +1100,7 @@ static void read_stereo_mode_and_bwidth( else { /* read stereo technology info */ -#ifdef OMASA_UPDATES - if ( ( hCPE->element_brate < MIN_BRATE_MDCT_STEREO && st_ivas->hMCT == NULL ) || ( st_ivas->ism_mode == ISM_MASA_MODE_PARAM && hCPE->element_brate == IVAS_48k ) ) -#else if ( hCPE->element_brate < MIN_BRATE_MDCT_STEREO && st_ivas->hMCT == NULL ) -#endif { hCPE->element_mode = get_next_indice( sts[0], NBITS_ELEMENT_MODE ) + IVAS_CPE_DFT; } diff --git a/lib_dec/ivas_dec.c b/lib_dec/ivas_dec.c index 6a6b190dfcdb457eddda91280ad0d026321a37e4..6d8ab4db7879515f8e95e3238a20e3d91b187a80 100644 --- a/lib_dec/ivas_dec.c +++ b/lib_dec/ivas_dec.c @@ -404,33 +404,23 @@ ivas_error ivas_dec( #ifdef MASA_AND_OBJECTS else if ( st_ivas->ivas_format == MASA_ISM_FORMAT ) { -#ifdef FIX_OMASA_DELAY_COMP - int16_t dirac_bs_md_write_idx = 0; -#endif + int16_t nchan_ism, nchan_transport_ism; + int16_t dirac_bs_md_write_idx; st = st_ivas->hCPE[0]->hCoreCoder[0]; - nb_bits_metadata[0] = 0; set_s( nb_bits_metadata, 0, MAX_SCE + 1 ); /* Set the number of objects for the parametric rendering */ + dirac_bs_md_write_idx = 0; if ( st_ivas->hDirAC != NULL ) { -#ifdef OMASA_UPDATES + st_ivas->hDirAC->numIsmDirections = 0; if ( st_ivas->ism_mode != ISM_MASA_MODE_DISC && st_ivas->ism_mode != ISM_MASA_MODE_MASA_ONE_OBJ ) -#else - if ( st_ivas->ism_mode != ISM_MASA_MODE_DISC ) -#endif { st_ivas->hDirAC->numIsmDirections = st_ivas->nchan_ism; } - else - { - st_ivas->hDirAC->numIsmDirections = 0; - } -#ifdef FIX_OMASA_DELAY_COMP dirac_bs_md_write_idx = st_ivas->hDirAC->dirac_bs_md_write_idx; /* Store the write-index for this frame */ -#endif } /* MASA metadata decoding */ @@ -444,126 +434,12 @@ ivas_error ivas_dec( st->bit_stream = &( st_ivas->bit_stream[( ism_total_brate / FRAMES_PER_SEC )] ); -#ifdef OMASA_UPDATES - /* set ISM parameters */ - int16_t nchan_ism, nchan_transport_ism; - nchan_ism = st_ivas->nchan_ism; - nchan_transport_ism = st_ivas->nchan_ism; - if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) - { - nchan_ism = 1; - nchan_transport_ism = 1; - } - else if ( st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) - { - nchan_ism = 0; - nchan_transport_ism = 1; - } -#endif - - /* decode ISM metadata */ -#ifndef OMASA_UPDATES - if ( st_ivas->ism_mode != ISM_MASA_MODE_DISC ) - { - if ( st_ivas->nSCE == 1 ) - { - ivas_sce_dec( st_ivas, 0, &output[2], output_frame, nb_bits_metadata[1] ); - } - else - { -#ifdef DEBUGGING - assert( ( st_ivas->nSCE <= 1 ) && "nSCE should be 1 if not in ISM_MASA_MODE_DISC." ); -#endif - } - } - else -#else - if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC || st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) -#endif + /* set ISM parameters and decode ISM metadata in OMASA format */ + if ( ( error = ivas_omasa_ism_metadata_dec( st_ivas, ism_total_brate, &nchan_ism, &nchan_transport_ism, dirac_bs_md_write_idx, &nb_bits_metadata[1] ) ) != IVAS_ERR_OK ) { -#ifdef FIX_OMASA_DELAY_COMP - int16_t azimuth_ism; - int16_t elevation_ism; - int16_t block; - int16_t meta_write_index; -#endif - - /* decode ISM metadata */ - if ( ( error = ivas_ism_metadata_dec( ism_total_brate, -#ifdef OMASA_UPDATES - nchan_ism, &nchan_transport_ism, -#else - st_ivas->nchan_ism, &( st_ivas->nSCE ), -#endif - st_ivas->hIsmMetaData, st_ivas->hSCE, st_ivas->bfi, &nb_bits_metadata[1], st_ivas->ism_mode, st_ivas->hISMDTX, NULL, &st_ivas->ism_extmeta_active, &st_ivas->ism_extmeta_cnt ) ) != IVAS_ERR_OK ) - { - return error; - } - - // VE: move the following updates into ivas_ism_metadata_dec() -#ifdef OMASA_UPDATES - if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC ) - { - for ( n = 0; n < st_ivas->nchan_ism; n++ ) - { -#ifdef FIX_OMASA_DELAY_COMP - azimuth_ism = (int16_t) ( st_ivas->hIsmMetaData[n]->azimuth + 0.5f ); - elevation_ism = (int16_t) ( st_ivas->hIsmMetaData[n]->elevation + 0.5f ); - - for ( block = 0; block < MAX_PARAM_SPATIAL_SUBFRAMES; block++ ) - { - meta_write_index = ( dirac_bs_md_write_idx + block ) % st_ivas->hDirAC->dirac_md_buffer_length; - st_ivas->hMasaIsmData->azimuth_ism[n][meta_write_index] = azimuth_ism; - st_ivas->hMasaIsmData->elevation_ism[n][meta_write_index] = elevation_ism; - } -#else - st_ivas->hMasaIsmData->azimuth_ism[n] = (int16_t) ( st_ivas->hIsmMetaData[n]->azimuth + 0.5f ); - st_ivas->hMasaIsmData->elevation_ism[n] = (int16_t) ( st_ivas->hIsmMetaData[n]->elevation + 0.5f ); -#endif - } - } - else /* ISM_MASA_MODE_MASA_ONE_OBJ */ - { -#ifdef FIX_OMASA_DELAY_COMP - azimuth_ism = (int16_t) ( st_ivas->hIsmMetaData[0]->azimuth + 0.5f ); - elevation_ism = (int16_t) ( st_ivas->hIsmMetaData[0]->elevation + 0.5f ); - - for ( block = 0; block < MAX_PARAM_SPATIAL_SUBFRAMES; block++ ) - { - meta_write_index = ( dirac_bs_md_write_idx + block ) % st_ivas->hDirAC->dirac_md_buffer_length; - st_ivas->hMasaIsmData->azimuth_separated_ism[meta_write_index] = azimuth_ism; - st_ivas->hMasaIsmData->elevation_separated_ism[meta_write_index] = elevation_ism; - } -#else - st_ivas->hMasaIsmData->azimuth_separated_ism = (int16_t) ( st_ivas->hIsmMetaData[0]->azimuth + 0.5f ); - st_ivas->hMasaIsmData->elevation_separated_ism = (int16_t) ( st_ivas->hIsmMetaData[0]->elevation + 0.5f ); -#endif - } -#else - for ( n = 0; n < st_ivas->nchan_ism; n++ ) - { - st_ivas->hMasaIsmData->azimuth_ism[n] = (int16_t) ( st_ivas->hIsmMetaData[n]->azimuth + 0.5f ); - st_ivas->hMasaIsmData->elevation_ism[n] = (int16_t) ( st_ivas->hIsmMetaData[n]->elevation + 0.5f ); - } -#endif - -#ifndef OMASA_UPDATES - for ( n = 0; n < st_ivas->nSCE - 1; n++ ) - { - if ( ( error = ivas_sce_dec( st_ivas, n, &output[2 * st_ivas->nCPE + n], output_frame, 0 ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - if ( ( error = ivas_sce_dec( st_ivas, n, &output[2 * st_ivas->nCPE + n], output_frame, sum_s( &nb_bits_metadata[1], st_ivas->nSCE ) ) ) != IVAS_ERR_OK ) - { - return error; - } -#endif + return error; } -#ifdef OMASA_UPDATES /* decode ISM channels */ for ( n = 0; n < nchan_transport_ism; n++ ) { @@ -572,7 +448,6 @@ ivas_error ivas_dec( return error; } } -#endif /* decode MASA channels */ if ( ( error = ivas_cpe_dec( st_ivas, 0, output, output_frame, nb_bits_metadata[0] ) ) != IVAS_ERR_OK ) @@ -597,88 +472,31 @@ ivas_error ivas_dec( /* Rendering */ if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM || st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC ) { -#ifdef OMASA_UPDATES if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC && st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC ) { - float data_separated_objects[MAX_NUM_OBJECTS][L_FRAME48k]; - float gain = 0.7943f; /* Todo Nokia: Temporary gain for roughly matching the loudness of other processing paths. */ - - for ( n = 0; n < st_ivas->nchan_ism; n++ ) - { - mvr2r( output[2 + n], data_separated_objects[n], output_frame ); - v_multc( data_separated_objects[n], gain, data_separated_objects[n], output_frame ); - } - - for ( n = 0; n < st_ivas->nchan_ism; n++ ) - { - delay_signal( data_separated_objects[n], output_frame, st_ivas->hMasaIsmData->delayBuffer[n], st_ivas->hMasaIsmData->delayBuffer_size ); - } - - ivas_dirac_dec_binaural( st_ivas, output, st_ivas->nchan_transport ); - - if ( ( error = ivas_td_binaural_renderer( st_ivas, data_separated_objects, output_frame ) ) != IVAS_ERR_OK ) + if ( ( error = ivas_omasa_dirac_td_binaural( st_ivas, output, output_frame ) ) != IVAS_ERR_OK ) { return error; } - - for ( n = 0; n < BINAURAL_CHANNELS; n++ ) - { - v_add( output[n], data_separated_objects[n], output[n], output_frame ); - } } else { ivas_dirac_dec_binaural( st_ivas, output, st_ivas->nchan_transport ); } -#else - ivas_dirac_dec_binaural( st_ivas, output, st_ivas->nchan_transport ); -#endif } else if ( st_ivas->renderer_type == RENDERER_MONO_DOWNMIX ) { ivas_mono_downmix_render_passive( st_ivas, output, output_frame ); } - else if ( st_ivas->hDirAC ) + else if ( st_ivas->renderer_type == RENDERER_DIRAC ) // VE2TP: please verify, it was "else if (st_ivas->hDirAC)" { -#ifdef OMASA_UPDATES if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC ) -#else - if ( st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC ) -#endif { - float data_separated_objects[MAX_NUM_OBJECTS][L_FRAME48k]; -#ifdef FIX_OMASA_DELAY_COMP - int16_t dirac_read_idx; -#endif - -#ifdef OMASA_UPDATES - if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) -#else - if ( st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ ) -#endif - { - mvr2r( output[2], data_separated_objects[0], output_frame ); - } - else - { - for ( n = 0; n < st_ivas->nchan_ism; n++ ) - { - mvr2r( output[n + 2], data_separated_objects[n], output_frame ); - } - } - -#ifdef FIX_OMASA_DELAY_COMP - dirac_read_idx = st_ivas->hDirAC->dirac_read_idx; -#endif - ivas_dirac_dec( st_ivas, output, st_ivas->nchan_transport, NULL, NULL, -1 ); - -#ifdef FIX_OMASA_DELAY_COMP - st_ivas->hDirAC->dirac_read_idx = dirac_read_idx; /* Original read index is needed for the next function which will update it again */ -#endif - ivas_masa_ism_separate_object_render( st_ivas, data_separated_objects, output, output_frame ); + ivas_omasa_dirac_rend( st_ivas, output, output_frame ); } else { + // VE2TP: please verify - this should probably never happen (ISM_MODE_NONE is renderered via "ivas_format == MASA_FORMAT" if branch) ivas_dirac_dec( st_ivas, output, st_ivas->nchan_transport, NULL, NULL, -1 ); } } @@ -915,7 +733,7 @@ ivas_error ivas_dec( st_ivas->ini_active_frame++; } -#ifdef OMASA_BRATE_SW +#ifdef MASA_AND_OBJECTS st_ivas->last_ivas_format = st_ivas->ivas_format; #endif diff --git a/lib_dec/ivas_dirac_dec.c b/lib_dec/ivas_dirac_dec.c index db8caed4bbf85806bfea0cd3564a807732a494b8..2fb2af0de49b8a7c007d3401b28f35b5157a1c43 100644 --- a/lib_dec/ivas_dirac_dec.c +++ b/lib_dec/ivas_dirac_dec.c @@ -609,7 +609,8 @@ ivas_error ivas_dirac_dec_config( { vbap_free_data( &( st_ivas->hVBAPdata ) ); } -#ifdef OMASA_UPDATES + +#ifdef MASA_AND_OBJECTS if ( ( error = vbap_init_data( &( st_ivas->hVBAPdata ), ls_azimuth, ls_elevation, nchan_out_woLFE, st_ivas->ivas_format == MASA_ISM_FORMAT ? 1 : 0 ) ) != IVAS_ERR_OK ) { return error; @@ -843,7 +844,7 @@ ivas_error ivas_dirac_dec_config( { hDirAC->dirac_md_buffer_length = MAX_PARAM_SPATIAL_SUBFRAMES; } -#ifdef FIX_OMASA_DELAY_COMP +#ifdef MASA_AND_OBJECTS else if ( st_ivas->ivas_format == MASA_FORMAT || st_ivas->ivas_format == MASA_ISM_FORMAT ) #else else if ( st_ivas->ivas_format == MASA_FORMAT ) @@ -2250,18 +2251,9 @@ void ivas_dirac_dec( } } -#ifdef OMASA_UPDATES if ( st_ivas->ism_mode != ISM_MASA_MODE_DISC && st_ivas->ism_mode != ISM_MASA_MODE_MASA_ONE_OBJ ) -#else - if ( st_ivas->ism_mode != ISM_MASA_MODE_DISC ) -#endif { - preProcessStereoTransportsForMovedObjects( st_ivas, - Cldfb_RealBuffer_Temp, - Cldfb_ImagBuffer_Temp, - (uint8_t) ( hDirAC->num_freq_bands ), - (uint8_t) subframe_idx, - 1 ); + preProcessStereoTransportsForMovedObjects( st_ivas, Cldfb_RealBuffer_Temp, Cldfb_ImagBuffer_Temp, (uint8_t) ( hDirAC->num_freq_bands ), (uint8_t) subframe_idx, 1 ); } } #endif diff --git a/lib_dec/ivas_dirac_output_synthesis_dec.c b/lib_dec/ivas_dirac_output_synthesis_dec.c index a7fd962ff94b7c9c796ca104ab7ed430eea3b9c9..d2458493762154bb6104f8b7f74728b31cdd2620 100644 --- a/lib_dec/ivas_dirac_output_synthesis_dec.c +++ b/lib_dec/ivas_dirac_output_synthesis_dec.c @@ -1625,48 +1625,25 @@ void ivas_dirac_dec_compute_directional_responses( } else { -#ifdef FIX_OMASA_DELAY_COMP ivas_dirac_dec_get_response( hMasaIsm->azimuth_ism[dir][hDirAC->dirac_read_idx], hMasaIsm->elevation_ism[dir][hDirAC->dirac_read_idx], direct_response_temp, hDirAC->hOutSetup.ambisonics_order ); -#else - ivas_dirac_dec_get_response( hMasaIsm->azimuth_ism[dir], hMasaIsm->elevation_ism[dir], direct_response_temp, hDirAC->hOutSetup.ambisonics_order ); -#endif } for ( l = 0; l < num_channels_dir; l++ ) { -#ifdef FIX_OMASA_DELAY_COMP direct_response_ism[l] += direct_response_temp[l] * hMasaIsm->energy_ratio_ism[dir][hDirAC->dirac_read_idx][k]; -#else - direct_response_ism[l] += direct_response_temp[l] * hMasaIsm->energy_ratio_ism[dir][subframe_idx][k]; -#endif } } -#ifdef FIX_OMASA_DELAY_COMP masaDirect = hDirAC->energy_ratio1[hDirAC->dirac_read_idx][k] + EPSILON; -#else - masaDirect = hDirAC->energy_ratio1[subframe_idx][k] + EPSILON; -#endif if ( hDirAC->numParametricDirections == 2 ) { -#ifdef FIX_OMASA_DELAY_COMP masaDirect += hDirAC->energy_ratio2[hDirAC->dirac_read_idx][k]; -#else - masaDirect += hDirAC->energy_ratio2[subframe_idx][k]; -#endif } -#ifdef FIX_OMASA_DELAY_COMP + ismDirect = hMasaIsm->energy_ratio_ism[0][hDirAC->dirac_read_idx][k]; -#else - ismDirect = hMasaIsm->energy_ratio_ism[0][subframe_idx][k]; -#endif for ( dir = 1; dir < hDirAC->numIsmDirections; dir++ ) { -#ifdef FIX_OMASA_DELAY_COMP ismDirect += hMasaIsm->energy_ratio_ism[dir][hDirAC->dirac_read_idx][k]; -#else - ismDirect += hMasaIsm->energy_ratio_ism[dir][subframe_idx][k]; -#endif } totalDirect = masaDirect + ismDirect; @@ -1761,61 +1738,30 @@ void ivas_dirac_dec_compute_directional_responses( { if ( hMasaIsm->ism_is_edited[dir] ) { -#ifdef OMASA_UPDATES vbap_determine_gains( hVBAPdata, direct_response_temp, hMasaIsm->azimuth_ism_edited[dir], hMasaIsm->elevation_ism_edited[dir], 1 ); -#else - vbap_determine_gains( hVBAPdata, direct_response_temp, hMasaIsm->azimuth_ism_edited[dir], hMasaIsm->elevation_ism_edited[dir] ); -#endif } else { -#ifdef OMASA_UPDATES -#ifdef FIX_OMASA_DELAY_COMP vbap_determine_gains( hVBAPdata, direct_response_temp, hMasaIsm->azimuth_ism[dir][hDirAC->dirac_read_idx], hMasaIsm->elevation_ism[dir][hDirAC->dirac_read_idx], 1 ); -#else - vbap_determine_gains( hVBAPdata, direct_response_temp, hMasaIsm->azimuth_ism[dir], hMasaIsm->elevation_ism[dir], 1 ); -#endif -#else - vbap_determine_gains( hVBAPdata, direct_response_temp, hMasaIsm->azimuth_ism[dir], hMasaIsm->elevation_ism[dir] ); -#endif } for ( l = 0; l < num_channels_dir; l++ ) { -#ifdef FIX_OMASA_DELAY_COMP direct_response_ism[l] += direct_response_temp[l] * hMasaIsm->energy_ratio_ism[dir][hDirAC->dirac_read_idx][k]; -#else - direct_response_ism[l] += direct_response_temp[l] * hMasaIsm->energy_ratio_ism[dir][subframe_idx][k]; -#endif } } normalizePanningGains( direct_response_ism, num_channels_dir ); -#ifdef FIX_OMASA_DELAY_COMP masaDirect = hDirAC->energy_ratio1[hDirAC->dirac_read_idx][k] + EPSILON; -#else - masaDirect = hDirAC->energy_ratio1[subframe_idx][k] + EPSILON; -#endif if ( hDirAC->numParametricDirections == 2 ) { -#ifdef FIX_OMASA_DELAY_COMP masaDirect += hDirAC->energy_ratio2[hDirAC->dirac_read_idx][k]; -#else - masaDirect += hDirAC->energy_ratio2[subframe_idx][k]; -#endif } -#ifdef FIX_OMASA_DELAY_COMP + ismDirect = hMasaIsm->energy_ratio_ism[0][hDirAC->dirac_read_idx][k]; -#else - ismDirect = hMasaIsm->energy_ratio_ism[0][subframe_idx][k]; -#endif for ( dir = 1; dir < hDirAC->numIsmDirections; dir++ ) { -#ifdef FIX_OMASA_DELAY_COMP ismDirect += hMasaIsm->energy_ratio_ism[dir][hDirAC->dirac_read_idx][k]; -#else - ismDirect += hMasaIsm->energy_ratio_ism[dir][subframe_idx][k]; -#endif } totalDirect = masaDirect + ismDirect; @@ -2314,7 +2260,7 @@ static void spreadCoherencePanningVbap( return; } -#ifdef OMASA_UPDATES +#ifdef MASA_AND_OBJECTS vbap_determine_gains( hVBAPdata, direct_response, azimuth, elevation, 0 ); #else vbap_determine_gains( hVBAPdata, direct_response, azimuth, elevation ); @@ -2322,7 +2268,7 @@ static void spreadCoherencePanningVbap( if ( spreadCoh > 0.f ) { -#ifdef OMASA_UPDATES +#ifdef MASA_AND_OBJECTS vbap_determine_gains( hVBAPdata, direct_response_left, azimuth + 30, elevation, 0 ); vbap_determine_gains( hVBAPdata, direct_response_right, azimuth - 30, elevation, 0 ); #else diff --git a/lib_dec/ivas_init_dec.c b/lib_dec/ivas_init_dec.c index 3170f3629fa842d208bb4cf6aa9ae1a7e73444a0..560618b55253fa0484cb2a7b572f41667e18a4d8 100644 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -70,11 +70,7 @@ ivas_error ivas_dec_setup( Decoder_State *st; int32_t ivas_total_brate; ivas_error error; -#ifdef MASA_AND_OBJECTS -#ifndef OMASA_BRATE_SW - int32_t cpe_brate; -#endif -#endif + error = IVAS_ERR_OK; num_bits_read = 0; @@ -166,7 +162,7 @@ ivas_error ivas_dec_setup( /* reconfigure in case a change of operation mode is detected */ if ( ( ivas_total_brate > IVAS_SID_5k2 && ivas_total_brate != st_ivas->hDecoderConfig->last_ivas_total_brate ) || ( st_ivas->ini_active_frame == 0 ) ) { -#ifdef OMASA_BRATE_SW +#ifdef MASA_AND_OBJECTS if ( st_ivas->last_ivas_format == MASA_FORMAT ) { #endif @@ -181,7 +177,7 @@ ivas_error ivas_dec_setup( return error; } } -#ifdef OMASA_BRATE_SW +#ifdef MASA_AND_OBJECTS } else { @@ -208,22 +204,10 @@ ivas_error ivas_dec_setup( /* reconfigure in case a change of operation mode is detected */ if ( ( ivas_total_brate > IVAS_SID_5k2 && ivas_total_brate != st_ivas->hDecoderConfig->last_ivas_total_brate ) || ( st_ivas->ini_active_frame == 0 ) ) { -#ifdef OMASA_BRATE_SW if ( ( error = ivas_omasa_dec_config( st_ivas ) ) != IVAS_ERR_OK ) { return error; } -#else - cpe_brate = calculate_cpe_brate_MASA_ISM( st_ivas->ism_mode, ivas_total_brate, st_ivas->nchan_ism ); - if ( st_ivas->ini_active_frame == 0 && ivas_total_brate != FRAME_NO_DATA && ( cpe_brate < MASA_STEREO_MIN_BITRATE ) && st_ivas->nCPE == 1 ) - { - st_ivas->hCPE[0]->nchan_out = 1; - } - else if ( ( error = ivas_masa_dec_reconfigure( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } -#endif } } } @@ -1078,11 +1062,8 @@ ivas_error ivas_init_decoder( { k++; } -#ifdef OMASA_UPDATES + if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) -#else - if ( st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ ) -#endif { /* one separated object */ st_ivas->nSCE = 1; @@ -1095,36 +1076,10 @@ ivas_error ivas_init_decoder( reset_indices_dec( st_ivas->hSCE[0]->hCoreCoder[0] ); -#ifdef OMASA_BRATE_SW if ( ( error = ivas_ism_metadata_dec_create( st_ivas, 1, NULL ) ) != IVAS_ERR_OK ) { return error; } -#else -#ifdef OMASA_UPDATES - if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) - { - int32_t temp_brate[MAX_SCE]; - - if ( ( error = ivas_ism_metadata_dec_create( st_ivas, 1, temp_brate ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else - { - if ( ( st_ivas->hIsmMetaData[0] = (ISM_METADATA_HANDLE) malloc( sizeof( ISM_METADATA_FRAME ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for ISm MetaData\n" ) ); - } - } -#else - if ( ( st_ivas->hIsmMetaData[0] = (ISM_METADATA_HANDLE) malloc( sizeof( ISM_METADATA_FRAME ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for ISm MetaData\n" ) ); - } -#endif -#endif } else if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC ) { @@ -1289,7 +1244,7 @@ ivas_error ivas_init_decoder( } else { -#ifdef OMASA_UPDATES +#ifdef MASA_AND_OBJECTS vbap_determine_gains( st_ivas->hVBAPdata, st_ivas->hLsSetupCustom->separate_ch_gains, 0, 0, 0 ); #else vbap_determine_gains( st_ivas->hVBAPdata, st_ivas->hLsSetupCustom->separate_ch_gains, 0, 0 ); @@ -1456,10 +1411,9 @@ ivas_error ivas_init_decoder( st_ivas->binaural_latency_ns = st_ivas->hCrendWrapper->binaural_latency_ns; } -#ifdef OMASA_UPDATES +#ifdef MASA_AND_OBJECTS if ( st_ivas->ivas_format == MASA_ISM_FORMAT ) { - // VE: introduce a new renderer_type for this case if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC && st_ivas->ism_mode == ISM_MASA_MODE_DISC ) { /* Allocate TD renderer for the objects in DISC mode */ @@ -1475,7 +1429,6 @@ ivas_error ivas_init_decoder( } } - // VE: introduce a new renderer_type for this case if ( st_ivas->renderer_type == RENDERER_DIRAC && ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC ) ) { /* Allocate 'hIsmRendererData' handle and memory for delay buffer within 'hMasaIsmData' */ @@ -1870,7 +1823,7 @@ void ivas_destroy_dec( } /* ISM metadata handles */ -#ifdef OMASA_BRATE_SW +#ifdef MASA_AND_OBJECTS ivas_ism_metadata_close( st_ivas->hIsmMetaData, 0 ); #else ivas_ism_metadata_close( st_ivas->hIsmMetaData ); @@ -1955,24 +1908,7 @@ void ivas_destroy_dec( #ifdef MASA_AND_OBJECTS /* MASA ISM structure */ -#ifdef OMASA_BRATE_SW ivas_masa_ism_data_close( &st_ivas->hMasaIsmData ); -#else - if ( st_ivas->hMasaIsmData != NULL ) - { - if ( st_ivas->hMasaIsmData->delayBuffer != NULL ) - { - for ( i = 0; i < st_ivas->hMasaIsmData->delayBuffer_nchan; i++ ) - { - free( st_ivas->hMasaIsmData->delayBuffer[i] ); - } - free( st_ivas->hMasaIsmData->delayBuffer ); - st_ivas->hMasaIsmData->delayBuffer = NULL; - } - free( st_ivas->hMasaIsmData ); - st_ivas->hMasaIsmData = NULL; - } -#endif #endif /* Head track data handle */ @@ -2056,11 +1992,7 @@ void ivas_init_dec_get_num_cldfb_instances( { *numCldfbAnalyses += st_ivas->nchan_ism; } -#ifdef OMASA_UPDATES else if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) -#else - else if ( st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ ) -#endif { *numCldfbAnalyses = st_ivas->nchan_transport + 1; } diff --git a/lib_dec/ivas_ism_metadata_dec.c b/lib_dec/ivas_ism_metadata_dec.c index 0f14195073130c77c20384fbe9505592ca130b7f..e512061cfbfae105e3ccf7cc96e73e310e95590d 100644 --- a/lib_dec/ivas_ism_metadata_dec.c +++ b/lib_dec/ivas_ism_metadata_dec.c @@ -204,11 +204,7 @@ ivas_error ivas_ism_metadata_dec( /* number of objects was read in ivas_dec_setup() */ #ifdef MASA_AND_OBJECTS -#ifdef OMASA_UPDATES if ( ism_mode != ISM_MASA_MODE_DISC && ism_mode != ISM_MASA_MODE_MASA_ONE_OBJ ) -#else - if ( ism_mode != ISM_MASA_MODE_DISC ) -#endif #endif { /* number of objects was read in ivas_dec_setup() */ @@ -233,7 +229,7 @@ ivas_error ivas_ism_metadata_dec( } /* read extended metadata presence flag */ -#ifdef FIX_TD5_IN_OMASA +#ifdef MASA_AND_OBJECTS if ( ism_mode == ISM_MODE_DISC && ism_total_brate >= ISM_EXTENDED_METADATA_BRATE ) #else if ( ism_total_brate >= ISM_EXTENDED_METADATA_BRATE ) @@ -261,11 +257,7 @@ ivas_error ivas_ism_metadata_dec( for ( ch = 0; ch < *nchan_transport; ch++ ) { #ifdef MASA_AND_OBJECTS -#ifdef OMASA_UPDATES if ( ism_mode == ISM_MASA_MODE_DISC || ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) -#else - if ( ism_mode == ISM_MASA_MODE_DISC ) -#endif { /* ISM importance flag is already read in ivas_masa_decode() */ ism_imp[ch] = hIsmMeta[ch]->ism_imp; @@ -300,11 +292,7 @@ ivas_error ivas_ism_metadata_dec( if ( hIsmMeta[ch]->ism_metadata_flag == 0 ) { #ifdef MASA_AND_OBJECTS -#ifdef OMASA_UPDATES if ( ism_mode == ISM_MASA_MODE_DISC || ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) -#else - if ( ism_mode == ISM_MASA_MODE_DISC ) -#endif { /* VAD flag is already read in ivas_masa_decode() */ localVAD[ch] = hIsmMeta[ch]->ism_vad_flag; @@ -339,11 +327,7 @@ ivas_error ivas_ism_metadata_dec( { hIsmMetaData = hIsmMeta[ch]; #ifdef MASA_AND_OBJECTS -#ifdef OMASA_UPDATES if ( ism_mode == ISM_MODE_DISC || ism_mode == ISM_MASA_MODE_DISC || ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) -#else - if ( ism_mode == ISM_MODE_DISC || ism_mode == ISM_MASA_MODE_DISC ) -#endif #else if ( ism_mode == ISM_MODE_DISC ) #endif @@ -405,11 +389,7 @@ ivas_error ivas_ism_metadata_dec( /* save number of metadata bits read */ #ifdef MASA_AND_OBJECTS -#ifdef OMASA_UPDATES if ( ism_mode == ISM_MODE_DISC || ism_mode == ISM_MASA_MODE_DISC || ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) -#else - if ( ism_mode == ISM_MODE_DISC || ism_mode == ISM_MASA_MODE_DISC ) -#endif #else if ( ism_mode == ISM_MODE_DISC ) #endif @@ -497,11 +477,7 @@ ivas_error ivas_ism_metadata_dec( } #ifdef MASA_AND_OBJECTS -#ifdef OMASA_UPDATES if ( ism_mode == ISM_MASA_MODE_DISC || ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) -#else - if ( ism_mode == ISM_MASA_MODE_DISC ) -#endif { ism_metadata_flag_global = 1; } @@ -515,11 +491,7 @@ ivas_error ivas_ism_metadata_dec( { #ifdef MASA_AND_OBJECTS int16_t masa_ism_flag = 0; -#ifdef OMASA_UPDATES if ( ism_mode == ISM_MASA_MODE_DISC || ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) -#else - if ( ism_mode == ISM_MASA_MODE_DISC ) -#endif { masa_ism_flag = 1; @@ -550,11 +522,7 @@ ivas_error ivas_ism_metadata_dec( hSCE[ch]->hCoreCoder[0]->low_rate_mode = 0; #endif #ifdef MASA_AND_OBJECTS -#ifdef OMASA_UPDATES if ( ism_mode == ISM_MODE_DISC || ism_mode == ISM_MASA_MODE_DISC || ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) -#else - if ( ism_mode == ISM_MODE_DISC || ism_mode == ISM_MASA_MODE_DISC ) -#endif #else if ( ism_mode == ISM_MODE_DISC ) #endif @@ -569,11 +537,7 @@ ivas_error ivas_ism_metadata_dec( } #ifdef MASA_AND_OBJECTS -#ifdef OMASA_UPDATES if ( ism_mode != ISM_MASA_MODE_DISC && ism_mode != ISM_MASA_MODE_MASA_ONE_OBJ ) -#else - if ( ism_mode != ISM_MASA_MODE_DISC ) -#endif #endif { hSCE[ch]->element_brate = element_brate[ch]; @@ -669,7 +633,7 @@ ivas_error ivas_ism_metadata_dec_create( ivas_ism_reset_metadata( st_ivas->hIsmMetaData[ch] ); } -#ifdef OMASA_BRATE_SW +#ifdef MASA_AND_OBJECTS if ( element_brate_tmp != NULL ) { #endif @@ -682,7 +646,7 @@ ivas_error ivas_ism_metadata_dec_create( { return error; } -#ifdef OMASA_BRATE_SW +#ifdef MASA_AND_OBJECTS } #endif @@ -701,7 +665,7 @@ ivas_error ivas_ism_metadata_dec_create( static void decode_angle_indices( DEC_CORE_HANDLE st0, /* i/o: bitstream handle */ ISM_METADATA_ANGLE_HANDLE angle, /* i/o: angle handle */ - int16_t *flag_abs_angle1 /* o : Azimuth/yaw encoding mode */ + int16_t *flag_abs_angle1 /* o : Azimuth/yaw encoding mode */ ) { int16_t idx_angle1, nbits_diff_angle1, diff, sgn; diff --git a/lib_dec/ivas_ism_renderer.c b/lib_dec/ivas_ism_renderer.c index 9ffc1b479c860c9cd087eb95def482cbbbb8b08a..9957522feb58e7a07f3e9b20475a4e09a669b9fa 100644 --- a/lib_dec/ivas_ism_renderer.c +++ b/lib_dec/ivas_ism_renderer.c @@ -274,11 +274,8 @@ ivas_error ivas_masa_ism_separate_object_renderer_open( set_f( st_ivas->hIsmRendererData->prev_gains[i], 0.0f, MAX_OUTPUT_CHANNELS ); } -#ifdef FIX_OMASA_DELAY_COMP interpolator_length = (int16_t) ( st_ivas->hDecoderConfig->output_Fs / FRAMES_PER_SEC / MAX_PARAM_SPATIAL_SUBFRAMES ); -#else - interpolator_length = (int16_t) ( st_ivas->hDecoderConfig->output_Fs / 50 ); -#endif + for ( i = 0; i < interpolator_length; i++ ) { st_ivas->hIsmRendererData->interpolator[i] = (float) i / ( (float) interpolator_length ); @@ -286,11 +283,7 @@ ivas_error ivas_masa_ism_separate_object_renderer_open( st_ivas->hMasaIsmData->delayBuffer_size = (int16_t) ( ( st_ivas->hDecoderConfig->output_Fs / 50 ) / MAX_PARAM_SPATIAL_SUBFRAMES ); -#ifdef OMASA_UPDATES if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) -#else - if ( st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ ) -#endif { st_ivas->hMasaIsmData->delayBuffer_nchan = 1; } @@ -341,26 +334,18 @@ void ivas_masa_ism_separate_object_render( int16_t azimuth, elevation; int16_t num_objects; uint8_t single_separated; -#ifdef FIX_OMASA_DELAY_COMP int16_t block; int16_t subframe_len; int16_t idx_offset; int16_t dirac_read_idx; -#endif hVBAPdata = st_ivas->hVBAPdata; nchan_out_woLFE = st_ivas->hIntSetup.nchan_out_woLFE; hRendererData = st_ivas->hIsmRendererData; lfe_index = st_ivas->hDirAC->hOutSetup.index_lfe[0]; -#ifdef FIX_OMASA_DELAY_COMP subframe_len = output_frame / MAX_PARAM_SPATIAL_SUBFRAMES; -#endif -#ifdef OMASA_UPDATES if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) -#else - if ( st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ ) -#endif { single_separated = 1; num_objects = 1; @@ -375,32 +360,20 @@ void ivas_masa_ism_separate_object_render( { delay_signal( input_f[obj], output_frame, st_ivas->hMasaIsmData->delayBuffer[obj], st_ivas->hMasaIsmData->delayBuffer_size ); /* Delay the signal to match CLDFB delay */ -#ifdef FIX_OMASA_DELAY_COMP for ( block = 0; block < MAX_PARAM_SPATIAL_SUBFRAMES; block++ ) { idx_offset = block * subframe_len; dirac_read_idx = ( st_ivas->hDirAC->dirac_read_idx + block ) % st_ivas->hDirAC->dirac_md_buffer_length; -#endif if ( single_separated ) { -#ifdef FIX_OMASA_DELAY_COMP azimuth = st_ivas->hMasaIsmData->azimuth_separated_ism[dirac_read_idx]; elevation = st_ivas->hMasaIsmData->elevation_separated_ism[dirac_read_idx]; -#else - azimuth = st_ivas->hMasaIsmData->azimuth_separated_ism; - elevation = st_ivas->hMasaIsmData->elevation_separated_ism; -#endif } else { -#ifdef FIX_OMASA_DELAY_COMP azimuth = st_ivas->hMasaIsmData->azimuth_ism[obj][dirac_read_idx]; elevation = st_ivas->hMasaIsmData->elevation_ism[obj][dirac_read_idx]; -#else - azimuth = st_ivas->hMasaIsmData->azimuth_ism[obj]; - elevation = st_ivas->hMasaIsmData->elevation_ism[obj]; -#endif } if ( st_ivas->hOutSetup.is_planar_setup ) @@ -408,21 +381,10 @@ void ivas_masa_ism_separate_object_render( /* If no elevation support in output format, then rendering should be done with zero elevation */ elevation = 0; } -#ifndef OMASA_UPDATES - else if ( output_config == AUDIO_CONFIG_7_1_4 || output_config == AUDIO_CONFIG_5_1_4 ) - { - /* For no negative elevations, it's better to map them to zero */ - elevation = elevation < 0 ? 0 : elevation; - } -#endif if ( hVBAPdata != NULL ) { -#ifdef OMASA_UPDATES vbap_determine_gains( hVBAPdata, gains, azimuth, elevation, 1 ); -#else - vbap_determine_gains( hVBAPdata, gains, azimuth, elevation ); -#endif } else { @@ -442,31 +404,19 @@ void ivas_masa_ism_separate_object_render( if ( fabsf( gains[j] ) > 0.0f || fabsf( hRendererData->prev_gains[obj][j] ) > 0.0f ) { -#ifdef FIX_OMASA_DELAY_COMP for ( k = 0; k < subframe_len; k++ ) -#else - for ( k = 0; k < output_frame; k++ ) -#endif { g1 = hRendererData->interpolator[k]; g2 = 1.0f - g1; -#ifdef FIX_OMASA_DELAY_COMP output_f[j2][k + idx_offset] += ( g1 * gains[j] + g2 * hRendererData->prev_gains[obj][j] ) * input_f[obj][k + idx_offset]; -#else - output_f[j2][k] += ( g1 * gains[j] + g2 * hRendererData->prev_gains[obj][j] ) * input_f[obj][k]; -#endif } } hRendererData->prev_gains[obj][j] = gains[j]; } -#ifdef FIX_OMASA_DELAY_COMP } -#endif } -#ifdef FIX_OMASA_DELAY_COMP st_ivas->hDirAC->dirac_read_idx = ( st_ivas->hDirAC->dirac_read_idx + MAX_PARAM_SPATIAL_SUBFRAMES ) % st_ivas->hDirAC->dirac_md_buffer_length; -#endif return; } diff --git a/lib_dec/ivas_masa_dec.c b/lib_dec/ivas_masa_dec.c index 325f02ad3b797ef26067489c2795e0fefde33193..d559c05261c0caa727656224441695d5b7f3a493 100644 --- a/lib_dec/ivas_masa_dec.c +++ b/lib_dec/ivas_masa_dec.c @@ -76,11 +76,7 @@ static int16_t decode_lfe_to_total_energy_ratio( MCMASA_LFE_SYNTH_DATA_HANDLE hM static ivas_error ivas_masa_dec_config( Decoder_Struct *st_ivas ); #ifdef MASA_AND_OBJECTS -#ifdef FIX_OMASA_DELAY_COMP static int16_t ivas_decode_masaism_metadata( IVAS_QMETADATA_HANDLE hQMetaData, MASA_DECODER_HANDLE hMasa, MASA_ISM_DATA_HANDLE hMasaIsmData, const int16_t nchan_ism, uint16_t *bit_stream, int16_t *next_bit_pos, const int16_t idx_separated_object, const int16_t ism_imp, const int16_t dirac_bs_md_write_idx, const int16_t dirac_md_buffer_length ); -#else -static int16_t ivas_decode_masaism_metadata( IVAS_QMETADATA_HANDLE hQMetaData, MASA_DECODER_HANDLE hMasa, MASA_ISM_DATA_HANDLE hMasaIsmData, const int16_t nchan_ism, uint16_t *bit_stream, int16_t *next_bit_pos, const int16_t idx_separated_object, const int16_t ism_imp ); -#endif static void decode_index_slice( int16_t index, int16_t *ratio_idx_ism, const int16_t nchan_ism, const int16_t K ); @@ -113,11 +109,9 @@ ivas_error ivas_masa_decode( #ifdef MASA_AND_OBJECTS int16_t obj; int16_t i, ch, ism_imp; -#ifdef FIX_OMASA_DELAY_COMP int16_t dirac_bs_md_write_idx; dirac_bs_md_write_idx = 0; -#endif ism_imp = 0; #endif @@ -127,11 +121,7 @@ ivas_error ivas_masa_decode( low_bitrate_mode = -1; /* This means that LBR mode is not used. */ #ifdef MASA_AND_OBJECTS -#ifdef OMASA_UPDATES if ( st_ivas->hOutSetup.separateChannelEnabled || st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC ) -#else - if ( st_ivas->hOutSetup.separateChannelEnabled || st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC ) -#endif #else if ( st_ivas->hOutSetup.separateChannelEnabled ) #endif @@ -183,11 +173,7 @@ ivas_error ivas_masa_decode( st->next_bit_pos -= NO_BITS_MASA_ISM_NO_OBJ; *nb_bits_read += NO_BITS_MASA_ISM_NO_OBJ; -#ifdef OMASA_UPDATES if ( st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) -#else - if ( st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ ) -#endif { /* read index of separated object */ /* nchan_ism should be > 1*/ @@ -202,7 +188,6 @@ ivas_error ivas_masa_decode( } /* read ISM importance flag (one per object) */ -#ifdef OMASA_UPDATES if ( st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) { ism_imp = 0; @@ -214,10 +199,8 @@ ivas_error ivas_masa_decode( } st_ivas->hIsmMetaData[0]->ism_imp = ism_imp; } + if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) -#else - if ( st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ ) -#endif { ism_imp = 0; for ( i = 0; i < ISM_METADATA_FLAG_BITS; i++ ) @@ -228,7 +211,6 @@ ivas_error ivas_masa_decode( } st_ivas->hIsmMetaData[0]->ism_imp = ism_imp; -#ifdef OMASA_UPDATES /* reset */ st_ivas->hIsmMetaData[0]->ism_vad_flag = 1; if ( st_ivas->hIsmMetaData[0]->ism_imp == ISM_NO_META ) @@ -237,7 +219,6 @@ ivas_error ivas_masa_decode( st_ivas->hIsmMetaData[0]->ism_vad_flag = st->bit_stream[( st->next_bit_pos )--]; ( *nb_bits_read ) += ISM_METADATA_VAD_FLAG_BITS; } -#endif } else if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC ) { @@ -327,31 +308,18 @@ ivas_error ivas_masa_decode( #ifdef MASA_AND_OBJECTS if ( st_ivas->ivas_format == MASA_ISM_FORMAT ) { -#ifdef OMASA_UPDATES if ( st_ivas->ism_mode != ISM_MASA_MODE_DISC && st_ivas->ism_mode != ISM_MASA_MODE_MASA_ONE_OBJ ) -#else - if ( st_ivas->ism_mode != ISM_MASA_MODE_DISC ) -#endif { *nb_bits_read += ivas_decode_masaism_metadata( hQMetaData, st_ivas->hMasa, st_ivas->hMasaIsmData, st_ivas->nchan_ism, st->bit_stream, &st->next_bit_pos, -#ifdef FIX_OMASA_DELAY_COMP st_ivas->hMasaIsmData->idx_separated_ism, ism_imp, st_ivas->hDirAC->dirac_bs_md_write_idx, st_ivas->hDirAC->dirac_md_buffer_length ); -#else - st_ivas->hMasaIsmData->idx_separated_ism, ism_imp ); -#endif } -#ifdef OMASA_UPDATES if ( st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) -#else - if ( st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ ) -#endif { for ( obj = 0; obj <= st_ivas->nchan_ism; obj++ ) { if ( st_ivas->hMasaIsmData->idx_separated_ism == obj ) { -#ifdef FIX_OMASA_DELAY_COMP int16_t sf; int16_t meta_write_index; @@ -361,10 +329,6 @@ ivas_error ivas_masa_decode( st_ivas->hMasaIsmData->azimuth_separated_ism[meta_write_index] = st_ivas->hMasaIsmData->azimuth_ism[obj][meta_write_index]; st_ivas->hMasaIsmData->elevation_separated_ism[meta_write_index] = st_ivas->hMasaIsmData->elevation_ism[obj][meta_write_index]; } -#else - st_ivas->hMasaIsmData->azimuth_separated_ism = st_ivas->hMasaIsmData->azimuth_ism[obj]; - st_ivas->hMasaIsmData->elevation_separated_ism = st_ivas->hMasaIsmData->elevation_ism[obj]; -#endif } } } @@ -373,11 +337,7 @@ ivas_error ivas_masa_decode( *nb_bits_read += ivas_qmetadata_dec_decode( hQMetaData, st->bit_stream, &st->next_bit_pos ); #ifdef MASA_AND_OBJECTS -#ifdef OMASA_UPDATES if ( st_ivas->ivas_format == MASA_ISM_FORMAT && st_ivas->ism_mode != ISM_MASA_MODE_DISC && st_ivas->ism_mode != ISM_MASA_MODE_MASA_ONE_OBJ ) -#else - if ( st_ivas->ivas_format == MASA_ISM_FORMAT && st_ivas->ism_mode != ISM_MASA_MODE_DISC ) -#endif { /* Modify spatial metadata based on the MASA-to-total energy ratios */ modify_masa_energy_ratios( hQMetaData ); @@ -471,9 +431,10 @@ ivas_error ivas_masa_decode( if ( st_ivas->hDirAC != NULL ) { -#ifdef FIX_OMASA_DELAY_COMP +#ifdef MASA_AND_OBJECTS dirac_bs_md_write_idx = st_ivas->hDirAC->dirac_bs_md_write_idx; /* Store the write-index for this frame */ #endif + ivas_qmetadata_to_dirac( hQMetaData, st_ivas->hDirAC, hMasa, ivas_total_brate, SBA_MODE_NONE, 0 ); } @@ -492,39 +453,27 @@ ivas_error ivas_masa_decode( { int16_t b; int16_t block; -#ifdef FIX_OMASA_DELAY_COMP int16_t meta_write_index; -#endif for ( i = 0; i < st_ivas->hDirAC->numIsmDirections; i++ ) /* Todo Nokia: Probably there is a better place for this eventually */ { for ( block = 0; block < MAX_PARAM_SPATIAL_SUBFRAMES; block++ ) { -#ifdef FIX_OMASA_DELAY_COMP meta_write_index = ( dirac_bs_md_write_idx + block ) % st_ivas->hDirAC->dirac_md_buffer_length; -#endif + for ( b = 0; b < CLDFB_NO_CHANNELS_MAX; b++ ) { -#ifdef FIX_OMASA_DELAY_COMP st_ivas->hDirAC->diffuseness_vector[meta_write_index][b] -= st_ivas->hMasaIsmData->energy_ratio_ism[i][meta_write_index][b]; -#else - st_ivas->hDirAC->diffuseness_vector[block][b] -= st_ivas->hMasaIsmData->energy_ratio_ism[i][block][b]; -#endif } } } for ( block = 0; block < MAX_PARAM_SPATIAL_SUBFRAMES; block++ ) { -#ifdef FIX_OMASA_DELAY_COMP meta_write_index = ( dirac_bs_md_write_idx + block ) % st_ivas->hDirAC->dirac_md_buffer_length; -#endif + for ( b = 0; b < CLDFB_NO_CHANNELS_MAX; b++ ) { -#ifdef FIX_OMASA_DELAY_COMP st_ivas->hDirAC->diffuseness_vector[meta_write_index][b] = max( 0.0f, st_ivas->hDirAC->diffuseness_vector[meta_write_index][b] ); -#else - st_ivas->hDirAC->diffuseness_vector[block][b] = max( 0.0f, st_ivas->hDirAC->diffuseness_vector[block][b] ); -#endif } } } @@ -615,11 +564,7 @@ ivas_error ivas_masa_dec_open( #ifdef MASA_AND_OBJECTS ism_total_brate = 0; -#ifdef OMASA_UPDATES if ( st_ivas->ivas_format == MASA_ISM_FORMAT && st_ivas->nSCE > 0 && ( st_ivas->ism_mode == ISM_MASA_MODE_DISC || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) ) -#else - if ( st_ivas->ivas_format == MASA_ISM_FORMAT && st_ivas->nSCE > 0 && ( st_ivas->ism_mode == ISM_MASA_MODE_DISC || st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ ) ) -#endif { for ( i = 0; i < st_ivas->nSCE; i++ ) { @@ -764,11 +709,7 @@ static ivas_error ivas_masa_dec_config( ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; ism_total_brate = 0; -#ifdef OMASA_UPDATES if ( st_ivas->ivas_format == MASA_ISM_FORMAT && st_ivas->nSCE > 0 && ( st_ivas->ism_mode == ISM_MASA_MODE_DISC || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) ) -#else - if ( st_ivas->ivas_format == MASA_ISM_FORMAT && st_ivas->nSCE > 0 && ( st_ivas->ism_mode == ISM_MASA_MODE_DISC || st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ ) ) -#endif { for ( i = 0; i < st_ivas->nSCE; i++ ) { @@ -780,18 +721,7 @@ static ivas_error ivas_masa_dec_config( if ( st_ivas->ivas_format == MASA_ISM_FORMAT ) { -#ifdef OMASA_UPDATES - if ( st_ivas->hCPE[0]->element_brate == IVAS_48k && st_ivas->ism_mode == ISM_MASA_MODE_PARAM ) - { - ivas_masa_set_coding_config( &( hMasa->config ), hMasa->data.band_mapping, IVAS_32k, st_ivas->nchan_transport, MC_MODE_NONE ); - } - else - { -#endif - ivas_masa_set_coding_config( &( hMasa->config ), hMasa->data.band_mapping, st_ivas->hCPE[0]->element_brate, st_ivas->nchan_transport, MC_MODE_NONE ); -#ifdef OMASA_UPDATES - } -#endif + ivas_masa_set_coding_config( &( hMasa->config ), hMasa->data.band_mapping, st_ivas->hCPE[0]->element_brate, st_ivas->nchan_transport, MC_MODE_NONE ); } else { @@ -1487,11 +1417,7 @@ ivas_error ivas_masa_dec_reconfigure( #ifdef MASA_AND_OBJECTS ism_total_brate = 0; -#ifdef OMASA_UPDATES if ( st_ivas->ivas_format == MASA_ISM_FORMAT && st_ivas->nSCE > 0 && ( st_ivas->ism_mode == ISM_MASA_MODE_DISC || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) ) -#else - if ( st_ivas->ivas_format == MASA_ISM_FORMAT && st_ivas->nSCE > 0 && ( st_ivas->ism_mode == ISM_MASA_MODE_DISC || st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ ) ) -#endif { for ( n = 0; n < st_ivas->nSCE; n++ ) { @@ -1507,7 +1433,7 @@ ivas_error ivas_masa_dec_reconfigure( #endif ); -#ifdef OMASA_BRATE_SW +#ifdef MASA_AND_OBJECTS if ( st_ivas->ivas_format == MASA_FORMAT ) { st_ivas->nchan_ism = 0; @@ -2328,13 +2254,9 @@ static int16_t ivas_decode_masaism_metadata( uint16_t *bit_stream, int16_t *next_bit_pos, const int16_t idx_separated_object, -#ifdef FIX_OMASA_DELAY_COMP const int16_t ism_imp, const int16_t dirac_bs_md_write_idx, const int16_t dirac_md_buffer_length ) -#else - const int16_t ism_imp ) -#endif { int16_t sf, band, dir, nbands, nblocks, obj, i; float energy_ratio_ism[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS][MAX_NUM_OBJECTS]; @@ -2344,12 +2266,9 @@ static int16_t ivas_decode_masaism_metadata( uint16_t idx_el, idx_az; float azimuth, elevation; int16_t nb_bits_read; -#ifdef OMASA_UPDATES float delta_phi; -#ifdef FIX_OMASA_DELAY_COMP int16_t meta_write_index; -#endif -#endif + nb_bits_read = *next_bit_pos; nbands = hQMetaData->q_direction->cfg.nbands; nblocks = hQMetaData->q_direction->cfg.nblocks; /* To do: what if other value than 4? */ @@ -2378,7 +2297,6 @@ static int16_t ivas_decode_masaism_metadata( for ( obj = 0; obj < nchan_ism; obj++ ) { index = 0; -#ifdef OMASA_UPDATES if ( bits_ism[obj] < 8 ) /* if low resolution, can look to the past */ { /* read if same as previous */ @@ -2425,26 +2343,13 @@ static int16_t ivas_decode_masaism_metadata( hMasaIsmData->q_azimuth_old[obj] = azimuth; hMasaIsmData->q_elevation_old[obj] = elevation; } -#else - for ( i = 0; i < bits_ism[obj]; i++ ) - { - index = ( index << 1 ) + bit_stream[( *next_bit_pos )--]; - } - deindex_spherical_component( index, &azimuth, &elevation, &idx_az, &idx_el, bits_ism[obj], MC_LS_SETUP_INVALID ); - -#endif -#ifdef FIX_OMASA_DELAY_COMP for ( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) { meta_write_index = ( dirac_bs_md_write_idx + sf ) % dirac_md_buffer_length; hMasaIsmData->azimuth_ism[obj][meta_write_index] = (int16_t) rint( azimuth ); hMasaIsmData->elevation_ism[obj][meta_write_index] = (int16_t) rint( elevation ); } -#else - hMasaIsmData->azimuth_ism[obj] = (int16_t) rint( azimuth ); - hMasaIsmData->elevation_ism[obj] = (int16_t) rint( elevation ); -#endif } /* Modify ISM metadata based on the MASA-to-total energy ratios */ @@ -2475,17 +2380,12 @@ static int16_t ivas_decode_masaism_metadata( { i = sf; } -#ifdef FIX_OMASA_DELAY_COMP + meta_write_index = ( dirac_bs_md_write_idx + sf ) % dirac_md_buffer_length; -#endif for ( dir = 0; dir < nchan_ism; dir++ ) { -#ifdef FIX_OMASA_DELAY_COMP hMasaIsmData->energy_ratio_ism[dir][meta_write_index][b] = energy_ratio_ism[i][band][dir]; -#else - hMasaIsmData->energy_ratio_ism[dir][sf][b] = energy_ratio_ism[i][band][dir]; -#endif } } } @@ -2505,7 +2405,7 @@ void ivas_masa_ism_set_edited_objects( Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ ) { - int16_t dir; + int16_t dir, sf; MASA_ISM_DATA_HANDLE hMasaIsmData; hMasaIsmData = st_ivas->hMasaIsmData; @@ -2515,29 +2415,20 @@ void ivas_masa_ism_set_edited_objects( { if ( st_ivas->editing_ism_enabled ) { -#ifdef FIX_OMASA_DELAY_COMP - int16_t sf; for ( sf = 0; sf < ( MAX_PARAM_SPATIAL_SUBFRAMES + DELAY_MASA_PARAM_DEC_SFR ); sf++ ) { hMasaIsmData->azimuth_ism[st_ivas->index_of_edited_ism][sf] = st_ivas->azimuth_edited; hMasaIsmData->elevation_ism[st_ivas->index_of_edited_ism][sf] = st_ivas->elevation_edited; } -#else - hMasaIsmData->azimuth_ism[st_ivas->index_of_edited_ism] = st_ivas->azimuth_edited; - hMasaIsmData->elevation_ism[st_ivas->index_of_edited_ism] = st_ivas->elevation_edited; -#endif -#ifdef OMASA_UPDATES + st_ivas->hIsmMetaData[st_ivas->index_of_edited_ism]->azimuth = st_ivas->azimuth_edited; st_ivas->hIsmMetaData[st_ivas->index_of_edited_ism]->elevation = st_ivas->elevation_edited; -#endif } } -#ifdef OMASA_UPDATES else if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) { /* Directions cannot be edited in this mode */ } -#endif else { for ( dir = 0; dir < MAX_NUM_OBJECTS; dir++ ) @@ -2554,31 +2445,19 @@ void ivas_masa_ism_set_edited_objects( } } -#ifdef OMASA_UPDATES if ( st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ && st_ivas->editing_ism_enabled ) -#else - if ( st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ && st_ivas->editing_ism_enabled ) -#endif { if ( st_ivas->hMasaIsmData->idx_separated_ism == st_ivas->index_of_edited_ism ) { -#ifdef FIX_OMASA_DELAY_COMP - int16_t sf; for ( sf = 0; sf < ( MAX_PARAM_SPATIAL_SUBFRAMES + DELAY_MASA_PARAM_DEC_SFR ); sf++ ) { st_ivas->hMasaIsmData->azimuth_separated_ism[sf] = st_ivas->azimuth_edited; st_ivas->hMasaIsmData->elevation_separated_ism[sf] = st_ivas->elevation_edited; } -#else - st_ivas->hMasaIsmData->azimuth_separated_ism = st_ivas->azimuth_edited; - st_ivas->hMasaIsmData->elevation_separated_ism = st_ivas->elevation_edited; -#endif } } } return; } - - #endif diff --git a/lib_dec/ivas_mono_dmx_renderer.c b/lib_dec/ivas_mono_dmx_renderer.c index a0ba899f0de62848055be58fd6b954dc1b19e507..4e16edca30929272a159568254cbc46da6ea06bd 100644 --- a/lib_dec/ivas_mono_dmx_renderer.c +++ b/lib_dec/ivas_mono_dmx_renderer.c @@ -97,15 +97,7 @@ void ivas_mono_downmix_render_passive( #ifdef MASA_AND_OBJECTS if ( st_ivas->ivas_format == MASA_ISM_FORMAT ) { - if ( st_ivas->ism_mode == ISM_MASA_MODE_PARAM ) - { - numInputChannels = st_ivas->nchan_transport; - } -#ifdef OMASA_UPDATES - else if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) -#else - else if ( st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ ) -#endif + if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) { numInputChannels = st_ivas->nchan_transport + 1; } @@ -115,6 +107,7 @@ void ivas_mono_downmix_render_passive( } } #endif + hDownmix = st_ivas->hMonoDmxRenderer; set_zero( proto_signal, output_frame ); diff --git a/lib_dec/ivas_omasa_dec.c b/lib_dec/ivas_omasa_dec.c index a688e0062f8f63394174a222f07940aa6a9b5aff..870ba291698cb7649f481eaa879772ff50f8c14e 100644 --- a/lib_dec/ivas_omasa_dec.c +++ b/lib_dec/ivas_omasa_dec.c @@ -35,12 +35,8 @@ #include "ivas_cnst.h" #include "ivas_prot.h" #include "prot.h" -#ifdef OMASA_UPDATES #include "ivas_prot_rend.h" -#endif -#ifdef OMASA_BRATE_SW #include "ivas_rom_com.h" -#endif #ifdef DEBUGGING #include "debug.h" #endif @@ -81,13 +77,11 @@ ivas_error ivas_masa_ism_data_open( hMasaIsmData->objectsMoved = 0; hMasaIsmData->delayBuffer = NULL; -#ifdef OMASA_UPDATES for ( ch = 0; ch < st_ivas->nchan_ism; ch++ ) { hMasaIsmData->q_elevation_old[ch] = 0.0f; hMasaIsmData->q_azimuth_old[ch] = 0.0f; } -#endif st_ivas->hMasaIsmData = hMasaIsmData; @@ -95,7 +89,6 @@ ivas_error ivas_masa_ism_data_open( } -#ifdef OMASA_BRATE_SW /*-------------------------------------------------------------------* * ivas_masa_ism_data_close() * @@ -128,11 +121,8 @@ void ivas_masa_ism_data_close( return; } -#endif -#endif -#ifdef OMASA_BRATE_SW /*--------------------------------------------------------------------------* * ivas_omasa_dec_config() * @@ -222,11 +212,7 @@ ivas_error ivas_omasa_dec_config( /* ISM MD reconfig. */ n_MD = 0; -#ifdef OMASA_UPDATES if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) -#else - if ( st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) -#endif { n_MD = 1; @@ -261,16 +247,11 @@ ivas_error ivas_omasa_dec_config( st_ivas->hCPE[0]->element_brate = ivas_total_brate - ism_total_brate; /* objects renderer reconfig. */ -#ifdef OMASA_UPDATES if ( st_ivas->ism_mode != ISM_MASA_MODE_MASA_ONE_OBJ && st_ivas->ism_mode != ISM_MASA_MODE_PARAM_ONE_OBJ && st_ivas->ism_mode != ISM_MASA_MODE_DISC && st_ivas->hIsmRendererData != NULL ) -#else - if ( st_ivas->ism_mode != ISM_MASA_MODE_PARAM_ONE_OBJ && st_ivas->ism_mode != ISM_MASA_MODE_DISC && st_ivas->hIsmRendererData != NULL ) -#endif { ivas_masa_ism_data_close( &( st_ivas->hMasaIsmData ) ); } -#ifdef OMASA_UPDATES if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC ) { if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC ) @@ -334,15 +315,12 @@ ivas_error ivas_omasa_dec_config( } } } -#endif } return IVAS_ERR_OK; } -#endif -#ifdef MASA_AND_OBJECTS /*--------------------------------------------------------------------------* * ivas_set_surplus_brate_dec() * @@ -359,28 +337,13 @@ void ivas_set_surplus_brate_dec( *ism_total_brate = 0; -#ifdef OMASA_UPDATES if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) { *ism_total_brate = ivas_interformat_brate( st_ivas->ism_mode, 1, st_ivas->hSCE[0]->element_brate, st_ivas->hIsmMetaData[0]->ism_imp, 0 ); -#else - if ( st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ ) - { - *ism_total_brate = ivas_interformat_brate( ISM_MASA_MODE_ONE_OBJ, 1, st_ivas->hSCE[0]->element_brate, st_ivas->hIsmMetaData[0]->ism_imp -#ifdef FIX_4OBJ_128 - , - 0 -#endif - ); -#endif st_ivas->hCPE[0]->brate_surplus = st_ivas->hSCE[0]->element_brate - *ism_total_brate; -#ifdef OMASA_UPDATES /* set 'st->total_brate'; there are no meta-data in ISM_MASA_MODE_PARAM_ONE_OBJ mode */ -#else - /* set 'st->total_brate'; there are no meta-data in ISM_MASA_MODE_ONE_OBJ mode */ -#endif st_ivas->hSCE[0]->hCoreCoder[0]->total_brate = *ism_total_brate; st_ivas->hSCE[0]->hCoreCoder[0]->low_rate_mode = 0; @@ -391,7 +354,6 @@ void ivas_set_surplus_brate_dec( } else if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC ) { -#ifdef OMASA_UPDATES int16_t brate_limit_flag, ism_imp[MAX_NUM_OBJECTS]; for ( n = 0; n < st_ivas->nchan_ism; n++ ) @@ -401,8 +363,6 @@ void ivas_set_surplus_brate_dec( brate_limit_flag = calculate_brate_limit_flag( ism_imp, st_ivas->nchan_ism ); -#endif - ism_total_brate_ref = 0; for ( n = 0; n < st_ivas->nchan_ism; n++ ) { @@ -419,12 +379,7 @@ void ivas_set_surplus_brate_dec( { st_ivas->hSCE[n]->element_brate = element_brate[n]; - *ism_total_brate += ivas_interformat_brate( ISM_MASA_MODE_DISC, st_ivas->nchan_ism, st_ivas->hSCE[n]->element_brate, st_ivas->hIsmMetaData[n]->ism_imp -#ifdef OMASA_UPDATES - , - brate_limit_flag -#endif - ); + *ism_total_brate += ivas_interformat_brate( ISM_MASA_MODE_DISC, st_ivas->nchan_ism, st_ivas->hSCE[n]->element_brate, st_ivas->hIsmMetaData[n]->ism_imp, brate_limit_flag ); } st_ivas->hCPE[0]->brate_surplus = ism_total_brate_ref - *ism_total_brate; @@ -437,4 +392,162 @@ void ivas_set_surplus_brate_dec( return; } + + +/*--------------------------------------------------------------------------* + * ivas_omasa_ism_metadata_dec() + * + * decode ISM metadata in OMASA format + *--------------------------------------------------------------------------*/ + +ivas_error ivas_omasa_ism_metadata_dec( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + const int32_t ism_total_brate, /* i : ISM total bitrate */ + int16_t *nchan_ism, /* o : number of ISM separated channels */ + int16_t *nchan_transport_ism, /* o : number of ISM TCs */ + const int16_t dirac_bs_md_write_idx, /* i : DirAC bitstream write index */ + int16_t nb_bits_metadata[] /* o : number of ISM metadata bits */ +) +{ + int16_t n, block; + int16_t azimuth_ism, elevation_ism, meta_write_index; + ivas_error error; + + /* set ISM parameters */ + *nchan_ism = st_ivas->nchan_ism; + *nchan_transport_ism = st_ivas->nchan_ism; + if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) + { + *nchan_ism = 1; + *nchan_transport_ism = 1; + } + else if ( st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) + { + *nchan_ism = 0; + *nchan_transport_ism = 1; + } + + if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC || st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) + { + /* decode ISM metadata */ + if ( ( error = ivas_ism_metadata_dec( ism_total_brate, *nchan_ism, nchan_transport_ism, st_ivas->hIsmMetaData, st_ivas->hSCE, st_ivas->bfi, + nb_bits_metadata, st_ivas->ism_mode, st_ivas->hISMDTX, NULL, &st_ivas->ism_extmeta_active, &st_ivas->ism_extmeta_cnt ) ) != IVAS_ERR_OK ) + { + return error; + } + + if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC ) + { + for ( n = 0; n < st_ivas->nchan_ism; n++ ) + { + azimuth_ism = (int16_t) ( st_ivas->hIsmMetaData[n]->azimuth + 0.5f ); + elevation_ism = (int16_t) ( st_ivas->hIsmMetaData[n]->elevation + 0.5f ); + + for ( block = 0; block < MAX_PARAM_SPATIAL_SUBFRAMES; block++ ) + { + meta_write_index = ( dirac_bs_md_write_idx + block ) % st_ivas->hDirAC->dirac_md_buffer_length; + st_ivas->hMasaIsmData->azimuth_ism[n][meta_write_index] = azimuth_ism; + st_ivas->hMasaIsmData->elevation_ism[n][meta_write_index] = elevation_ism; + } + } + } + else /* ISM_MASA_MODE_MASA_ONE_OBJ */ + { + azimuth_ism = (int16_t) ( st_ivas->hIsmMetaData[0]->azimuth + 0.5f ); + elevation_ism = (int16_t) ( st_ivas->hIsmMetaData[0]->elevation + 0.5f ); + + for ( block = 0; block < MAX_PARAM_SPATIAL_SUBFRAMES; block++ ) + { + meta_write_index = ( dirac_bs_md_write_idx + block ) % st_ivas->hDirAC->dirac_md_buffer_length; + st_ivas->hMasaIsmData->azimuth_separated_ism[meta_write_index] = azimuth_ism; + st_ivas->hMasaIsmData->elevation_separated_ism[meta_write_index] = elevation_ism; + } + } + } + + return IVAS_ERR_OK; +} + + +/*--------------------------------------------------------------------------* + * ivas_omasa_dirac_rend() + * + * Rendering in OMASA format + *--------------------------------------------------------------------------*/ + +void ivas_omasa_dirac_rend( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + float output[][L_FRAME48k], /* o : output synthesis signal */ + const int16_t output_frame /* i : output frame length per channel */ +) +{ + int16_t n, dirac_read_idx; + float data_separated_objects[MAX_NUM_OBJECTS][L_FRAME48k]; + + if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) + { + mvr2r( output[2], data_separated_objects[0], output_frame ); + } + else + { + for ( n = 0; n < st_ivas->nchan_ism; n++ ) + { + mvr2r( output[n + 2], data_separated_objects[n], output_frame ); + } + } + + dirac_read_idx = st_ivas->hDirAC->dirac_read_idx; + + ivas_dirac_dec( st_ivas, output, st_ivas->nchan_transport, NULL, NULL, -1 ); + + st_ivas->hDirAC->dirac_read_idx = dirac_read_idx; /* Original read index is needed for the next function which will update it again */ + + ivas_masa_ism_separate_object_render( st_ivas, data_separated_objects, output, output_frame ); + + return; +} + + +/*--------------------------------------------------------------------------* + * ivas_omasa_dirac_td_binaural() + * + * Binaural rendering in OMASA format + *--------------------------------------------------------------------------*/ + +ivas_error ivas_omasa_dirac_td_binaural( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + float output[][L_FRAME48k], /* o : output synthesis signal */ + const int16_t output_frame /* i : output frame length per channel */ +) +{ + int16_t n; + float data_separated_objects[MAX_NUM_OBJECTS][L_FRAME48k]; + float gain = 0.7943f; /* Todo Nokia: Temporary gain for roughly matching the loudness of other processing paths. */ + ivas_error error; + + for ( n = 0; n < st_ivas->nchan_ism; n++ ) + { + mvr2r( output[2 + n], data_separated_objects[n], output_frame ); + v_multc( data_separated_objects[n], gain, data_separated_objects[n], output_frame ); + } + + for ( n = 0; n < st_ivas->nchan_ism; n++ ) + { + delay_signal( data_separated_objects[n], output_frame, st_ivas->hMasaIsmData->delayBuffer[n], st_ivas->hMasaIsmData->delayBuffer_size ); + } + + ivas_dirac_dec_binaural( st_ivas, output, st_ivas->nchan_transport ); + + if ( ( error = ivas_td_binaural_renderer( st_ivas, data_separated_objects, output_frame ) ) != IVAS_ERR_OK ) + { + return error; + } + + for ( n = 0; n < BINAURAL_CHANNELS; n++ ) + { + v_add( output[n], data_separated_objects[n], output[n], output_frame ); + } + + return IVAS_ERR_OK; +} #endif diff --git a/lib_dec/ivas_sce_dec.c b/lib_dec/ivas_sce_dec.c index 9b6ea5ec2949eaf43c6fa384a76603c7f0786a4c..201355fc5b8b4c1baac5892655937893d1b93221 100755 --- a/lib_dec/ivas_sce_dec.c +++ b/lib_dec/ivas_sce_dec.c @@ -159,19 +159,11 @@ ivas_error ivas_sce_dec( ( st_ivas->sba_mode != SBA_MODE_SPAR ) ) { #ifdef MASA_AND_OBJECTS -#ifdef OMASA_UPDATES if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC || st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) -#else - if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC ) -#endif { st->bits_frame_nominal = (int16_t) ( ( hSCE->element_brate / FRAMES_PER_SEC ) - ISM_NB_BITS_METADATA_NOMINAL ); } -#ifdef OMASA_UPDATES else if ( ( st_ivas->mc_mode == MC_MODE_MCMASA && ivas_total_brate >= MCMASA_SEPARATE_BRATE ) || ( st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) ) -#else - else if ( ( st_ivas->mc_mode == MC_MODE_MCMASA && ivas_total_brate >= MCMASA_SEPARATE_BRATE ) || ( st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ ) ) -#endif #else if ( st_ivas->mc_mode == MC_MODE_MCMASA && ivas_total_brate >= MCMASA_SEPARATE_BRATE ) #endif @@ -228,11 +220,7 @@ ivas_error ivas_sce_dec( /* set ACELP12k8 / ACELP16k flag for flexible ACELP core */ #ifdef MASA_AND_OBJECTS -#ifdef OMASA_UPDATES if ( ( st_ivas->ivas_format == ISM_FORMAT || st_ivas->ism_mode == ISM_MASA_MODE_DISC || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) && -#else - if ( ( st_ivas->ivas_format == ISM_FORMAT || st_ivas->ism_mode == ISM_MASA_MODE_DISC || st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ ) && -#endif st->low_rate_mode && !( st->total_brate == SID_2k40 || st->total_brate == FRAME_NO_DATA ) ) #else if ( st_ivas->ivas_format == ISM_FORMAT && st->low_rate_mode && !( st->total_brate == SID_2k40 || st->total_brate == FRAME_NO_DATA ) ) diff --git a/lib_dec/ivas_stat_dec.h b/lib_dec/ivas_stat_dec.h index cd14053522677dc7d172c79f8253f7df4e1d0682..e474e0fd1f7de23180d4f0724b47c16ece603ded 100644 --- a/lib_dec/ivas_stat_dec.h +++ b/lib_dec/ivas_stat_dec.h @@ -1026,7 +1026,7 @@ typedef struct vbap_data_structure float *bottom_virtual_speaker_node_division_gains; float *top_virtual_speaker_node_division_gains; float *back_virtual_speaker_node_division_gains; -#ifdef OMASA_UPDATES +#ifdef MASA_AND_OBJECTS float *object_mode_bottom_virtual_speaker_node_division_gains; float *object_mode_top_virtual_speaker_node_division_gains; float *object_mode_back_virtual_speaker_node_division_gains; @@ -1144,32 +1144,20 @@ typedef struct ivas_masa_decoder_struct /* Data structure for MASA_ISM rendering */ typedef struct ivas_masa_ism_data_structure { -#ifdef FIX_OMASA_DELAY_COMP int16_t azimuth_ism[MAX_NUM_OBJECTS][MAX_PARAM_SPATIAL_SUBFRAMES + DELAY_MASA_PARAM_DEC_SFR]; int16_t elevation_ism[MAX_NUM_OBJECTS][MAX_PARAM_SPATIAL_SUBFRAMES + DELAY_MASA_PARAM_DEC_SFR]; float energy_ratio_ism[MAX_NUM_OBJECTS][MAX_PARAM_SPATIAL_SUBFRAMES + DELAY_MASA_PARAM_DEC_SFR][CLDFB_NO_CHANNELS_MAX]; -#else - int16_t azimuth_ism[MAX_NUM_OBJECTS]; - int16_t elevation_ism[MAX_NUM_OBJECTS]; - float energy_ratio_ism[MAX_NUM_OBJECTS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; -#endif int16_t azimuth_ism_edited[MAX_NUM_OBJECTS]; int16_t elevation_ism_edited[MAX_NUM_OBJECTS]; uint8_t ism_is_edited[MAX_NUM_OBJECTS]; int16_t idx_separated_ism; -#ifdef FIX_OMASA_DELAY_COMP int16_t azimuth_separated_ism[MAX_PARAM_SPATIAL_SUBFRAMES + DELAY_MASA_PARAM_DEC_SFR]; int16_t elevation_separated_ism[MAX_PARAM_SPATIAL_SUBFRAMES + DELAY_MASA_PARAM_DEC_SFR]; -#else - int16_t azimuth_separated_ism; - int16_t elevation_separated_ism; -#endif -#ifdef OMASA_UPDATES + float q_azimuth_old[MAX_NUM_OBJECTS]; float q_elevation_old[MAX_NUM_OBJECTS]; -#endif float ismPreprocMatrix[2][2][CLDFB_NO_CHANNELS_MAX]; uint8_t objectsMoved; @@ -1225,7 +1213,7 @@ typedef struct Decoder_Struct DECODER_CONFIG_HANDLE hDecoderConfig; /* Decoder configuration structure */ IVAS_FORMAT ivas_format; /* IVAS format */ -#ifdef OMASA_BRATE_SW +#ifdef MASA_AND_OBJECTS IVAS_FORMAT last_ivas_format; /* last frame IVAS format */ #endif int16_t sid_format; /* IVAS format indicator from SID frame */ diff --git a/lib_dec/ivas_stereo_switching_dec.c b/lib_dec/ivas_stereo_switching_dec.c index ff37582cc474bfcbf780a1fcad71ecaa9612ff3f..584b48f90618fb23dd2d620a80c6a523812e3061 100644 --- a/lib_dec/ivas_stereo_switching_dec.c +++ b/lib_dec/ivas_stereo_switching_dec.c @@ -880,7 +880,7 @@ ivas_error stereo_memory_dec( * Bitrate switching in MASA format *---------------------------------------------------------------*/ -#ifdef OMASA_BRATE_SW +#ifdef MASA_AND_OBJECTS if ( ( ivas_format == MASA_FORMAT || ivas_format == MASA_ISM_FORMAT ) && nchan_transport == 2 ) #else if ( ivas_format == MASA_FORMAT && nchan_transport == 2 ) diff --git a/lib_dec/ivas_stereo_td_dec.c b/lib_dec/ivas_stereo_td_dec.c index d8e817638a0e2fabf432d7a4db044baa2ddfcb7d..1b90885b0f8b3205777080be384eb638735fe381 100644 --- a/lib_dec/ivas_stereo_td_dec.c +++ b/lib_dec/ivas_stereo_td_dec.c @@ -84,7 +84,7 @@ void stereo_td_init_dec( *-------------------------------------------------------------------*/ void tdm_configure_dec( -#ifdef OMASA_TUNING_TD_STEREO +#ifdef MASA_AND_OBJECTS const int16_t ivas_format, /* i : IVAS format */ #endif CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ @@ -308,15 +308,10 @@ void tdm_configure_dec( *----------------------------------------------------------------*/ #ifdef MASA_AND_OBJECTS - tdm_bit_alloc( -#ifdef OMASA_TUNING_TD_STEREO - ivas_format, -#endif - - hCPE->element_brate - nb_bits_metadata * FRAMES_PER_SEC + hCPE->brate_surplus, - hStereoTD->tdm_lp_reuse_flag, &( sts[0]->total_brate ), &( sts[1]->total_brate ), - &hStereoTD->tdm_low_rate_mode, sts[1]->coder_type, *tdm_ratio_idx, hStereoTD->tdm_Pitch_reuse_flag, - sts[0]->bwidth, sts[1]->bwidth, sts[0]->flag_ACELP16k, hStereoTD->tdm_LRTD_flag, mod_ct, tdm_inst_ratio_idx ); + tdm_bit_alloc( ivas_format, hCPE->element_brate - nb_bits_metadata * FRAMES_PER_SEC + hCPE->brate_surplus, + hStereoTD->tdm_lp_reuse_flag, &( sts[0]->total_brate ), &( sts[1]->total_brate ), + &hStereoTD->tdm_low_rate_mode, sts[1]->coder_type, *tdm_ratio_idx, hStereoTD->tdm_Pitch_reuse_flag, + sts[0]->bwidth, sts[1]->bwidth, sts[0]->flag_ACELP16k, hStereoTD->tdm_LRTD_flag, mod_ct, tdm_inst_ratio_idx ); #else tdm_bit_alloc( hCPE->element_brate - nb_bits_metadata * FRAMES_PER_SEC, hStereoTD->tdm_lp_reuse_flag, &( sts[0]->total_brate ), &( sts[1]->total_brate ), &hStereoTD->tdm_low_rate_mode, sts[1]->coder_type, *tdm_ratio_idx, hStereoTD->tdm_Pitch_reuse_flag, sts[0]->bwidth, sts[1]->bwidth, sts[0]->flag_ACELP16k, hStereoTD->tdm_LRTD_flag, mod_ct, tdm_inst_ratio_idx ); #endif diff --git a/lib_dec/ivas_vbap.c b/lib_dec/ivas_vbap.c index 37547deaad4d792644775683d89b5c7599da6f5a..ed2ce47942dcc2431aa9e3fb39f6ca111d085243 100644 --- a/lib_dec/ivas_vbap.c +++ b/lib_dec/ivas_vbap.c @@ -141,7 +141,7 @@ static enum VirtualSpeakerNodeType check_need_of_virtual_speaker_node( VBAP_HAND static int16_t determine_best_triplet_and_gains( VBAP_SEARCH_STRUCT *search_struct, const float panning_unit_vec[3], const int16_t azi_deg, float gains[3] ); -#ifdef OMASA_UPDATES +#ifdef MASA_AND_OBJECTS static void determine_virtual_speaker_node_division_gains( const int16_t virtual_speaker_node_index, float *virtual_node_division_gains, int16_t connections[][2], const enum VirtualSpeakerNodeType type, const int16_t max_num_connections, const int16_t num_speaker_nodes, const int16_t use_object_mode ); #else static void determine_virtual_speaker_node_division_gains( const int16_t virtual_speaker_node_index, float *virtual_node_division_gains, int16_t connections[][2], const enum VirtualSpeakerNodeType type, const int16_t max_num_connections, const int16_t num_speaker_nodes ); @@ -161,7 +161,7 @@ ivas_error vbap_init_data( const float *speaker_node_azi_deg, /* i : vector of speaker node azimuths (positive left) */ const float *speaker_node_ele_deg, /* i : vector of speaker node elevations (positive up) */ const int16_t num_speaker_nodes /* i : number of speaker nodes in the set */ -#ifdef OMASA_UPDATES +#ifdef MASA_AND_OBJECTS , const int16_t support_object_mode /* i : init VBAP also for object panning mode */ #endif @@ -213,7 +213,7 @@ ivas_error vbap_init_data( vbap->bottom_virtual_speaker_node_division_gains = NULL; vbap->top_virtual_speaker_node_division_gains = NULL; vbap->back_virtual_speaker_node_division_gains = NULL; -#ifdef OMASA_UPDATES +#ifdef MASA_AND_OBJECTS vbap->object_mode_bottom_virtual_speaker_node_division_gains = NULL; vbap->object_mode_top_virtual_speaker_node_division_gains = NULL; vbap->object_mode_back_virtual_speaker_node_division_gains = NULL; @@ -240,7 +240,7 @@ ivas_error vbap_init_data( } set_zero( vbap->bottom_virtual_speaker_node_division_gains, num_speaker_nodes ); is_success &= vbap->bottom_virtual_speaker_node_division_gains != NULL; -#ifdef OMASA_UPDATES +#ifdef MASA_AND_OBJECTS if ( support_object_mode ) { vbap->object_mode_bottom_virtual_speaker_node_division_gains = (float *) malloc( num_speaker_nodes * sizeof( float ) ); @@ -260,7 +260,7 @@ ivas_error vbap_init_data( } set_zero( vbap->top_virtual_speaker_node_division_gains, num_speaker_nodes ); is_success &= vbap->top_virtual_speaker_node_division_gains != NULL; -#ifdef OMASA_UPDATES +#ifdef MASA_AND_OBJECTS if ( support_object_mode ) { vbap->object_mode_top_virtual_speaker_node_division_gains = (float *) malloc( num_speaker_nodes * sizeof( float ) ); @@ -280,7 +280,7 @@ ivas_error vbap_init_data( } set_zero( vbap->back_virtual_speaker_node_division_gains, num_speaker_nodes ); is_success &= vbap->back_virtual_speaker_node_division_gains != NULL; -#ifdef OMASA_UPDATES +#ifdef MASA_AND_OBJECTS if ( support_object_mode ) { vbap->object_mode_back_virtual_speaker_node_division_gains = (float *) malloc( num_speaker_nodes * sizeof( float ) ); @@ -377,7 +377,7 @@ ivas_error vbap_init_data( /* Determine how the virtual node gains should be distributed to real nodes, if necessary (checked within function). */ if ( is_success ) { -#ifdef OMASA_UPDATES +#ifdef MASA_AND_OBJECTS determine_virtual_speaker_node_division_gains( vbap->top_virtual_speaker_node_index, vbap->top_virtual_speaker_node_division_gains, connections, virtual_top_type, max_num_connections, num_speaker_nodes, 0 ); determine_virtual_speaker_node_division_gains( vbap->bottom_virtual_speaker_node_index, vbap->bottom_virtual_speaker_node_division_gains, connections, virtual_bottom_type, max_num_connections, num_speaker_nodes, 0 ); determine_virtual_speaker_node_division_gains( vbap->back_virtual_speaker_node_index, vbap->back_virtual_speaker_node_division_gains, connections, virtual_back_type, max_num_connections, num_speaker_nodes, 0 ); @@ -438,7 +438,7 @@ void vbap_free_data( { free( ( *hVBAPdata )->back_virtual_speaker_node_division_gains ); } -#ifdef OMASA_UPDATES +#ifdef MASA_AND_OBJECTS if ( ( *hVBAPdata )->object_mode_bottom_virtual_speaker_node_division_gains != NULL ) { free( ( *hVBAPdata )->object_mode_bottom_virtual_speaker_node_division_gains ); @@ -479,7 +479,7 @@ void vbap_determine_gains( float *gains, /* o : gain vector for loudspeakers for given direction */ const int16_t azi_deg, /* i : azimuth in degrees for panning direction (positive left)*/ const int16_t ele_deg /* i : elevation in degrees for panning direction (positive up)*/ -#ifdef OMASA_UPDATES +#ifdef MASA_AND_OBJECTS , const int16_t use_object_mode /* i : select between object mode panning and spatial mode panning */ #endif @@ -516,7 +516,7 @@ void vbap_determine_gains( bottom_virtual_speaker_node_index = hVBAPdata->bottom_virtual_speaker_node_index; top_virtual_speaker_node_index = hVBAPdata->top_virtual_speaker_node_index; back_virtual_speaker_node_index = hVBAPdata->back_virtual_speaker_node_index; -#ifdef OMASA_UPDATES +#ifdef MASA_AND_OBJECTS if ( use_object_mode ) { bottom_virtual_speaker_node_division_gains = hVBAPdata->object_mode_bottom_virtual_speaker_node_division_gains; @@ -782,7 +782,7 @@ static void determine_virtual_speaker_node_division_gains( const enum VirtualSpeakerNodeType type, /* i : virtual speaker node typel */ const int16_t max_num_connections, /* i : max number of connections */ const int16_t num_speaker_nodes /* i : max number of speaker nodes */ -#ifdef OMASA_UPDATES +#ifdef MASA_AND_OBJECTS , const int16_t use_object_mode /* i : use VBAP in object panning mode vs. spatial panning mode */ #endif @@ -828,7 +828,7 @@ static void determine_virtual_speaker_node_division_gains( for ( ch = 0; ch < num_speaker_nodes; ch++ ) { virtual_node_division_gains[ch] /= sum_val; -#ifdef OMASA_UPDATES +#ifdef MASA_AND_OBJECTS if ( use_object_mode ) { virtual_node_division_gains[ch] = powf( virtual_node_division_gains[ch], 0.8f ); diff --git a/lib_dec/lib_dec.c b/lib_dec/lib_dec.c index 4371a8dc20bc75369cf773e07b89fdadedd5e1d4..8c90a3a82db393c4e28abe7962e05f704c24ffbe 100644 --- a/lib_dec/lib_dec.c +++ b/lib_dec/lib_dec.c @@ -2012,11 +2012,7 @@ static ivas_error printConfigInfo_dec( #ifdef MASA_AND_OBJECTS else if ( st_ivas->ivas_format == MASA_ISM_FORMAT ) { -#ifdef OMASA_UPDATES fprintf( stdout, "Input configuration: combined ISM and MASA (%i ISM stream(s)) \n", st_ivas->nchan_ism ); -#else - fprintf( stdout, "Input configuration: combined ISM and MASA (%i separated ISM stream(s)) \n", st_ivas->nchan_transport ); -#endif } #endif } diff --git a/lib_enc/ivas_corecoder_enc_reconfig.c b/lib_enc/ivas_corecoder_enc_reconfig.c index a7cd931a1a8905858ff7c0173dc3ad1f8dd4b6ba..31dce8ad0a42f5d9feefb5cb11145c4dc9e0ca25 100644 --- a/lib_enc/ivas_corecoder_enc_reconfig.c +++ b/lib_enc/ivas_corecoder_enc_reconfig.c @@ -251,7 +251,7 @@ ivas_error ivas_corecoder_enc_reconfig( } /* propagate input audio buffers */ -#ifdef OMASA_BRATE_SW +#ifdef MASA_AND_OBJECTS if ( n_CoreCoder_existing > sce_id && hEncoderConfig->ivas_format != MASA_ISM_FORMAT ) #else if ( n_CoreCoder_existing > sce_id ) @@ -264,7 +264,7 @@ ivas_error ivas_corecoder_enc_reconfig( st_ivas->hSCE[sce_id]->hCoreCoder[0]->hBstr->ind_list = ind_list + sce_id * MAX_NUM_INDICES; /* only reset indices if it is not the first index list, this already contains the IVAS format bits */ -#ifdef OMASA_BRATE_SW +#ifdef MASA_AND_OBJECTS if ( sce_id > 0 || hEncoderConfig->ivas_format == MASA_ISM_FORMAT ) #else if ( sce_id > 0 ) @@ -299,7 +299,7 @@ ivas_error ivas_corecoder_enc_reconfig( st_ivas->hCPE[cpe_id]->hCoreCoder[n]->total_brate = st_ivas->hCPE[cpe_id]->element_brate / ( st_ivas->nCPE > 1 ? 1 : CPE_CHANNELS ); /* dummy initialization for getting right pointers initialization of input buffers in init_coder_ace_plus() */ st_ivas->hCPE[cpe_id]->hCoreCoder[n]->hBstr->ind_list = ind_list + ( cpe_id * CPE_CHANNELS + n + st_ivas->nSCE ) * MAX_NUM_INDICES; -#ifdef OMASA_BRATE_SW +#ifdef MASA_AND_OBJECTS if ( ( cpe_id * CPE_CHANNELS + n > 0 ) || ( st_ivas->mc_mode == MC_MODE_MCMASA && st_ivas->nSCE > 0 ) || ( hEncoderConfig->ivas_format == MASA_ISM_FORMAT && st_ivas->nSCE > 0 ) ) diff --git a/lib_enc/ivas_cpe_enc.c b/lib_enc/ivas_cpe_enc.c index 3042bab0c4fcaf17e0e5199fd6a94b3c67855be1..5c13e032e8d2d4bde0659922fa74736d2df98941 100644 --- a/lib_enc/ivas_cpe_enc.c +++ b/lib_enc/ivas_cpe_enc.c @@ -169,18 +169,7 @@ ivas_error ivas_cpe_enc( if ( sts[0]->ini_frame > 0 && st_ivas->hMCT == NULL ) { -#ifdef OMASA_UPDATES - if ( st_ivas->ism_mode == ISM_MASA_MODE_PARAM && ivas_total_brate == IVAS_48k ) - { - hCPE->element_mode = select_stereo_mode( hCPE, ivas_format, IVAS_32k ); - } - else - { -#endif - hCPE->element_mode = select_stereo_mode( hCPE, ivas_format, ivas_total_brate ); -#ifdef OMASA_UPDATES - } -#endif + hCPE->element_mode = select_stereo_mode( hCPE, ivas_format, ivas_total_brate ); } if ( ( error = front_vad( hCPE, NULL, hEncoderConfig, &hCPE->hFrontVad[0], st_ivas->hMCT != NULL, input_frame, vad_flag_dtx, fr_bands, Etot_LR, lf_E, localVAD_HE_SAD, vad_hover_flag, band_energies_LR, NULL, NULL ) ) != IVAS_ERR_OK ) @@ -283,7 +272,7 @@ ivas_error ivas_cpe_enc( if ( hCPE->element_mode != IVAS_CPE_MDCT && ( hCPE->element_brate != hCPE->last_element_brate || hCPE->last_element_mode != hCPE->element_mode || sts[0]->ini_frame == 0 || -#ifdef OMASA_BRATE_SW +#ifdef MASA_AND_OBJECTS ( ivas_total_brate != st_ivas->hEncoderConfig->last_ivas_total_brate ) || #endif sts[0]->last_core_brate <= SID_2k40 ) ) /* If the last frame was SID or NO_DATA, we need to run stereo_dft_config here since VAD decision is not known yet */ @@ -329,11 +318,7 @@ ivas_error ivas_cpe_enc( #ifdef MASA_AND_OBJECTS /* compute bit-rate surplus per channel in combined format coding */ int32_t brate_surplus[CPE_CHANNELS]; -#ifdef OMASA_UPDATES if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC ) -#else - if ( st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC ) -#endif { brate_surplus[0] = ( ( hCPE->brate_surplus / FRAMES_PER_SEC ) >> 1 ) * FRAMES_PER_SEC; brate_surplus[1] = hCPE->brate_surplus - brate_surplus[0]; @@ -362,11 +347,7 @@ ivas_error ivas_cpe_enc( #ifdef MASA_AND_OBJECTS /* subtract bit-rate for combined format coding */ -#ifdef OMASA_UPDATES if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC ) -#else - if ( st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC ) -#endif { sts[n]->bits_frame_channel += (int16_t) ( brate_surplus[n] / FRAMES_PER_SEC ); sts[n]->total_brate += brate_surplus[n]; @@ -419,7 +400,7 @@ ivas_error ivas_cpe_enc( { /* Determine the energy ratio between the 2 channels */ tdm_ratio_idx = stereo_tdm_ener_analysis( -#ifdef OMASA_TUNING_TD_STEREO +#ifdef MASA_AND_OBJECTS ivas_format, #endif hCPE, input_frame, &tdm_SM_or_LRTD_Pri, &tdm_ratio_idx_SM ); @@ -589,7 +570,7 @@ ivas_error ivas_cpe_enc( tdm_ol_pitch_comparison( hCPE, pitch_fr, voicing_fr ); tdm_configure_enc( -#ifdef OMASA_TUNING_TD_STEREO +#ifdef MASA_AND_OBJECTS ivas_format, #endif hCPE, Etot_last, tdm_SM_or_LRTD_Pri, tdm_ratio_idx, tdm_ratio_idx_SM, attack_flag[0], nb_bits_metadata ); @@ -723,11 +704,7 @@ ivas_error ivas_cpe_enc( #ifdef MASA_AND_OBJECTS /* subtract bit-rate for combined format coding */ -#ifdef OMASA_UPDATES if ( ivas_format == MASA_ISM_FORMAT && ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC ) ) -#else - if ( ivas_format == MASA_ISM_FORMAT && ( st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC ) ) -#endif { sts[0]->total_brate += hCPE->brate_surplus; } diff --git a/lib_enc/ivas_decision_matrix_enc.c b/lib_enc/ivas_decision_matrix_enc.c index e26d1e7a7231aa4fb732f81a708d710af5871f7e..1ef2fc00b05bda201e08af1ccc12fb2b0c71f3de 100644 --- a/lib_enc/ivas_decision_matrix_enc.c +++ b/lib_enc/ivas_decision_matrix_enc.c @@ -404,7 +404,7 @@ void ivas_signaling_enc( /*-------------------------------------------------------------------------- * Write element mode info *--------------------------------------------------------------------------*/ -#ifdef OMASA_UPDATES +#ifdef MASA_AND_OBJECTS if ( ( st->element_mode == IVAS_CPE_DFT || st->element_mode == IVAS_CPE_TD ) && !MCT_flag ) /* note: in MCT, the MDCT stereo is used exclusively */ #else if ( st->element_mode >= IVAS_CPE_DFT && element_brate < MIN_BRATE_MDCT_STEREO && !MCT_flag ) /* note: in MCT, the MDCT stereo is used exclusively */ diff --git a/lib_enc/ivas_enc.c b/lib_enc/ivas_enc.c index 514e90fb51293febd2389f396b8b3f20a1c015d6..457d56a5e9fb4cfe65a508e6ccf13045f44f721c 100644 --- a/lib_enc/ivas_enc.c +++ b/lib_enc/ivas_enc.c @@ -294,14 +294,10 @@ ivas_error ivas_enc( float data_separated_object[L_FRAME48k]; int16_t idx_separated_object; -#ifdef OMASA_BRATE_SW if ( ( error = ivas_omasa_enc_config( st_ivas ) ) != IVAS_ERR_OK ) { return error; } -#else - ivas_masa_enc_reconfigure( st_ivas ); -#endif hMetaData = st_ivas->hCPE[st_ivas->nCPE - 1]->hMetaData; @@ -312,25 +308,8 @@ ivas_error ivas_enc( mvr2r( data_f[hEncoderConfig->nchan_ism], data_f[hEncoderConfig->nchan_ism + 1], input_frame ); } - /* nb_bits_metadata[0] = 0; */ set_s( nb_bits_metadata, 0, MAX_SCE + 1 ); - -#ifdef OMASA_BRATE_SW idx_separated_object = 0; -#else - /* Configure MASA encoder based on frame parameters */ - if ( ( error = ivas_masa_enc_config( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - idx_separated_object = 0; - - if ( st_ivas->ism_mode != ISM_MASA_MODE_DISC ) - { - /* Configure oMASA analysis based on MASA config */ - ivas_omasa_set_config( st_ivas->hOMasa, st_ivas->hMasa, st_ivas->hEncoderConfig->input_Fs, st_ivas->ism_mode ); - } -#endif /* Estimate TF-tile energy for the input MASA stream */ ivas_masa_estimate_energy( st_ivas->hMasa, &( data_f[hEncoderConfig->nchan_ism] ), input_frame, st_ivas->nchan_transport ); @@ -344,18 +323,13 @@ ivas_error ivas_enc( /* Encode ISMs transport channels */ n = 0; -#ifdef OMASA_UPDATES if ( st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) -#else - if ( st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ ) -#endif { if ( ( error = ivas_sce_enc( st_ivas, 0, data_separated_object, input_frame, nb_bits_metadata[1] ) ) != IVAS_ERR_OK ) /* there are no metadata bits in SCE in this mode */ { return error; } } -#ifdef OMASA_UPDATES else if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) { if ( ( error = ivas_ism_enc( st_ivas, &data_separated_object, input_frame, &nb_bits_metadata[1] ) ) != IVAS_ERR_OK ) @@ -363,7 +337,6 @@ ivas_error ivas_enc( return error; } } -#endif else if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC ) { /* Analysis, decision about bitrates per channel & core coding */ @@ -375,13 +348,11 @@ ivas_error ivas_enc( } /* Encode MASA parameters and write MASA metadata bitstream */ - ivas_masa_encode( st_ivas->hMasa, st_ivas->hQMetaData, hMetaData, nb_bits_metadata, st_ivas->nchan_transport, ivas_format, ivas_total_brate, st_ivas->hEncoderConfig->Opt_DTX_ON, st_ivas->nchan_transport == 2 ? st_ivas->hCPE[0]->element_mode : -1, - st_ivas->ism_mode, hEncoderConfig->nchan_ism, st_ivas->hIsmMetaData, idx_separated_object, st_ivas->hOMasa -#ifdef MASA_AND_OBJECTS - , - st_ivas->hIsmMetaData[0]->ism_imp -#endif - ); + if ( ( error = ivas_masa_encode( st_ivas->hMasa, st_ivas->hQMetaData, hMetaData, nb_bits_metadata, st_ivas->nchan_transport, ivas_format, ivas_total_brate, st_ivas->hEncoderConfig->Opt_DTX_ON, st_ivas->nchan_transport == 2 ? st_ivas->hCPE[0]->element_mode : -1, + st_ivas->ism_mode, hEncoderConfig->nchan_ism, st_ivas->hIsmMetaData, idx_separated_object, st_ivas->hOMasa, st_ivas->hIsmMetaData[0]->ism_imp ) ) != IVAS_ERR_OK ) + { + return error; + } /* Configuration of combined-format bit-budget distribution */ #ifdef DEBUG_MODE_INFO @@ -390,7 +361,6 @@ ivas_error ivas_enc( ivas_set_surplus_brate_enc( st_ivas ); #endif - /* Encode MASA transport channels */ if ( ( ivas_cpe_enc( st_ivas, 0, data_f[n], data_f[n + 1], input_frame, nb_bits_metadata[0] ) ) != IVAS_ERR_OK ) { @@ -401,7 +371,7 @@ ivas_error ivas_enc( else if ( ivas_format == MC_FORMAT ) { /* select MC format mode; write MC LS setup; reconfigure the MC format encoder */ - if ( ( ivas_mc_enc_config( st_ivas ) ) != IVAS_ERR_OK ) + if ( ( error = ivas_mc_enc_config( st_ivas ) ) != IVAS_ERR_OK ) { return error; } diff --git a/lib_enc/ivas_init_enc.c b/lib_enc/ivas_init_enc.c index 404a0d577cacc97f0a582d98c6fca1f913e980e6..f2b30df804d477854b76bba065b73bc5a7803d36 100644 --- a/lib_enc/ivas_init_enc.c +++ b/lib_enc/ivas_init_enc.c @@ -610,12 +610,10 @@ ivas_error ivas_init_encoder( return error; } -#ifdef OMASA_BRATE_SW for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) { set_f( st_ivas->hQMetaData->masa_to_total_energy_ratio[i], 0, MASA_FREQUENCY_BANDS ); } -#endif if ( ( error = ivas_masa_enc_open( st_ivas ) ) != IVAS_ERR_OK ) { @@ -630,11 +628,7 @@ ivas_error ivas_init_encoder( } } -#ifdef OMASA_UPDATES - if ( ivas_total_brate - ism_total_brate >= MIN_BRATE_MDCT_STEREO && ( st_ivas->ism_mode != ISM_MASA_MODE_PARAM ) ) -#else if ( ivas_total_brate - ism_total_brate >= MIN_BRATE_MDCT_STEREO ) -#endif { st_ivas->hEncoderConfig->element_mode_init = IVAS_CPE_MDCT; } @@ -1046,7 +1040,7 @@ void ivas_destroy_enc( } /* ISM metadata handles */ -#ifdef OMASA_BRATE_SW +#ifdef MASA_AND_OBJECTS ivas_ism_metadata_close( st_ivas->hIsmMetaData, 0 ); #else ivas_ism_metadata_close( st_ivas->hIsmMetaData ); @@ -1091,15 +1085,8 @@ void ivas_destroy_enc( ivas_mcmasa_enc_close( &( st_ivas->hMcMasa ), st_ivas->hEncoderConfig->input_Fs ); #ifdef MASA_AND_OBJECTS - if ( st_ivas->hOMasa != NULL ) - { -#ifdef FIX_OMASA_DELAY_COMP - ivas_omasa_enc_close( st_ivas->hOMasa ); -#else - ivas_omasa_enc_close( st_ivas->hOMasa, st_ivas->hEncoderConfig->nchan_ism ); -#endif - st_ivas->hOMasa = NULL; - } + /* OMASA handle */ + ivas_omasa_enc_close( &( st_ivas->hOMasa ) ); #endif /* Stereo downmix for EVS encoder handle */ diff --git a/lib_enc/ivas_ism_enc.c b/lib_enc/ivas_ism_enc.c index 8cf039868cd746861a663d36be3deab48455696b..b560d04f4db3db89fc1ea264ccc9f1586a30c8b5 100644 --- a/lib_enc/ivas_ism_enc.c +++ b/lib_enc/ivas_ism_enc.c @@ -87,10 +87,11 @@ ivas_error ivas_ism_enc( int16_t localVAD_HE_SAD[1]; /* local HE VAD */ int16_t nchan_ism, dtx_flag, sid_flag, flag_noisy_speech; int16_t md_diff_flag[MAX_NUM_OBJECTS]; - ivas_error error; #ifdef MASA_AND_OBJECTS + int32_t ism_total_brate_ref, ism_total_brate; int16_t i, nchan_transport_ism; #endif + ivas_error error; push_wmops( "ivas_ism_enc" ); @@ -109,15 +110,12 @@ ivas_error ivas_ism_enc( #ifdef MASA_AND_OBJECTS nchan_transport_ism = st_ivas->nchan_transport; -#ifdef OMASA_UPDATES if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) { nchan_transport_ism = 1; nchan_ism = 1; } - else -#endif - if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC ) + else if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC ) { nchan_transport_ism = st_ivas->hEncoderConfig->nchan_ism; } @@ -245,36 +243,17 @@ ivas_error ivas_ism_enc( } else if ( st_ivas->ism_mode == ISM_MODE_PARAM ) { - // VE: call ivas_ism_metadata_enc() with 'st_ivas' - TBD - ivas_ism_metadata_enc( -#ifdef MASA_AND_OBJECTS - &st_ivas->hEncoderConfig->ivas_total_brate, -#else - st_ivas->hEncoderConfig->ivas_total_brate, -#endif - nchan_ism, #ifdef MASA_AND_OBJECTS - nchan_transport_ism, + ivas_ism_metadata_enc( &st_ivas->hEncoderConfig->ivas_total_brate, nchan_ism, nchan_transport_ism, st_ivas->hIsmMetaData, st_ivas->hSCE, st_ivas->hSCE[st_ivas->nSCE - 1]->hMetaData, + nb_bits_metadata, vad_flag, st_ivas->ism_mode, st_ivas->hDirAC->hParamIsm, st_ivas->hEncoderConfig->ism_extended_metadata_flag, -1 ); #else - st_ivas->nchan_transport, + ivas_ism_metadata_enc( st_ivas->hEncoderConfig->ivas_total_brate, nchan_ism, st_ivas->nchan_transport, st_ivas->hIsmMetaData, st_ivas->hSCE, st_ivas->hSCE[st_ivas->nSCE - 1]->hMetaData, nb_bits_metadata, vad_flag, st_ivas->ism_mode, st_ivas->hDirAC->hParamIsm, st_ivas->hEncoderConfig->ism_extended_metadata_flag ); #endif - st_ivas->hIsmMetaData, st_ivas->hSCE, st_ivas->hSCE[st_ivas->nSCE - 1]->hMetaData, nb_bits_metadata, vad_flag, st_ivas->ism_mode, st_ivas->hDirAC->hParamIsm, st_ivas->hEncoderConfig->ism_extended_metadata_flag -#ifdef MASA_AND_OBJECTS - , - -1 -#endif - ); } else /* ISM_MODE_DISC */ { #ifdef MASA_AND_OBJECTS - int32_t ism_total_brate_ref; - int32_t ism_total_brate; -#ifdef OMASA_UPDATES if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC || st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) -#else - if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC ) -#endif { ism_total_brate = 0; for ( i = 0; i < st_ivas->nSCE; i++ ) @@ -289,20 +268,15 @@ ivas_error ivas_ism_enc( ism_total_brate_ref = ism_total_brate; - // VE: change the interface of the following function and call it with 'st_ivas' only - ivas_ism_metadata_enc( &ism_total_brate, nchan_ism, - nchan_transport_ism, st_ivas->hIsmMetaData, st_ivas->hSCE, st_ivas->hSCE[st_ivas->nSCE - 1]->hMetaData, nb_bits_metadata, vad_flag, st_ivas->ism_mode, NULL, st_ivas->hEncoderConfig->ism_extended_metadata_flag, - st_ivas->hMasa != NULL ? st_ivas->hMasa->data.lp_noise_CPE : 0 ); + ivas_ism_metadata_enc( &ism_total_brate, nchan_ism, nchan_transport_ism, st_ivas->hIsmMetaData, st_ivas->hSCE, st_ivas->hSCE[st_ivas->nSCE - 1]->hMetaData, + nb_bits_metadata, vad_flag, st_ivas->ism_mode, NULL, st_ivas->hEncoderConfig->ism_extended_metadata_flag, st_ivas->hMasa != NULL ? st_ivas->hMasa->data.lp_noise_CPE : 0 ); if ( st_ivas->hEncoderConfig->ivas_format == MASA_ISM_FORMAT ) { st_ivas->hCPE[0]->brate_surplus = ism_total_brate_ref - ism_total_brate; } - #else - ivas_ism_metadata_enc( st_ivas->hEncoderConfig->ivas_total_brate, - nchan_ism, - st_ivas->nchan_transport, st_ivas->hIsmMetaData, st_ivas->hSCE, st_ivas->hSCE[st_ivas->nSCE - 1]->hMetaData, nb_bits_metadata, vad_flag, st_ivas->ism_mode, NULL, st_ivas->hEncoderConfig->ism_extended_metadata_flag ); + ivas_ism_metadata_enc( st_ivas->hEncoderConfig->ivas_total_brate, nchan_ism, st_ivas->nchan_transport, st_ivas->hIsmMetaData, st_ivas->hSCE, st_ivas->hSCE[st_ivas->nSCE - 1]->hMetaData, nb_bits_metadata, vad_flag, st_ivas->ism_mode, NULL, st_ivas->hEncoderConfig->ism_extended_metadata_flag ); #endif } diff --git a/lib_enc/ivas_ism_metadata_enc.c b/lib_enc/ivas_ism_metadata_enc.c index 5bac1b332e6ba0ed8ddd679239b7daa5b3378a00..24924a25bb2229713d962224dc89e57c2830767c 100644 --- a/lib_enc/ivas_ism_metadata_enc.c +++ b/lib_enc/ivas_ism_metadata_enc.c @@ -214,11 +214,7 @@ ivas_error ivas_ism_metadata_enc( set_s( flag_abs_radius, 0, nchan_ism ); #ifdef MASA_AND_OBJECTS -#ifdef OMASA_UPDATES if ( ism_mode == ISM_MASA_MODE_DISC || ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) -#else - if ( ism_mode == ISM_MASA_MODE_DISC ) -#endif { /*----------------------------------------------------------------* * Rate importance of particular ISM streams in combined format coding @@ -261,11 +257,7 @@ ivas_error ivas_ism_metadata_enc( *----------------------------------------------------------------*/ #ifdef MASA_AND_OBJECTS -#ifdef OMASA_UPDATES if ( ism_mode != ISM_MASA_MODE_DISC && ism_mode != ISM_MASA_MODE_MASA_ONE_OBJ ) -#else - if ( ism_mode != ISM_MASA_MODE_DISC ) -#endif { #endif /* write number of objects - unary coding */ @@ -279,7 +271,7 @@ ivas_error ivas_ism_metadata_enc( #endif /* write extended metadata presence flag */ -#ifdef FIX_TD5_IN_OMASA +#ifdef MASA_AND_OBJECTS if ( ism_mode == ISM_MODE_DISC && *ism_total_brate >= ISM_EXTENDED_METADATA_BRATE ) #else if ( ism_total_brate >= ISM_EXTENDED_METADATA_BRATE ) @@ -296,11 +288,7 @@ ivas_error ivas_ism_metadata_enc( #endif { #ifdef MASA_AND_OBJECTS -#ifdef OMASA_UPDATES if ( ism_mode == ISM_MASA_MODE_DISC || ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) -#else - if ( ism_mode == ISM_MASA_MODE_DISC ) -#endif { /* ISM importance flag will be written in ivas_masa_encode() */ hIsmMeta[ch]->ism_imp = ism_imp[ch]; @@ -318,11 +306,7 @@ ivas_error ivas_ism_metadata_enc( } #ifdef MASA_AND_OBJECTS -#ifdef OMASA_UPDATES if ( ism_mode == ISM_MODE_DISC || ism_mode == ISM_MASA_MODE_DISC || ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) -#else - if ( ism_mode == ISM_MODE_DISC || ism_mode == ISM_MASA_MODE_DISC ) -#endif #else if ( ism_mode == ISM_MODE_DISC ) #endif @@ -331,11 +315,7 @@ ivas_error ivas_ism_metadata_enc( for ( ch = 0; ch < nchan_transport; ch++ ) { #ifdef MASA_AND_OBJECTS -#ifdef OMASA_UPDATES if ( ism_mode == ISM_MASA_MODE_DISC || ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) -#else - if ( ism_mode == ISM_MASA_MODE_DISC ) -#endif { /* reset */ hIsmMeta[ch]->ism_vad_flag = 1; @@ -346,11 +326,7 @@ ivas_error ivas_ism_metadata_enc( { /* this flag distinguishes between coding of inactive frame and active frame w/o. metadata */ #ifdef MASA_AND_OBJECTS -#ifdef OMASA_UPDATES if ( ism_mode == ISM_MASA_MODE_DISC || ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) -#else - if ( ism_mode == ISM_MASA_MODE_DISC ) -#endif { /* VAD flag will be written in ivas_masa_encode() */ hIsmMeta[ch]->ism_vad_flag = localVAD[ch]; @@ -382,11 +358,7 @@ ivas_error ivas_ism_metadata_enc( { hIsmMetaData = hIsmMeta[ch]; #ifdef MASA_AND_OBJECTS -#ifdef OMASA_UPDATES if ( ism_mode == ISM_MODE_DISC || ism_mode == ISM_MASA_MODE_DISC || ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) -#else - if ( ism_mode == ISM_MODE_DISC || ism_mode == ISM_MASA_MODE_DISC ) -#endif #else if ( ism_mode == ISM_MODE_DISC ) #endif @@ -401,11 +373,7 @@ ivas_error ivas_ism_metadata_enc( *----------------------------------------------------------------*/ #ifdef MASA_AND_OBJECTS -#ifdef OMASA_UPDATES if ( ism_mode == ISM_MODE_DISC || ism_mode == ISM_MASA_MODE_DISC || ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) -#else - if ( ism_mode == ISM_MODE_DISC || ism_mode == ISM_MASA_MODE_DISC ) -#endif #else if ( ism_mode == ISM_MODE_DISC ) #endif @@ -434,11 +402,7 @@ ivas_error ivas_ism_metadata_enc( /* save number of metadata bits written */ #ifdef MASA_AND_OBJECTS -#ifdef OMASA_UPDATES if ( ism_mode == ISM_MODE_DISC || ism_mode == ISM_MASA_MODE_DISC || ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) -#else - if ( ism_mode == ISM_MODE_DISC || ism_mode == ISM_MASA_MODE_DISC ) -#endif #else if ( ism_mode == ISM_MODE_DISC ) #endif @@ -574,18 +538,13 @@ ivas_error ivas_ism_metadata_enc( * Take into account the combined format bit-budget distribution *----------------------------------------------------------------*/ -#ifdef OMASA_UPDATES if ( ism_mode == ISM_MASA_MODE_DISC || ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) -#else - if ( ism_mode == ISM_MASA_MODE_DISC ) -#endif { int16_t bits_ism, bits_element[MAX_NUM_OBJECTS]; -#ifdef OMASA_UPDATES int16_t brate_limit_flag; + brate_limit_flag = calculate_brate_limit_flag( ism_imp, nchan_ism ); -#endif bits_ism = (int16_t) ( *ism_total_brate / FRAMES_PER_SECOND ); set_s( bits_element, bits_ism / nchan_ism, nchan_ism ); @@ -595,11 +554,7 @@ ivas_error ivas_ism_metadata_enc( *ism_total_brate = 0; for ( ch = 0; ch < nchan_ism; ch++ ) { -#ifdef OMASA_UPDATES *ism_total_brate += ivas_interformat_brate( ism_mode, nchan_ism, hSCE[ch]->element_brate, ism_imp[ch], brate_limit_flag ); -#else - *ism_total_brate += ivas_interformat_brate( ISM_MASA_MODE_DISC, nchan_ism, hSCE[ch]->element_brate, ism_imp[ch] ); -#endif } ism_metadata_flag_global = 1; } @@ -610,7 +565,6 @@ ivas_error ivas_ism_metadata_enc( *----------------------------------------------------------------*/ #ifdef MASA_AND_OBJECTS -#ifdef OMASA_UPDATES if ( ism_mode == ISM_MASA_MODE_DISC || ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) { if ( ( error = ivas_ism_config( *ism_total_brate, nchan_transport, nchan_ism, hIsmMeta, localVAD, ism_imp, element_brate, total_brate, nb_bits_metadata, 1 ) ) != IVAS_ERR_OK ) @@ -625,12 +579,6 @@ ivas_error ivas_ism_metadata_enc( return error; } } -#else - if ( ( error = ivas_ism_config( ism_total_brate, nchan_transport, nchan_ism, hIsmMeta, localVAD, ism_imp, element_brate, total_brate, nb_bits_metadata, ism_mode == ISM_MASA_MODE_DISC ) ) != IVAS_ERR_OK ) - { - return error; - } -#endif #else if ( ( error = ivas_ism_config( ism_total_brate, nchan_transport, nchan_ism, hIsmMeta, localVAD, ism_imp, element_brate, total_brate, nb_bits_metadata ) ) != IVAS_ERR_OK ) { @@ -656,11 +604,7 @@ ivas_error ivas_ism_metadata_enc( hSCE[ch]->element_brate = element_brate[ch]; } -#ifdef OMASA_UPDATES else if ( ism_mode == ISM_MASA_MODE_DISC || ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) -#else - else if ( ism_mode == ISM_MASA_MODE_DISC ) -#endif { if ( ism_imp[ch] == ISM_INACTIVE_IMP ) { @@ -730,37 +674,7 @@ ivas_error ivas_ism_metadata_enc_create( if ( st_ivas->hEncoderConfig->ivas_format == MASA_ISM_FORMAT ) { nchan_transport = MAX_PARAM_ISM_WAVE; -#ifdef OMASA_BRATE_SW ivas_set_omasa_TC( st_ivas->ism_mode, n_ISms, &st_ivas->nSCE, &st_ivas->nCPE ); -#else - switch ( st_ivas->ism_mode ) - { - case ISM_MASA_MODE_PARAM: - st_ivas->nCPE = 1; - st_ivas->nSCE = 0; - break; -#ifdef OMASA_UPDATES - case ISM_MASA_MODE_MASA_ONE_OBJ: - case ISM_MASA_MODE_PARAM_ONE_OBJ: -#else - case ISM_MASA_MODE_ONE_OBJ: -#endif - st_ivas->nCPE = 1; - st_ivas->nSCE = 1; - break; - case ISM_MASA_MODE_DISC: - st_ivas->nCPE = 1; - st_ivas->nSCE = n_ISms; - break; - case ISM_MODE_NONE: - st_ivas->nSCE = 0; - st_ivas->nCPE = 1; - - break; - default: - break; - } -#endif } else { @@ -818,10 +732,8 @@ ivas_error ivas_ism_metadata_enc_create( #ifdef MASA_AND_OBJECTS st_ivas->hIsmMetaData[ch]->ism_imp = -1; st_ivas->hIsmMetaData[ch]->ism_vad_flag = 1; -#ifdef OMASA_UPDATES st_ivas->hIsmMetaData[ch]->q_azimuth_old = 0.0f; st_ivas->hIsmMetaData[ch]->q_elevation_old = 0.0f; -#endif #endif ivas_ism_reset_metadata( st_ivas->hIsmMetaData[ch] ); @@ -833,11 +745,7 @@ ivas_error ivas_ism_metadata_enc_create( #ifdef MASA_AND_OBJECTS if ( st_ivas->hEncoderConfig->ivas_format == MASA_ISM_FORMAT ) { -#ifdef OMASA_UPDATES if ( st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) -#else - if ( st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ ) -#endif { if ( ( error = ivas_ism_config( st_ivas->hEncoderConfig->ivas_total_brate, nchan_transport, 1, NULL, NULL, NULL, element_brate_tmp, NULL, NULL, 1 ) ) != IVAS_ERR_OK ) { diff --git a/lib_enc/ivas_masa_enc.c b/lib_enc/ivas_masa_enc.c index b588302bf921a942728253b426585279ffe4c8b9..e12251abf7a15aad379aee8b7c79091f47747c13 100644 --- a/lib_enc/ivas_masa_enc.c +++ b/lib_enc/ivas_masa_enc.c @@ -64,12 +64,7 @@ static int16_t encode_lfe_to_total_energy_ratio( MASA_ENCODER_HANDLE hMasa, BSTR #ifdef MASA_AND_OBJECTS static void ivas_encode_masaism_metadata( MASA_ENCODER_HANDLE hMasa, IVAS_QMETADATA_HANDLE hQMetaData, BSTR_ENC_HANDLE hMetaData, ISM_METADATA_HANDLE hIsmMeta[], const int16_t low_bitrate_mode, const int16_t omasa_nbands, const int16_t omasa_nblocks, const int16_t idx_separated_object, const int16_t ism_imp ); -static void reduce_metadata_further( MASA_ENCODER_HANDLE hMasa, IVAS_QMETADATA_HANDLE hqmetadata, const IVAS_FORMAT ivas_format -#ifndef OMASA_UPDATES - , - const ISM_MODE ism_mode -#endif -); +static void reduce_metadata_further( MASA_ENCODER_HANDLE hMasa, IVAS_QMETADATA_HANDLE hqmetadata, const IVAS_FORMAT ivas_format ); #else static void reduce_metadata_further( MASA_ENCODER_HANDLE hMasa, IVAS_QMETADATA_HANDLE hqmetadata, const IVAS_FORMAT ivas_format ); @@ -150,11 +145,7 @@ ivas_error ivas_masa_enc_open( } #ifdef MASA_AND_OBJECTS ism_total_brate = 0; -#ifdef OMASA_UPDATES if ( hEncoderConfig->ivas_format == MASA_ISM_FORMAT && st_ivas->nSCE > 0 && ( st_ivas->ism_mode == ISM_MASA_MODE_DISC || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) ) -#else - if ( hEncoderConfig->ivas_format == MASA_ISM_FORMAT && st_ivas->nSCE > 0 && ( st_ivas->ism_mode == ISM_MASA_MODE_DISC || st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ ) ) -#endif { for ( i = 0; i < st_ivas->nSCE; i++ ) { @@ -320,11 +311,7 @@ ivas_error ivas_masa_encode( #endif { #ifdef MASA_AND_OBJECTS -#ifdef OMASA_UPDATES if ( ( ivas_format == MASA_ISM_FORMAT && ism_mode != ISM_MODE_NONE && ism_mode != ISM_MASA_MODE_MASA_ONE_OBJ ) || ( ivas_format != MASA_ISM_FORMAT ) ) -#else - if ( ( ivas_format == MASA_ISM_FORMAT && ism_mode != ISM_MODE_NONE ) || ( ivas_format != MASA_ISM_FORMAT ) ) -#endif { /* Combine directions */ ivas_masa_combine_directions( hMasa ); @@ -364,27 +351,18 @@ ivas_error ivas_masa_encode( hQMetaData->metadata_max_bits -= NO_BITS_MASA_ISM_NO_OBJ; /* write index of separated object if needed */ -#ifdef OMASA_UPDATES if ( ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ && hMasa->data.nchan_ism > 1 ) -#else - if ( ism_mode == ISM_MASA_MODE_ONE_OBJ && hMasa->data.nchan_ism > 1 ) -#endif { push_next_indice( hMetaData, idx_separated_object, NO_BITS_MASA_ISM_NO_OBJ ); hQMetaData->metadata_max_bits -= NO_BITS_MASA_ISM_NO_OBJ; } /* write ISM importance flag (one per object) */ -#ifdef OMASA_UPDATES if ( ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) -#else - if ( ism_mode == ISM_MASA_MODE_ONE_OBJ ) -#endif { push_next_indice( hMetaData, hIsmMetaData[0]->ism_imp, ISM_METADATA_FLAG_BITS ); hQMetaData->metadata_max_bits -= ISM_METADATA_FLAG_BITS; } -#ifdef OMASA_UPDATES else if ( ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) { push_next_indice( hMetaData, hIsmMetaData[0]->ism_imp, ISM_METADATA_FLAG_BITS ); @@ -397,7 +375,6 @@ ivas_error ivas_masa_encode( hQMetaData->metadata_max_bits -= ISM_METADATA_VAD_FLAG_BITS; } } -#endif else if ( ism_mode == ISM_MASA_MODE_DISC ) { for ( i = 0; i < nchan_ism; i++ ) @@ -455,12 +432,8 @@ ivas_error ivas_masa_encode( if ( hMasa->config.max_metadata_bits < MINIMUM_BIT_BUDGET_NORMAL_META && !hMasa->config.joinedSubframes ) { #ifdef MASA_AND_OBJECTS - reduce_metadata_further( hMasa, hQMetaData, ivas_format -#ifndef OMASA_UPDATES - , - ism_mode -#endif - ); + reduce_metadata_further( hMasa, hQMetaData, ivas_format ); + low_bitrate_mode = ( ivas_total_brate <= 32000 ); #else reduce_metadata_further( hMasa, hQMetaData, ivas_format ); @@ -472,11 +445,7 @@ ivas_error ivas_masa_encode( #ifdef MASA_AND_OBJECTS /* Encode MASA+ISM metadata */ -#ifdef OMASA_UPDATES - if ( ivas_format == MASA_ISM_FORMAT && ( ism_mode == ISM_MASA_MODE_PARAM || ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) ) -#else - if ( ivas_format == MASA_ISM_FORMAT && ( ism_mode == ISM_MASA_MODE_PARAM || ism_mode == ISM_MASA_MODE_ONE_OBJ ) ) -#endif + if ( ivas_format == MASA_ISM_FORMAT && ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) { /* encode MASA/ISM energy ratios */ ivas_encode_masaism_metadata( hMasa, hQMetaData, hMetaData, hIsmMetaData, low_bitrate_mode, hOMasa->nCodingBands, hOMasa->nSubframes, @@ -491,11 +460,7 @@ ivas_error ivas_masa_encode( ivas_qmetadata_enc_encode( hMetaData, hQMetaData ); #ifdef MASA_AND_OBJECTS -#ifdef OMASA_UPDATES - if ( ivas_format == MASA_ISM_FORMAT && ( ism_mode == ISM_MASA_MODE_PARAM || ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) ) -#else - if ( ivas_format == MASA_ISM_FORMAT && ( ism_mode == ISM_MASA_MODE_PARAM || ism_mode == ISM_MASA_MODE_ONE_OBJ ) ) -#endif + if ( ivas_format == MASA_ISM_FORMAT && ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) { /* Modify spatial metadata based on the MASA-to-total energy ratios */ modify_masa_energy_ratios( hQMetaData ); @@ -674,11 +639,7 @@ ivas_error ivas_masa_enc_config( #ifdef MASA_AND_OBJECTS ism_total_brate = 0; -#ifdef OMASA_UPDATES if ( ivas_format == MASA_ISM_FORMAT && st_ivas->nSCE > 0 && ( st_ivas->ism_mode == ISM_MASA_MODE_DISC || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) ) -#else - if ( ivas_format == MASA_ISM_FORMAT && st_ivas->nSCE > 0 && ( st_ivas->ism_mode == ISM_MASA_MODE_DISC || st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ ) ) -#endif { for ( i = 0; i < st_ivas->nSCE; i++ ) { @@ -731,18 +692,7 @@ ivas_error ivas_masa_enc_config( #ifdef MASA_AND_OBJECTS if ( ivas_format == MASA_ISM_FORMAT ) { -#ifdef OMASA_UPDATES - if ( st_ivas->hCPE[0]->element_brate == IVAS_48k && st_ivas->ism_mode == ISM_MASA_MODE_PARAM ) - { - ivas_masa_set_coding_config( &( hMasa->config ), hMasa->data.band_mapping, IVAS_32k, st_ivas->nchan_transport, MC_MODE_NONE ); - } - else - { -#endif - ivas_masa_set_coding_config( &( hMasa->config ), hMasa->data.band_mapping, st_ivas->hCPE[0]->element_brate, st_ivas->nchan_transport, MC_MODE_NONE ); -#ifdef OMASA_UPDATES - } -#endif + ivas_masa_set_coding_config( &( hMasa->config ), hMasa->data.band_mapping, st_ivas->hCPE[0]->element_brate, st_ivas->nchan_transport, MC_MODE_NONE ); } else { @@ -843,11 +793,7 @@ ivas_error ivas_masa_enc_config( } #ifdef MASA_AND_OBJECTS -#ifdef OMASA_UPDATES if ( ivas_format == MASA_ISM_FORMAT && ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC ) ) -#else - if ( ivas_format == MASA_ISM_FORMAT && ( st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC ) ) -#endif { if ( st_ivas->hCPE[0]->element_mode == IVAS_CPE_DFT ) { @@ -1528,14 +1474,7 @@ static void compensate_energy_ratios( static void reduce_metadata_further( MASA_ENCODER_HANDLE hMasa, IVAS_QMETADATA_HANDLE hqmetadata, - const IVAS_FORMAT ivas_format -#ifdef MASA_AND_OBJECTS -#ifndef OMASA_UPDATES - , - const ISM_MODE ism_mode -#endif -#endif -) + const IVAS_FORMAT ivas_format ) { int16_t sf; int16_t band; @@ -1559,11 +1498,7 @@ static void reduce_metadata_further( /* Get energy for the input data in 4-subframe, 5-band format */ totalEnergySum = 0.0f; #ifdef MASA_AND_OBJECTS -#ifdef OMASA_UPDATES if ( ivas_format == MASA_FORMAT || ivas_format == MASA_ISM_FORMAT ) /* Energy data is in 4-subframe, 24-band format */ -#else - if ( ivas_format == MASA_FORMAT || ( ivas_format == MASA_ISM_FORMAT && ism_mode != ISM_MODE_NONE ) ) /* Energy data is in 4-subframe, 24-band format */ -#endif #else if ( ivas_format == MASA_FORMAT ) /* Energy data is in 4-subframe, 24-band format */ #endif @@ -1953,11 +1888,7 @@ void ivas_masa_enc_reconfigure( #ifdef MASA_AND_OBJECTS ism_total_brate = 0; -#ifdef OMASA_UPDATES if ( st_ivas->hEncoderConfig->ivas_format == MASA_ISM_FORMAT && st_ivas->nSCE > 0 && ( st_ivas->ism_mode == ISM_MASA_MODE_DISC || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) ) -#else - if ( st_ivas->hEncoderConfig->ivas_format == MASA_ISM_FORMAT && st_ivas->nSCE > 0 && ( st_ivas->ism_mode == ISM_MASA_MODE_DISC || st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ ) ) -#endif { for ( sce_id = 0; sce_id < st_ivas->nSCE; sce_id++ ) { @@ -3633,7 +3564,6 @@ static void ivas_encode_masaism_metadata( /* quantize directions */ for ( obj = 0; obj < hMasa->data.nchan_ism; obj++ ) { -#ifdef OMASA_UPDATES if ( bits_ism[obj] < 8 ) { /* check is same as previous */ @@ -3658,11 +3588,6 @@ static void ivas_encode_masaism_metadata( hIsmMeta[obj]->q_elevation_old = hIsmMeta[obj]->elevation; hIsmMeta[obj]->q_azimuth_old = hIsmMeta[obj]->azimuth; } - -#else - idx_sph = quantize_direction( hIsmMeta[obj]->elevation, hIsmMeta[obj]->azimuth, bits_ism[obj], &theta_q, &phi_q, &index_theta, &index_phi, MC_LS_SETUP_INVALID ); - push_next_indice( hMetaData, idx_sph, bits_ism[obj] ); -#endif } return; diff --git a/lib_enc/ivas_omasa_enc.c b/lib_enc/ivas_omasa_enc.c index 677558db09b5f03b96dbc751045364a6cd57ddd0..8c6cd7038c329f41d4cec20ff34e29743d3761d6 100644 --- a/lib_enc/ivas_omasa_enc.c +++ b/lib_enc/ivas_omasa_enc.c @@ -72,9 +72,6 @@ ivas_error ivas_omasa_enc_open( ) { int16_t i, j; -#ifndef FIX_OMASA_DELAY_COMP - float tmp_f; -#endif OMASA_ENC_HANDLE hOMasa; int16_t numAnalysisChannels; int16_t input_frame; @@ -91,31 +88,6 @@ ivas_error ivas_omasa_enc_open( numAnalysisChannels = st_ivas->hEncoderConfig->nchan_ism; -#ifndef FIX_OMASA_DELAY_COMP - /* initialize delay compensation */ - hOMasa->num_samples_delay_comp = NS2SA( st_ivas->hEncoderConfig->input_Fs, DELAY_DIRAC_ENC_CMP_NS ); - tmp_f = ( (float) hOMasa->num_samples_delay_comp ) / (float) ( NS2SA( st_ivas->hEncoderConfig->input_Fs, DIRAC_SLOT_NS ) ); - hOMasa->num_slots_delay_comp = (int16_t) ( tmp_f ); - - if ( tmp_f > hOMasa->num_slots_delay_comp ) - { - hOMasa->num_slots_delay_comp++; - hOMasa->offset_comp = -hOMasa->num_samples_delay_comp; - hOMasa->num_samples_delay_comp = hOMasa->num_slots_delay_comp * NS2SA( st_ivas->hEncoderConfig->input_Fs, DIRAC_SLOT_NS ); - hOMasa->offset_comp += hOMasa->num_samples_delay_comp; - } - else - { - hOMasa->offset_comp = 0; - } - - for ( i = 0; i < numAnalysisChannels; i++ ) - { - hOMasa->delay_buffer[i] = (float *) malloc( NS2SA( st_ivas->hEncoderConfig->input_Fs, DELAY_DIRAC_ENC_CMP_NS + DIRAC_SLOT_NS ) * sizeof( float ) ); /* Todo Nokia: Return errors if alloc fails */ - set_zero( hOMasa->delay_buffer[i], NS2SA( st_ivas->hEncoderConfig->input_Fs, DELAY_DIRAC_ENC_CMP_NS + DIRAC_SLOT_NS ) ); - } -#endif - /* open/initialize CLDFB */ hOMasa->num_Cldfb_instances = numAnalysisChannels; for ( i = 0; i < hOMasa->num_Cldfb_instances; i++ ) @@ -178,54 +150,46 @@ ivas_error ivas_omasa_enc_open( *--------------------------------------------------------------------------*/ void ivas_omasa_enc_close( -#ifdef FIX_OMASA_DELAY_COMP - OMASA_ENC_HANDLE hOMasa /* i/o: encoder OMASA handle */ -#else - OMASA_ENC_HANDLE hOMasa, /* i/o: encoder OMASA handle */ - const int16_t nchan_ism /* i : number of objects */ -#endif + OMASA_ENC_HANDLE *hOMasa /* i/o: encoder OMASA handle */ ) { int16_t i, j; -#ifndef FIX_OMASA_DELAY_COMP - for ( i = 0; i < nchan_ism; i++ ) + if ( hOMasa == NULL || *hOMasa == NULL ) { - free( hOMasa->delay_buffer[i] ); - hOMasa->delay_buffer[i] = NULL; + return; } -#endif - for ( i = 0; i < hOMasa->num_Cldfb_instances; i++ ) + for ( i = 0; i < ( *hOMasa )->num_Cldfb_instances; i++ ) { - deleteCldfb( &( hOMasa->cldfbAnaEnc[i] ) ); + deleteCldfb( &( ( *hOMasa )->cldfbAnaEnc[i] ) ); } for ( i = 0; i < DIRAC_NUM_DIMS; i++ ) { for ( j = 0; j < MAX_PARAM_SPATIAL_SUBFRAMES; j++ ) { - free( hOMasa->direction_vector_m[i][j] ); - hOMasa->direction_vector_m[i][j] = NULL; + free( ( *hOMasa )->direction_vector_m[i][j] ); + ( *hOMasa )->direction_vector_m[i][j] = NULL; } for ( j = 0; j < DIRAC_NO_COL_AVG_DIFF; j++ ) { - free( hOMasa->buffer_intensity_real[i][j] ); - hOMasa->buffer_intensity_real[i][j] = NULL; + free( ( *hOMasa )->buffer_intensity_real[i][j] ); + ( *hOMasa )->buffer_intensity_real[i][j] = NULL; } - free( hOMasa->direction_vector_m[i] ); - hOMasa->direction_vector_m[i] = NULL; + free( ( *hOMasa )->direction_vector_m[i] ); + ( *hOMasa )->direction_vector_m[i] = NULL; } - free( hOMasa ); + free( *hOMasa ); + ( *hOMasa ) = NULL; return; } -#ifdef OMASA_BRATE_SW /*--------------------------------------------------------------------------* * ivas_omasa_enc_config() * @@ -307,21 +271,13 @@ ivas_error ivas_omasa_enc_config( } else if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC && st_ivas->hOMasa != NULL ) { -#ifdef FIX_OMASA_DELAY_COMP - ivas_omasa_enc_close( st_ivas->hOMasa ); -#else - ivas_omasa_enc_close( st_ivas->hOMasa, st_ivas->hEncoderConfig->nchan_ism ); -#endif + ivas_omasa_enc_close( &( st_ivas->hOMasa ) ); st_ivas->hOMasa = NULL; } st_ivas->hCPE[0]->element_brate = ivas_total_brate - ism_total_brate; -#ifdef OMASA_UPDATES - if ( ivas_total_brate - ism_total_brate >= MIN_BRATE_MDCT_STEREO && ( st_ivas->ism_mode != ISM_MASA_MODE_PARAM ) ) -#else if ( ivas_total_brate - ism_total_brate >= MIN_BRATE_MDCT_STEREO ) -#endif { hEncoderConfig->element_mode_init = IVAS_CPE_MDCT; } @@ -345,7 +301,6 @@ ivas_error ivas_omasa_enc_config( return IVAS_ERR_OK; } -#endif /*--------------------------------------------------------------------------* @@ -357,19 +312,14 @@ ivas_error ivas_omasa_enc_config( void ivas_omasa_set_config( OMASA_ENC_HANDLE hOMasa, /* i/o: OMASA encoder handle */ MASA_ENCODER_HANDLE hMasa, /* i : MASA encoder handle */ - const int32_t input_Fs /* i : Input sample rate */ - , - const ISM_MODE ismMode /* i : ISM mode */ + const int32_t input_Fs, /* i : Input sample rate */ + const ISM_MODE ism_mode /* i : ISM mode */ ) { uint8_t i, maxBin; /* Determine the number of bands */ -#ifdef OMASA_UPDATES - if ( ismMode == ISM_MODE_NONE || ismMode == ISM_MASA_MODE_MASA_ONE_OBJ ) -#else - if ( ismMode == ISM_MODE_NONE ) -#endif + if ( ism_mode == ISM_MODE_NONE || ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) { /* use full resolution for the ISM+MASA merge and reduce later */ hOMasa->nbands = 24; @@ -441,140 +391,8 @@ void ivas_omasa_enc( int16_t i, j; float data_out_f[MASA_MAX_TRANSPORT_CHANNELS][L_FRAME48k]; - -#ifdef OMASA_UPDATES /* Determine separated object (when applicable) */ if ( ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) -#else - /* Analysis */ - if ( ism_mode == ISM_MODE_NONE ) - { -#ifdef OMASA_DIFFUSE_ISM_MERGE - OMASA_SPATIAL_META OMasaMeta; /* working memory for the ISM-object MASA-parameters */ - OMASA_SPATIAL_META_HANDLE hOMasaMeta; - uint8_t n_bands_orig, n_subframes_orig; - uint8_t numCodingBands_orig, joinedSubframes_orig; -#else - float elevation_m_values[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - float azimuth_m_values[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - float energyRatio[MASA_FREQUENCY_BANDS]; - float spreadCoherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - float surroundingCoherence[MASA_FREQUENCY_BANDS]; - int16_t nBands, nBlocks; - uint8_t fixedDistance = 0; - - nBands = hOMasa->nbands; - nBlocks = hOMasa->nSubframes; -#endif - -#ifdef OMASA_DIFFUSE_ISM_MERGE - hOMasaMeta = &OMasaMeta; - hOMasaMeta->num_dirs = 1; /* TODO: hard-coding for now */ - - /* merge MASA directions before adding ISM to the mixture */ - if ( hMasa->config.numberOfDirections == 2 ) - { - n_bands_orig = hMasa->config.numCodingBands; - hMasa->config.numCodingBands = MASA_FREQUENCY_BANDS; - - ivas_masa_combine_directions( hMasa ); - - hMasa->config.numCodingBands = (int8_t) n_bands_orig; - } - - /* force computation into high resolution */ - n_bands_orig = hOMasa->nbands; - n_subframes_orig = hOMasa->nSubframes; - - hOMasa->nbands = MASA_FREQUENCY_BANDS; - hOMasa->nSubframes = MAX_PARAM_SPATIAL_SUBFRAMES; - - /* Estimate MASA parameters from the objects */ - /* NB: only first direction is populated */ - /* NB2: in energy_ratios and surround_coherence only first sub-frame contains valid data */ - ivas_omasa_param_est_enc( hOMasa, hMasa, hIsmMeta, data_in_f, hOMasaMeta->directional_meta[0].elevation, hOMasaMeta->directional_meta[0].azimuth, hOMasaMeta->directional_meta[0].energy_ratio[0], hOMasaMeta->directional_meta[0].spread_coherence, hOMasaMeta->common_meta.surround_coherence[0], - hOMasaMeta->common_meta.diffuse_to_total_ratio[0], input_frame, nchan_ism ); - - /* copy energy_ratios and surrCoh from first sub-frame to the remaining ones */ - for ( i = 1; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) - { - mvr2r( hOMasaMeta->directional_meta[0].energy_ratio[0], hOMasaMeta->directional_meta[0].energy_ratio[i], MASA_FREQUENCY_BANDS ); - mvr2r( hOMasaMeta->common_meta.surround_coherence[0], hOMasaMeta->common_meta.surround_coherence[i], MASA_FREQUENCY_BANDS ); - mvr2r( hOMasaMeta->common_meta.diffuse_to_total_ratio[0], hOMasaMeta->common_meta.diffuse_to_total_ratio[i], MASA_FREQUENCY_BANDS ); - } -#else - /* Estimate MASA parameters from the objects */ - ivas_omasa_param_est_enc( hOMasa, hMasa, hIsmMeta, data_in_f, elevation_m_values, azimuth_m_values, energyRatio, spreadCoherence, surroundingCoherence, input_frame, nchan_ism ); -#endif - -#ifdef OMASA_DIFFUSE_ISM_MERGE - /* restore resolution parameters */ - hOMasa->nbands = n_bands_orig; - hOMasa->nSubframes = n_subframes_orig; - - /* perform MASA+ISM merge in full resolution */ - numCodingBands_orig = hMasa->config.numCodingBands; - joinedSubframes_orig = hMasa->config.joinedSubframes; - - hMasa->config.numCodingBands = MASA_FREQUENCY_BANDS; - hMasa->config.joinedSubframes = 0; - - ivas_merge_masa_metadata( hMasa, hOMasaMeta ); /* => merge result in hMasa->masaMetadata */ - - hMasa->config.numCodingBands = numCodingBands_orig; - hMasa->config.joinedSubframes = joinedSubframes_orig; -#else - - /* Set analyzed values to the QMeta struct */ - for ( i = 0; i < nBands; i++ ) - { - for ( j = 0; j < nBlocks; j++ ) - { - hQMeta->q_direction[0].band_data[i].azimuth[j] = azimuth_m_values[j][i]; - hQMeta->q_direction[0].band_data[i].elevation[j] = elevation_m_values[j][i]; - hQMeta->q_direction[0].band_data[i].energy_ratio[j] = energyRatio[i]; /* Only one value is transmitted for all subframes */ - hQMeta->q_direction[0].band_data[i].distance[j] = fixedDistance; - - if ( hQMeta->surcoh_band_data != NULL ) - { - hQMeta->q_direction[0].coherence_band_data[i].spread_coherence[j] = (uint8_t) roundf( spreadCoherence[j][i] * UINT8_MAX ); - hQMeta->surcoh_band_data[i].surround_coherence[j] = (uint8_t) roundf( surroundingCoherence[i] * UINT8_MAX ); - } - } - } - - /* At lower sampling rates, set zeros for higher bands that were not analyzed */ - if ( nBands < hOMasa->nCodingBands ) - { - for ( i = nBands; i < hOMasa->nCodingBands; i++ ) - { - for ( j = 0; j < nBlocks; j++ ) - { - hQMeta->q_direction[0].band_data[i].azimuth[j] = 0.0f; - hQMeta->q_direction[0].band_data[i].elevation[j] = 0.0f; - hQMeta->q_direction[0].band_data[i].energy_ratio[j] = 0.0f; - hQMeta->q_direction[0].band_data[i].distance[j] = 0; - - if ( hQMeta->surcoh_band_data != NULL ) - { - hQMeta->q_direction[0].coherence_band_data[i].spread_coherence[j] = 0; - hQMeta->surcoh_band_data[i].surround_coherence[j] = 0; - } - } - } - } -#endif - } - else if ( ism_mode == ISM_MASA_MODE_PARAM ) - { -#ifdef REDUCE_OMASA_META_BITS - *idx_separated_object = -1; -#endif - /* Estimate energies and ratios */ - ivas_omasa_energy_and_ratio_est( hOMasa, hMasa, data_in_f, input_frame, nchan_ism ); - } - else -#endif { float broadband_energy[MAX_NUM_OBJECTS + MASA_MAX_TRANSPORT_CHANNELS]; int16_t loudest_object; @@ -689,7 +507,6 @@ void ivas_omasa_enc( { set_zero( data_in_f[selected_object], input_frame ); } -#ifdef OMASA_UPDATES } /* Analysis */ @@ -751,26 +568,18 @@ void ivas_omasa_enc( hMasa->config.numCodingBands = numCodingBands_orig; hMasa->config.joinedSubframes = joinedSubframes_orig; } - else if ( ism_mode == ISM_MASA_MODE_PARAM || ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) + else if ( ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) { - if ( ism_mode == ISM_MASA_MODE_PARAM ) - { - *idx_separated_object = -1; - } -#endif - /* Estimate energies and ratios */ ivas_omasa_energy_and_ratio_est( hOMasa, hMasa, data_in_f, input_frame, nchan_ism ); } -#ifdef OMASA_UPDATES /* Move the ISM metadata to the first entry for encoding in the MASA_ONE_OBJ mode */ if ( ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) { hIsmMeta[0]->azimuth = hIsmMeta[*idx_separated_object]->azimuth; hIsmMeta[0]->elevation = hIsmMeta[*idx_separated_object]->elevation; } -#endif /* Downmix */ ivas_omasa_dmx( data_in_f, data_out_f, input_frame, nchan_transport, nchan_ism, hIsmMeta, hOMasa->prev_object_dm_gains, hOMasa->interpolator ); @@ -862,27 +671,12 @@ void ivas_set_surplus_brate_enc( #endif ) { -#ifdef OMASA_UPDATES if ( st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) { st_ivas->hCPE[0]->brate_surplus = st_ivas->hSCE[0]->element_brate - ivas_interformat_brate( ISM_MASA_MODE_PARAM_ONE_OBJ, 1, st_ivas->hSCE[0]->element_brate, st_ivas->hIsmMetaData[0]->ism_imp, 0 ); -#else - if ( st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ ) - { - st_ivas->hCPE[0]->brate_surplus = st_ivas->hSCE[0]->element_brate - ivas_interformat_brate( ISM_MASA_MODE_ONE_OBJ, 1, st_ivas->hSCE[0]->element_brate, st_ivas->hIsmMetaData[0]->ism_imp -#ifdef FIX_4OBJ_128 - , - 0 -#endif - ); -#endif /* note: ISM st->total_brate is iset in ivas_sce_enc() */ } -#ifdef OMASA_UPDATES else if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC || st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) -#else - else if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC ) -#endif { /* it is already set in ivas_ism_enc() */ } @@ -896,12 +690,8 @@ void ivas_set_surplus_brate_enc( { int16_t input_frame = (int16_t) ( st_ivas->hEncoderConfig->input_Fs / FRAMES_PER_SEC ); float tmpF = 0; -#ifdef OMAOMASA_UPDATES - if ( st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) -#else - if ( 1 ) // st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ ) -#endif + if ( st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) { tmpF += st_ivas->hSCE[0]->hCoreCoder[0]->total_brate + (float) ( nb_bits_metadata[1] * 50 ); } @@ -969,14 +759,6 @@ static void ivas_omasa_param_est_enc( set_zero( renormalization_factor_diff, hOMasa->nbands ); set_zero( diffuseness_m, hOMasa->nbands ); -#ifndef FIX_OMASA_DELAY_COMP - /* Copy current frame to memory for delay compensation */ - for ( i = 0; i < nchan_ism; i++ ) - { - mvr2r( &data_f[i][0], &( hOMasa->delay_buffer[i][hOMasa->num_samples_delay_comp - hOMasa->offset_comp] ), hOMasa->offset_comp ); - } -#endif - /* Compute ISM to FOA matrices */ for ( i = 0; i < nchan_ism; i++ ) { @@ -1005,18 +787,7 @@ static void ivas_omasa_param_est_enc( { for ( i = 0; i < nchan_ism; i++ ) { -#ifdef FIX_OMASA_DELAY_COMP cldfbAnalysis_ts( &( data_f[i][l_ts * ts] ), Chnl_RealBuffer[i], Chnl_ImagBuffer[i], l_ts, hOMasa->cldfbAnaEnc[i] ); -#else - if ( ts < hOMasa->num_slots_delay_comp ) - { - cldfbAnalysis_ts( &( hOMasa->delay_buffer[i][l_ts * ts] ), Chnl_RealBuffer[i], Chnl_ImagBuffer[i], l_ts, hOMasa->cldfbAnaEnc[i] ); - } - else - { - cldfbAnalysis_ts( &( data_f[i][hOMasa->offset_comp + l_ts * ( ts - hOMasa->num_slots_delay_comp )] ), Chnl_RealBuffer[i], Chnl_ImagBuffer[i], l_ts, hOMasa->cldfbAnaEnc[i] ); - } -#endif } /* Compute energy */ @@ -1134,14 +905,6 @@ static void ivas_omasa_param_est_enc( energyRatio[band_m_idx] = 1.0f - diffuseness_m[band_m_idx]; } -#ifndef FIX_OMASA_DELAY_COMP - /* Update memory */ - for ( i = 0; i < nchan_ism; i++ ) - { - mvr2r( &data_f[i][input_frame - hOMasa->num_samples_delay_comp + hOMasa->offset_comp], &( hOMasa->delay_buffer[i][0] ), ( hOMasa->num_samples_delay_comp - hOMasa->offset_comp ) ); - } -#endif - return; } @@ -1167,15 +930,6 @@ static void ivas_omasa_energy_and_ratio_est( num_freq_bands = hOMasa->nbands; l_ts = input_frame / CLDFB_NO_COL_MAX; - -#ifndef FIX_OMASA_DELAY_COMP - /* Copy current frame to memory for delay compensation */ - for ( i = 0; i < nchan_inp; i++ ) - { - mvr2r( &data_f[i][0], &( hOMasa->delay_buffer[i][hOMasa->num_samples_delay_comp - hOMasa->offset_comp] ), hOMasa->offset_comp ); - } -#endif - /* do processing over all CLDFB time slots */ for ( block_m_idx = 0; block_m_idx < hOMasa->nSubframes; block_m_idx++ ) { @@ -1194,18 +948,7 @@ static void ivas_omasa_energy_and_ratio_est( { for ( i = 0; i < nchan_inp; i++ ) { -#ifdef FIX_OMASA_DELAY_COMP cldfbAnalysis_ts( &( data_f[i][l_ts * ts] ), Chnl_RealBuffer[i], Chnl_ImagBuffer[i], l_ts, hOMasa->cldfbAnaEnc[i] ); -#else - if ( ts < hOMasa->num_slots_delay_comp ) - { - cldfbAnalysis_ts( &( hOMasa->delay_buffer[i][l_ts * ts] ), Chnl_RealBuffer[i], Chnl_ImagBuffer[i], l_ts, hOMasa->cldfbAnaEnc[i] ); - } - else - { - cldfbAnalysis_ts( &( data_f[i][hOMasa->offset_comp + l_ts * ( ts - hOMasa->num_slots_delay_comp )] ), Chnl_RealBuffer[i], Chnl_ImagBuffer[i], l_ts, hOMasa->cldfbAnaEnc[i] ); - } -#endif } /* Compute energy */ @@ -1247,14 +990,6 @@ static void ivas_omasa_energy_and_ratio_est( hMasa->data.nchan_ism = nchan_inp; } -#ifndef FIX_OMASA_DELAY_COMP - /* Update memory */ - for ( i = 0; i < nchan_inp; i++ ) - { - mvr2r( &data_f[i][input_frame - hOMasa->num_samples_delay_comp + hOMasa->offset_comp], &( hOMasa->delay_buffer[i][0] ), ( hOMasa->num_samples_delay_comp - hOMasa->offset_comp ) ); - } -#endif - return; } diff --git a/lib_enc/ivas_sce_enc.c b/lib_enc/ivas_sce_enc.c index 1a42cf635f5e18e9409c43c272aff78383b69076..e236ecf5bac05087ae29b6324cbc316f94d316cc 100644 --- a/lib_enc/ivas_sce_enc.c +++ b/lib_enc/ivas_sce_enc.c @@ -144,11 +144,7 @@ ivas_error ivas_sce_enc( if ( st_ivas->hQMetaData != NULL && st_ivas->hSpar == NULL ) { #ifdef MASA_AND_OBJECTS -#ifdef OMASA_UPDATES if ( ( ( st_ivas->mc_mode == MC_MODE_MCMASA ) && ( st_ivas->hEncoderConfig->ivas_total_brate >= MCMASA_SEPARATE_BRATE ) ) || ( st_ivas->ism_mode >= ISM_MASA_MODE_MASA_ONE_OBJ ) ) -#else - if ( ( ( st_ivas->mc_mode == MC_MODE_MCMASA ) && ( st_ivas->hEncoderConfig->ivas_total_brate >= MCMASA_SEPARATE_BRATE ) ) || ( st_ivas->ism_mode >= ISM_MASA_MODE_ONE_OBJ ) ) -#endif #else if ( st_ivas->mc_mode == MC_MODE_MCMASA && st_ivas->hEncoderConfig->ivas_total_brate >= MCMASA_SEPARATE_BRATE ) #endif @@ -220,27 +216,12 @@ ivas_error ivas_sce_enc( * Combined format coding: get the ISM importance and the bit-rate *----------------------------------------------------------------*/ -#ifdef OMASA_UPDATES if ( ivas_format == MASA_ISM_FORMAT && st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) { set_ism_importance_interformat( hSCE->element_brate, 1, st_ivas->hIsmMetaData, st_ivas->hSCE, st_ivas->hMasa->data.lp_noise_CPE, &st_ivas->hIsmMetaData[0]->ism_imp ); st->total_brate = ivas_interformat_brate( ISM_MASA_MODE_PARAM_ONE_OBJ, 1, hSCE->element_brate, st_ivas->hIsmMetaData[0]->ism_imp, 0 ) - nb_bits_metadata * FRAMES_PER_SEC; } -#else - if ( ivas_format == MASA_ISM_FORMAT && st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ ) - { - set_ism_importance_interformat( hSCE->element_brate, 1, st_ivas->hIsmMetaData, st_ivas->hSCE, st_ivas->hMasa->data.lp_noise_CPE, &st_ivas->hIsmMetaData[0]->ism_imp ); - - st->total_brate = ivas_interformat_brate( ISM_MASA_MODE_ONE_OBJ, 1, hSCE->element_brate, st_ivas->hIsmMetaData[0]->ism_imp -#ifdef FIX_4OBJ_128 - , - 0 -#endif - ) - - nb_bits_metadata * FRAMES_PER_SEC; - } -#endif #endif /*----------------------------------------------------------------* @@ -262,11 +243,7 @@ ivas_error ivas_sce_enc( st->flag_ACELP16k = set_ACELP_flag( IVAS_SCE, hSCE->element_brate, st->core_brate, 0, 0, -1, -1 ); } #ifdef MASA_AND_OBJECTS -#ifdef OMASA_UPDATES else if ( st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ && st->low_rate_mode ) -#else - else if ( st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ && st->low_rate_mode ) -#endif { st->flag_ACELP16k = 0; } @@ -376,11 +353,7 @@ ivas_error create_sce_enc( copy_encoder_config( st_ivas, st, 1 ); #ifdef MASA_AND_OBJECTS -#ifdef OMASA_UPDATES if ( st_ivas->hEncoderConfig->ivas_format == MASA_ISM_FORMAT && ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC ) ) -#else - if ( st_ivas->hEncoderConfig->ivas_format == MASA_ISM_FORMAT && ( st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC ) ) -#endif { st->element_mode = IVAS_SCE; } diff --git a/lib_enc/ivas_stat_enc.h b/lib_enc/ivas_stat_enc.h index 0c7a3bc37566134be80889e84889932e4b3c40d0..80dddaf9ddb806c50154925c061a09ea46007b90 100644 --- a/lib_enc/ivas_stat_enc.h +++ b/lib_enc/ivas_stat_enc.h @@ -852,14 +852,6 @@ typedef struct ivas_omasa_enc_data_structure uint8_t nCodingBands; uint8_t nSubframes; -#ifndef FIX_OMASA_DELAY_COMP - /* delay compensation */ - float *delay_buffer[MAX_NUM_OBJECTS]; /* Delay buffer for parameter estimation */ - int16_t num_samples_delay_comp; - int16_t num_slots_delay_comp; - int16_t offset_comp; -#endif - /* CLDFB analysis */ int16_t num_Cldfb_instances; HANDLE_CLDFB_FILTER_BANK cldfbAnaEnc[MAX_NUM_OBJECTS]; diff --git a/lib_enc/ivas_stereo_classifier.c b/lib_enc/ivas_stereo_classifier.c index 534dc2189ca5804d9399f8ce332b07b88a9f77a1..59b7c0a39987d545204935f771db84844941f032 100644 --- a/lib_enc/ivas_stereo_classifier.c +++ b/lib_enc/ivas_stereo_classifier.c @@ -118,7 +118,8 @@ int16_t select_stereo_mode( { stereo_switching_flag = 0; } -#ifdef OMASA_UPDATES + +#ifdef MASA_AND_OBJECTS if ( hCPE->element_brate >= MIN_BRATE_MDCT_STEREO && !( hCPE->element_brate == IVAS_48k && ivas_total_brate == IVAS_32k ) ) /* the second condition for PARAM mode OMASA */ #else if ( hCPE->element_brate >= MIN_BRATE_MDCT_STEREO ) diff --git a/lib_enc/ivas_stereo_td_analysis.c b/lib_enc/ivas_stereo_td_analysis.c index ee07ae2f52999747858ef1620ac240d3ff8c822d..8f86f25986666fc103cc62abed98cce81ce7375f 100644 --- a/lib_enc/ivas_stereo_td_analysis.c +++ b/lib_enc/ivas_stereo_td_analysis.c @@ -111,7 +111,7 @@ static float Comp_diff_lt_corr( CPE_ENC_HANDLE hCPE, const int16_t IsSideMono, c *-------------------------------------------------------------------*/ int16_t stereo_tdm_ener_analysis( -#ifdef OMASA_TUNING_TD_STEREO +#ifdef MASA_AND_OBJECTS const int16_t ivas_format, /* i : IVAS format */ #endif CPE_ENC_HANDLE hCPE, /* i : CPE structure */ @@ -198,7 +198,7 @@ int16_t stereo_tdm_ener_analysis( * of L and R needed to create new mono/side signals *----------------------------------------------------------------*/ -#ifdef OMASA_TUNING_TD_STEREO +#ifdef MASA_AND_OBJECTS if ( ivas_format == MASA_ISM_FORMAT ) { diff --git a/lib_enc/ivas_stereo_td_enc.c b/lib_enc/ivas_stereo_td_enc.c index d8c8086562c854395b63457f63560443d9f0fdc2..0626f3d859dde325a76880e26faed9b21708d4bf 100644 --- a/lib_enc/ivas_stereo_td_enc.c +++ b/lib_enc/ivas_stereo_td_enc.c @@ -302,7 +302,7 @@ ivas_error stereo_set_tdm( *-------------------------------------------------------------------*/ void tdm_configure_enc( -#ifdef OMASA_TUNING_TD_STEREO +#ifdef MASA_AND_OBJECTS const int16_t ivas_format, /* i : IVAS format */ #endif CPE_ENC_HANDLE hCPE, /* i : CPE encoder structure */ @@ -431,11 +431,7 @@ void tdm_configure_enc( } hStereoTD->tdm_lp_reuse_flag = 1; -#ifdef OMASA_TUNING_TD_STEREO if ( hCPE->element_brate - nb_bits_metadata * FRAMES_PER_SEC + hCPE->brate_surplus < 11000 ) -#else - if ( hCPE->element_brate - nb_bits_metadata * FRAMES_PER_SEC + hCPE->brate_surplus < 12000 ) -#endif { sts[1]->coder_type = INACTIVE; } @@ -484,14 +480,10 @@ void tdm_configure_enc( *----------------------------------------------------------------*/ #ifdef MASA_AND_OBJECTS - tdm_bit_alloc( -#ifdef OMASA_TUNING_TD_STEREO - ivas_format, -#endif - hCPE->element_brate - nb_bits_metadata * FRAMES_PER_SEC + hCPE->brate_surplus, - hStereoTD->tdm_lp_reuse_flag, &( sts[0]->total_brate ), &( sts[1]->total_brate ), - &( hStereoTD->tdm_low_rate_mode ), sts[1]->coder_type, tdm_ratio_bit_alloc_idx, hStereoTD->tdm_Pitch_reuse_flag, - sts[0]->bwidth, sts[1]->bwidth, sts[0]->flag_ACELP16k, hStereoTD->tdm_LRTD_flag, mod_ct, hStereoTD->tdm_inst_ratio_idx ); + tdm_bit_alloc( ivas_format, hCPE->element_brate - nb_bits_metadata * FRAMES_PER_SEC + hCPE->brate_surplus, + hStereoTD->tdm_lp_reuse_flag, &( sts[0]->total_brate ), &( sts[1]->total_brate ), + &( hStereoTD->tdm_low_rate_mode ), sts[1]->coder_type, tdm_ratio_bit_alloc_idx, hStereoTD->tdm_Pitch_reuse_flag, + sts[0]->bwidth, sts[1]->bwidth, sts[0]->flag_ACELP16k, hStereoTD->tdm_LRTD_flag, mod_ct, hStereoTD->tdm_inst_ratio_idx ); #else tdm_bit_alloc( hCPE->element_brate - nb_bits_metadata * FRAMES_PER_SEC, hStereoTD->tdm_lp_reuse_flag, &( sts[0]->total_brate ), &( sts[1]->total_brate ), &( hStereoTD->tdm_low_rate_mode ), sts[1]->coder_type, tdm_ratio_bit_alloc_idx, hStereoTD->tdm_Pitch_reuse_flag, sts[0]->bwidth, sts[1]->bwidth, sts[0]->flag_ACELP16k, hStereoTD->tdm_LRTD_flag, mod_ct, hStereoTD->tdm_inst_ratio_idx ); #endif diff --git a/lib_rend/ivas_dirac_dec_binaural_functions.c b/lib_rend/ivas_dirac_dec_binaural_functions.c index 1525c4a5088af370d14e1cfb714dee3cea49d5e7..e6f645197a3a2ebb0e4bedae254d8887bf7c7a0e 100644 --- a/lib_rend/ivas_dirac_dec_binaural_functions.c +++ b/lib_rend/ivas_dirac_dec_binaural_functions.c @@ -448,7 +448,6 @@ static void ivas_dirac_dec_binaural_internal( /* The input channel number at this processing function (not nchan_transport) */ numInChannels = BINAURAL_CHANNELS; #ifdef MASA_AND_OBJECTS -#ifdef OMASA_UPDATES if ( st_ivas->hOutSetup.separateChannelEnabled || ( st_ivas->ivas_format == MASA_ISM_FORMAT && ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) ) ) { numInChannels++; @@ -457,19 +456,6 @@ static void ivas_dirac_dec_binaural_internal( { numInChannels += (uint8_t) st_ivas->nchan_ism; } -#else - if ( st_ivas->hOutSetup.separateChannelEnabled || ( st_ivas->ivas_format == MASA_ISM_FORMAT && ( st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC ) ) ) - { - if ( st_ivas->ivas_format == MASA_ISM_FORMAT && st_ivas->ism_mode == ISM_MASA_MODE_DISC ) - { - numInChannels += (uint8_t) st_ivas->nchan_ism; - } - else - { - numInChannels++; - } - } -#endif #else if ( st_ivas->hOutSetup.separateChannelEnabled ) { @@ -594,18 +580,9 @@ static void ivas_dirac_dec_binaural_internal( } #ifdef MASA_AND_OBJECTS -#ifdef OMASA_UPDATES if ( st_ivas->ivas_format == MASA_ISM_FORMAT && nchan_transport == 2 && st_ivas->ism_mode != ISM_MASA_MODE_DISC && st_ivas->ism_mode != ISM_MASA_MODE_MASA_ONE_OBJ ) -#else - if ( st_ivas->ivas_format == MASA_ISM_FORMAT && nchan_transport == 2 && st_ivas->ism_mode != ISM_MASA_MODE_DISC ) -#endif { - preProcessStereoTransportsForMovedObjects( st_ivas, - Cldfb_RealBuffer_in, - Cldfb_ImagBuffer_in, - nBins, - firstSubframe, - nSubframes ); + preProcessStereoTransportsForMovedObjects( st_ivas, Cldfb_RealBuffer_in, Cldfb_ImagBuffer_in, nBins, firstSubframe, nSubframes ); } #endif @@ -641,7 +618,7 @@ static void ivas_dirac_dec_binaural_internal( ivas_dirac_dec_binaural_process_output( st_ivas, output_f, Cldfb_RealBuffer_in, Cldfb_ImagBuffer_in, max_band_decorr, numInChannels, firstSlot, slotEnd ); st_ivas->hDirAC->hDiffuseDist = NULL; -#ifdef FIX_OMASA_DELAY_COMP +#ifdef MASA_AND_OBJECTS st_ivas->hDirAC->dirac_read_idx = ( st_ivas->hDirAC->dirac_read_idx + nSubframes ) % st_ivas->hDirAC->dirac_md_buffer_length; #endif @@ -885,19 +862,10 @@ static void ivas_dirac_dec_binaural_formulate_input_and_target_covariance_matric } else { -#ifdef FIX_OMASA_DELAY_COMP aziDeg = st_ivas->hMasaIsmData->azimuth_ism[ismDirIndex][dirac_read_idx]; eleDeg = st_ivas->hMasaIsmData->elevation_ism[ismDirIndex][dirac_read_idx]; -#else - aziDeg = st_ivas->hMasaIsmData->azimuth_ism[ismDirIndex]; - eleDeg = st_ivas->hMasaIsmData->elevation_ism[ismDirIndex]; -#endif } -#ifdef FIX_OMASA_DELAY_COMP ratio = st_ivas->hMasaIsmData->energy_ratio_ism[ismDirIndex][dirac_read_idx][bin]; -#else - ratio = st_ivas->hMasaIsmData->energy_ratio_ism[ismDirIndex][subframe][bin]; -#endif spreadCoh = 0.0f; } #endif @@ -1113,10 +1081,6 @@ static void ivas_dirac_dec_binaural_formulate_input_and_target_covariance_matric #endif frameMeanDiffusenessEneWeight[bin] += meanEnePerCh; } - -#ifndef FIX_OMASA_DELAY_COMP - hDirAC->dirac_read_idx = ( hDirAC->dirac_read_idx + 1 ) % hDirAC->dirac_md_buffer_length; -#endif } /* Formulate average diffuseness over frame */ @@ -1202,41 +1166,32 @@ static void ivas_dirac_dec_binaural_determine_processing_matrices( uint8_t nchanSeparateChannels; #endif int16_t nBins; -#ifdef FIX_OMASA_DELAY_COMP +#ifdef MASA_AND_OBJECTS int16_t dirac_read_idx; #endif DIRAC_DEC_BIN_HANDLE h; + h = st_ivas->hDiracDecBin; #ifdef MASA_AND_OBJECTS separateCenterChannelRendering = 0; nchanSeparateChannels = 0; -#ifdef OMASA_UPDATES + if ( st_ivas->hOutSetup.separateChannelEnabled || ( st_ivas->ivas_format == MASA_ISM_FORMAT && ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) ) ) -#else - if ( st_ivas->hOutSetup.separateChannelEnabled || ( st_ivas->ivas_format == MASA_ISM_FORMAT && ( st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC ) ) ) -#endif { separateCenterChannelRendering = 1; nchanSeparateChannels = 1; -#ifndef OMASA_UPDATES - if ( st_ivas->ivas_format == MASA_ISM_FORMAT && st_ivas->ism_mode == ISM_MASA_MODE_DISC ) - { - nchanSeparateChannels = (uint8_t) st_ivas->nchan_ism; - } -#endif } -#ifdef OMASA_UPDATES else if ( st_ivas->ivas_format == MASA_ISM_FORMAT && st_ivas->ism_mode == ISM_MASA_MODE_DISC && ( st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM ) ) { separateCenterChannelRendering = 1; nchanSeparateChannels = (uint8_t) st_ivas->nchan_ism; } -#endif #else separateCenterChannelRendering = st_ivas->hOutSetup.separateChannelEnabled; #endif + nBins = st_ivas->hDirAC->num_freq_bands; /* Actually bins */ -#ifdef FIX_OMASA_DELAY_COMP +#ifdef MASA_AND_OBJECTS dirac_read_idx = st_ivas->hDirAC->dirac_read_idx; #endif @@ -1377,7 +1332,6 @@ static void ivas_dirac_dec_binaural_determine_processing_matrices( #ifdef MASA_AND_OBJECTS uint8_t instantChange = 0; -#ifdef OMASA_UPDATES if ( st_ivas->ivas_format == MASA_ISM_FORMAT ) { gainFactor = 0.7943f * sqrtf( h->earlyPartEneCorrection[bin] ); /* Todo Nokia: Temporary gain for roughly matching the loudness of other processing paths. */ @@ -1386,32 +1340,20 @@ static void ivas_dirac_dec_binaural_determine_processing_matrices( { gainFactor = 0.8414f * sqrtf( h->earlyPartEneCorrection[bin] ); } -#else - gainFactor = 0.8414f * sqrtf( h->earlyPartEneCorrection[bin] ); -#endif + for ( chB = 0; chB < nchanSeparateChannels; chB++ ) { if ( st_ivas->ivas_format == MASA_ISM_FORMAT ) { if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC ) { -#ifdef FIX_OMASA_DELAY_COMP aziDeg = st_ivas->hMasaIsmData->azimuth_ism[chB][dirac_read_idx]; eleDeg = st_ivas->hMasaIsmData->elevation_ism[chB][dirac_read_idx]; -#else - aziDeg = st_ivas->hMasaIsmData->azimuth_ism[chB]; - eleDeg = st_ivas->hMasaIsmData->elevation_ism[chB]; -#endif } else { -#ifdef FIX_OMASA_DELAY_COMP aziDeg = st_ivas->hMasaIsmData->azimuth_separated_ism[dirac_read_idx]; eleDeg = st_ivas->hMasaIsmData->elevation_separated_ism[dirac_read_idx]; -#else - aziDeg = st_ivas->hMasaIsmData->azimuth_separated_ism; - eleDeg = st_ivas->hMasaIsmData->elevation_separated_ism; -#endif instantChange = 1; } } @@ -2246,10 +2188,11 @@ static void hrtfShGetHrtf( /*! r: Configured reqularization factor value to be set. */ static float configure_reqularization_factor( - const IVAS_FORMAT ivas_format, /* i: IVAS codec format in use */ - const int32_t ivas_brate ) /* i: Current IVAS bitrate */ + const IVAS_FORMAT ivas_format, /* i : IVAS codec format in use */ + const int32_t ivas_brate ) /* i : Current IVAS bitrate */ { float reqularizationFactor; + reqularizationFactor = 1.0f; /* Default value */ if ( ivas_format == MASA_FORMAT ) @@ -2308,7 +2251,7 @@ static float configure_reqularization_factor( } } - /* For SBA and parametric ISM, currently in default value of 1.0f. */ + /* For SBA and parametric ISM, default value of 1.0f. */ return reqularizationFactor; } @@ -2333,9 +2276,7 @@ void preProcessStereoTransportsForMovedObjects( DIRAC_DEC_HANDLE hDirAC; MASA_ISM_DATA_HANDLE hMasaIsmData; uint8_t enableCentering; -#ifdef FIX_OMASA_DELAY_COMP int16_t dirac_read_idx; -#endif hDirAC = st_ivas->hDirAC; hMasaIsmData = st_ivas->hMasaIsmData; @@ -2369,9 +2310,7 @@ void preProcessStereoTransportsForMovedObjects( /* Perform object-movement based processing */ for ( subframe = firstSubframe; subframe < ( firstSubframe + nSubframes ); subframe++ ) { -#ifdef FIX_OMASA_DELAY_COMP dirac_read_idx = st_ivas->hDirAC->dirac_read_idx; -#endif for ( bin = 0; bin < nBins; bin++ ) { @@ -2418,21 +2357,13 @@ void preProcessStereoTransportsForMovedObjects( float panEnesIn[2]; float centeringFactor; -#ifdef FIX_OMASA_DELAY_COMP ratio = hMasaIsmData->energy_ratio_ism[ismDirIndex][dirac_read_idx][bin]; -#else - ratio = hMasaIsmData->energy_ratio_ism[ismDirIndex][subframe][bin]; -#endif + ismRatioAcc += ratio; /* Get input and output panning gains */ -#ifdef FIX_OMASA_DELAY_COMP ivas_get_stereo_panning_gains( hMasaIsmData->azimuth_ism[ismDirIndex][dirac_read_idx], hMasaIsmData->elevation_ism[ismDirIndex][dirac_read_idx], -#else - ivas_get_stereo_panning_gains( hMasaIsmData->azimuth_ism[ismDirIndex], - hMasaIsmData->elevation_ism[ismDirIndex], -#endif panGainsIn ); if ( hMasaIsmData->ism_is_edited[ismDirIndex] ) diff --git a/lib_rend/ivas_objectRenderer.c b/lib_rend/ivas_objectRenderer.c index 732b7f84daeb33e31bba26c658621e7b68d71e36..ce68f4f313fff23f35e52e46c2994f2181cc587a 100644 --- a/lib_rend/ivas_objectRenderer.c +++ b/lib_rend/ivas_objectRenderer.c @@ -211,7 +211,7 @@ ivas_error ivas_td_binaural_open_unwrap( *hBinRendererTd = pBinRendTd; -#ifdef OMASA_UPDATES +#ifdef MASA_AND_OBJECTS if ( ivas_format != MASA_ISM_FORMAT ) { *binaural_latency_ns = (int32_t) ( ( *hBinRendererTd )->HrFiltSet_p->latency_s * 1000000000.f ); @@ -436,7 +436,7 @@ void TDREND_Update_object_positions( c_indx++; } -#ifdef OMASA_UPDATES +#ifdef MASA_AND_OBJECTS if ( in_format == ISM_FORMAT || in_format == MASA_ISM_FORMAT ) #else if ( in_format == ISM_FORMAT )