diff --git a/lib_com/ivas_prot.h b/lib_com/ivas_prot.h index 315970a6c29cea9f48b08e5f8919159f8bba99f3..57b6756357f7117b92c05b6902f07bef6a8823ce 100644 --- a/lib_com/ivas_prot.h +++ b/lib_com/ivas_prot.h @@ -1009,7 +1009,7 @@ ivas_error ivas_ism_metadata_enc( const int16_t ism_extended_metadata_flag /* i : Extended metadata flag */ #ifdef MASA_AND_OBJECTS , - const float lp_noise_CPE, /* i : LP filterend total noise estimation */ + const float lp_noise_CPE, /* i : LP filtered total noise estimation */ const int16_t flag_omasa_ener_brate, /* i : less bitrate for objects in OMASA flag */ int16_t *omasa_stereo_sw_cnt #endif @@ -5861,11 +5861,11 @@ void ivas_omasa_separate_object_render( float output_f[][L_FRAME48k], /* i/o: output signals */ const int16_t output_frame /* i : output frame length per channel */ ); - +#ifndef FIX__657_REMOVE_EDITING void ivas_omasa_set_edited_objects( Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ ); - +#endif void ivas_omasa_encode_masa_to_total( IVAS_QMETADATA_HANDLE hQMetaData, BSTR_ENC_HANDLE hMetaData, diff --git a/lib_com/options.h b/lib_com/options.h index a892f7fcab66a5c81a5e154982ffa1294237741c..f51a539a9ea31b3166066e839d75a35f89536169 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -229,8 +229,8 @@ #define FIX_653_BUG_IN_SKIP_MATRIX /* Dlb: fix for issue #653, bug in the ivas_spar_get_skip_mat function*/ #define FIX_663_PARAM_ISM_EXT /* FhG: Issue 663: ParamISM EXT output improvement */ #define FIX_673_OMASA_OBJ_MD_SYNC /* Nokia: Fix issue 673 by updating metadata in the third subframe to account for audio delay. */ -#define PARAMUPMIX_BINAURAL_UPDATES /* Dlb : issue 652, MC ParamUpmix Binaural Updates */ - +#define PARAMUPMIX_BINAURAL_UPDATES /* Dlb : issue 652, MC ParamUpmix Binaural Updates */ +#define FIX_657_REMOVE_EDITING /* Nokia: Remove remaining unused coded related to object editing */ /* ################## End BE DEVELOPMENT switches ######################### */ diff --git a/lib_dec/ivas_dec.c b/lib_dec/ivas_dec.c index 70136e9592514497307a36cb1898aa451c6b625c..95c7f19e60ca338f303cfbaa71c78f422aa10f57 100644 --- a/lib_dec/ivas_dec.c +++ b/lib_dec/ivas_dec.c @@ -597,9 +597,10 @@ ivas_error ivas_dec( hp20( output[n], output_frame, st_ivas->mem_hp20_out[n], output_Fs ); } +#ifndef FIX_657_REMOVE_EDITING /* Set edited object positions, if editing enabled */ ivas_omasa_set_edited_objects( st_ivas ); - +#endif /* Rendering */ if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM || st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC ) { diff --git a/lib_dec/ivas_ism_renderer.c b/lib_dec/ivas_ism_renderer.c index 33d3598e0e3e33e95b467f42873784357f495391..ced15186f930e800f73f1e565a394b486a5d7a67 100644 --- a/lib_dec/ivas_ism_renderer.c +++ b/lib_dec/ivas_ism_renderer.c @@ -92,7 +92,13 @@ ivas_error ivas_ism_renderer_open( init_interpolator_length = (uint16_t) ( st_ivas->hDecoderConfig->output_Fs / FRAMES_PER_SEC ); interpolator_length = init_interpolator_length; } - st_ivas->hIsmRendererData->interpolator = (float *) malloc( sizeof( float ) * init_interpolator_length ); + + if ( ( st_ivas->hIsmRendererData->interpolator = (float *) malloc( sizeof( float ) * init_interpolator_length ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for ISM renderer interpolator\n" ) ); + } + + for ( i = 0; i < interpolator_length; i++ ) { st_ivas->hIsmRendererData->interpolator[i] = (float) i / ( (float) interpolator_length - 1 ); diff --git a/lib_dec/ivas_masa_dec.c b/lib_dec/ivas_masa_dec.c index 7027d49250ca338c02a8ba043278b9c691e60605..aa11b9797b29024cc829d709ac581dcffaf46fb5 100644 --- a/lib_dec/ivas_masa_dec.c +++ b/lib_dec/ivas_masa_dec.c @@ -799,6 +799,7 @@ static ivas_error ivas_masa_dec_config( ivas_masa_set_coding_config( &( hMasa->config ), hMasa->data.band_mapping, st_ivas->hDecoderConfig->ivas_total_brate, st_ivas->nchan_transport, ( st_ivas->ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCMASA ) ); #endif + #ifdef MASA_AND_OBJECTS if ( ( st_ivas->ivas_format == MASA_FORMAT || st_ivas->ivas_format == MASA_ISM_FORMAT ) && st_ivas->hDecoderConfig->ivas_total_brate == IVAS_512k ) #else @@ -806,10 +807,14 @@ static ivas_error ivas_masa_dec_config( #endif { hMasa->config.mergeRatiosOverSubframes = 0; + /* initialize spherical grid */ if ( hMasa->data.sph_grid16 == NULL ) { - hMasa->data.sph_grid16 = (SPHERICAL_GRID_DATA *) malloc( sizeof( SPHERICAL_GRID_DATA ) ); + if ( ( hMasa->data.sph_grid16 = (SPHERICAL_GRID_DATA *) malloc( sizeof( SPHERICAL_GRID_DATA ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MASA data handle\n" ) ); + } generate_gridEq( hMasa->data.sph_grid16 ); } } @@ -2358,7 +2363,7 @@ static int16_t ivas_decode_masaism_metadata( 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? */ + nblocks = hQMetaData->q_direction->cfg.nblocks; /* Read MASA-to-total energy ratios */ ivas_omasa_decode_masa_to_total( bit_stream, next_bit_pos, hQMetaData->masa_to_total_energy_ratio, nbands, nblocks ); @@ -2481,7 +2486,7 @@ static int16_t ivas_decode_masaism_metadata( return ( nb_bits_read - *next_bit_pos ); } - +#ifndef FIX_657_REMOVE_EDITING /*-------------------------------------------------------------------* * ivas_omasa_set_edited_objects() * @@ -2492,11 +2497,11 @@ void ivas_omasa_set_edited_objects( Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ ) { + int16_t dir, sf; MASA_ISM_DATA_HANDLE hMasaIsmData; hMasaIsmData = st_ivas->hMasaIsmData; - /* Set positions of the edited objects */ if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC ) { @@ -2548,3 +2553,4 @@ void ivas_omasa_set_edited_objects( return; } #endif +#endif diff --git a/lib_dec/ivas_omasa_dec.c b/lib_dec/ivas_omasa_dec.c index 7cff26a856a55b524dafd27bb7ce4aae549f293a..832243883e923638fbbc29b173adfff56802127f 100644 --- a/lib_dec/ivas_omasa_dec.c +++ b/lib_dec/ivas_omasa_dec.c @@ -79,11 +79,21 @@ ivas_error ivas_omasa_data_open( hMasaIsmData->objectsMoved = 0; hMasaIsmData->delayBuffer = NULL; +#ifdef FIX_657_REMOVE_EDITING + for ( ch = 0; ch < MAX_NUM_OBJECTS; ch++ ) + { + hMasaIsmData->ism_is_edited[ch] = 0; + hMasaIsmData->q_elevation_old[ch] = 0.0f; + hMasaIsmData->q_azimuth_old[ch] = 0.0f; + } +#else for ( ch = 0; ch < st_ivas->nchan_ism; ch++ ) { hMasaIsmData->q_elevation_old[ch] = 0.0f; hMasaIsmData->q_azimuth_old[ch] = 0.0f; } +#endif + for ( obj_idx = 0; obj_idx < MAX_NUM_OBJECTS; obj_idx++ ) { diff --git a/lib_dec/ivas_stat_dec.h b/lib_dec/ivas_stat_dec.h index 89a2bb07a8ef46df4d701ed90977363e0bdd0ab3..c4212bd0d0960901c732d83add31b710c1307d0a 100644 --- a/lib_dec/ivas_stat_dec.h +++ b/lib_dec/ivas_stat_dec.h @@ -1072,11 +1072,12 @@ typedef struct Decoder_Struct SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom; /* Spatial parametric (DirAC rend, ParamBin, ParamISM) rendering common data handle. */ #ifdef MASA_AND_OBJECTS MASA_ISM_DATA_HANDLE hMasaIsmData; /* MASA_ISM rendering structure */ +#ifndef FIX_657_REMOVE_EDITING uint8_t editing_ism_enabled; /* Todo Nokia: Temporary, used until proper ISM control available */ int16_t index_of_edited_ism; /* Todo Nokia: Temporary, used until proper ISM control available */ int16_t azimuth_edited; /* Todo Nokia: Temporary, used until proper ISM control available */ int16_t elevation_edited; /* Todo Nokia: Temporary, used until proper ISM control available */ - +#endif int16_t flag_omasa_brate; #endif diff --git a/lib_dec/ivas_vbap.c b/lib_dec/ivas_vbap.c index dcc73907e2942a0d7e348958203a59a924ce4130..76ee5cb650312a93b8d46a68456888bf87ef51ce 100644 --- a/lib_dec/ivas_vbap.c +++ b/lib_dec/ivas_vbap.c @@ -246,7 +246,10 @@ ivas_error vbap_init_data( #ifdef MASA_AND_OBJECTS if ( ivas_format == MASA_ISM_FORMAT ) { - vbap->object_mode_bottom_virtual_speaker_node_division_gains = (float *) malloc( num_speaker_nodes * sizeof( float ) ); + if ( ( vbap->object_mode_bottom_virtual_speaker_node_division_gains = (float *) malloc( num_speaker_nodes * sizeof( float ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for VBAP data\n" ) ); + } set_zero( vbap->object_mode_bottom_virtual_speaker_node_division_gains, num_speaker_nodes ); is_success &= vbap->object_mode_bottom_virtual_speaker_node_division_gains != NULL; } @@ -268,7 +271,10 @@ ivas_error vbap_init_data( #ifdef MASA_AND_OBJECTS if ( ivas_format == MASA_ISM_FORMAT ) { - vbap->object_mode_top_virtual_speaker_node_division_gains = (float *) malloc( num_speaker_nodes * sizeof( float ) ); + if ( ( vbap->object_mode_top_virtual_speaker_node_division_gains = (float *) malloc( num_speaker_nodes * sizeof( float ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for VBAP data\n" ) ); + } set_zero( vbap->object_mode_top_virtual_speaker_node_division_gains, num_speaker_nodes ); is_success &= vbap->object_mode_top_virtual_speaker_node_division_gains != NULL; } @@ -286,10 +292,14 @@ 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 MASA_AND_OBJECTS if ( ivas_format == MASA_ISM_FORMAT ) { - vbap->object_mode_back_virtual_speaker_node_division_gains = (float *) malloc( num_speaker_nodes * sizeof( float ) ); + if ( ( vbap->object_mode_back_virtual_speaker_node_division_gains = (float *) malloc( num_speaker_nodes * sizeof( float ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for VBAP data\n" ) ); + } set_zero( vbap->object_mode_back_virtual_speaker_node_division_gains, num_speaker_nodes ); is_success &= vbap->object_mode_back_virtual_speaker_node_division_gains != NULL; } diff --git a/lib_dec/lib_dec.c b/lib_dec/lib_dec.c index 4b2678ad4c4abe52754ed29d8e4e8508a1af87d2..a4de639cb976cfebe0b3cf9442f71e9a79b26c46 100644 --- a/lib_dec/lib_dec.c +++ b/lib_dec/lib_dec.c @@ -215,10 +215,12 @@ ivas_error IVAS_DEC_Open( st_ivas->sba_analysis_order = 0; #ifdef MASA_AND_OBJECTS +#ifndef FIX_657_REMOVE_EDITING hIvasDec->st_ivas->editing_ism_enabled = 0; hIvasDec->st_ivas->index_of_edited_ism = 0; hIvasDec->st_ivas->azimuth_edited = 0; hIvasDec->st_ivas->elevation_edited = 0; +#endif #endif return IVAS_ERR_OK; diff --git a/lib_enc/ivas_omasa_enc.c b/lib_enc/ivas_omasa_enc.c index ea782115bb2b0a1ceaae2387c7e3b632cdddee6b..4d013c623a54681bb942ccc923546c75c50243c8 100644 --- a/lib_enc/ivas_omasa_enc.c +++ b/lib_enc/ivas_omasa_enc.c @@ -101,7 +101,10 @@ ivas_error ivas_omasa_enc_open( for ( j = 0; j < MAX_PARAM_SPATIAL_SUBFRAMES; j++ ) { - hOMasa->direction_vector_m[i][j] = (float *) malloc( MASA_FREQUENCY_BANDS * sizeof( float ) ); + if ( ( hOMasa->direction_vector_m[i][j] = (float *) malloc( MASA_FREQUENCY_BANDS * sizeof( float ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for OMASA data\n" ) ); + } set_zero( hOMasa->direction_vector_m[i][j], MASA_FREQUENCY_BANDS ); } } @@ -110,7 +113,10 @@ ivas_error ivas_omasa_enc_open( { for ( j = 0; j < DIRAC_NO_COL_AVG_DIFF; j++ ) { - hOMasa->buffer_intensity_real[i][j] = (float *) malloc( MASA_FREQUENCY_BANDS * sizeof( float ) ); + if ( ( hOMasa->buffer_intensity_real[i][j] = (float *) malloc( MASA_FREQUENCY_BANDS * sizeof( float ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for OMASA data\n" ) ); + } set_zero( hOMasa->buffer_intensity_real[i][j], MASA_FREQUENCY_BANDS ); } } diff --git a/lib_enc/ivas_qmetadata_enc.c b/lib_enc/ivas_qmetadata_enc.c index 6be126ac831fc92528ec1d6f651aae3e5fe010a8..bb89a61995b604aaf975c894c875f0ded4b8797a 100644 --- a/lib_enc/ivas_qmetadata_enc.c +++ b/lib_enc/ivas_qmetadata_enc.c @@ -6249,7 +6249,7 @@ static int16_t write_stream_dct_coeffs_omasa( bits_pos = hMetaData->nb_bits_tot; if ( low_bitrate_mode == 1 ) { - max_bits = 50; /* To do : find optimal allowed value*/ + max_bits = 50; } else { diff --git a/lib_enc/ivas_stat_enc.h b/lib_enc/ivas_stat_enc.h index 516604fc7235f13d862d4cbf79ada80b2365e0d7..6a7dd965fd74d8ec075cb1bf68c7b51aebda6fa4 100644 --- a/lib_enc/ivas_stat_enc.h +++ b/lib_enc/ivas_stat_enc.h @@ -801,10 +801,10 @@ typedef struct ivas_omasa_enc_state_structure typedef struct ivas_omasa_encoder_one_data_struct { - float energy_ism[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; /* TODO Nokia: Make an own MASAISM struct for these, and reserve it only for OMASA */ + float energy_ism[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; float energy_ratio_ism[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS][MAX_NUM_OBJECTS]; float q_energy_ratio_ism[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS][MAX_NUM_OBJECTS]; - float lp_noise_CPE; /* LP filterend total noise estimation */ + float lp_noise_CPE; /* LP filtered total noise estimation */ int16_t omasa_stereo_sw_cnt; } OMASA_ENCODER_DATA_STATE, *OMASA_ENCODER_DATA_HANDLE; diff --git a/lib_enc/stat_enc.h b/lib_enc/stat_enc.h index 34efc3da7f3d9ae45da4015427257f4b4217bddc..95319fc5e87bb21f5a44dd7a53ac8bfbac6eda9e 100644 --- a/lib_enc/stat_enc.h +++ b/lib_enc/stat_enc.h @@ -1324,7 +1324,7 @@ typedef struct enc_core_structure float bckr_tilt_lt; float lp_speech; - float lp_noise; /* CNG and DTX - LP filterend total noise estimation */ + float lp_noise; /* CNG and DTX - LP filtered total noise estimation */ int16_t active_cnt; /* counter of active frames */ TD_CNG_ENC_HANDLE hTdCngEnc; diff --git a/lib_rend/ivas_omasa_ana.c b/lib_rend/ivas_omasa_ana.c index eeed6a8253cce3146db337b57c3858c48cc60387..f669a6767167702c2ca5962f3485d8bd67cadeb2 100644 --- a/lib_rend/ivas_omasa_ana.c +++ b/lib_rend/ivas_omasa_ana.c @@ -116,11 +116,17 @@ ivas_error ivas_omasa_ana_open( /* intensity 3-dim */ for ( i = 0; i < DIRAC_NUM_DIMS; i++ ) { - hOMasa->direction_vector_m[i] = (float **) malloc( MAX_PARAM_SPATIAL_SUBFRAMES * sizeof( float * ) ); + if ( ( hOMasa->direction_vector_m[i] = (float **) malloc( MAX_PARAM_SPATIAL_SUBFRAMES * sizeof( float * ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for OMASA data\n" ) ); + } for ( j = 0; j < MAX_PARAM_SPATIAL_SUBFRAMES; j++ ) { - hOMasa->direction_vector_m[i][j] = (float *) malloc( MASA_FREQUENCY_BANDS * sizeof( float ) ); + if ( ( hOMasa->direction_vector_m[i][j] = (float *) malloc( MASA_FREQUENCY_BANDS * sizeof( float ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for OMASA data\n" ) ); + } set_zero( hOMasa->direction_vector_m[i][j], MASA_FREQUENCY_BANDS ); } } @@ -129,7 +135,10 @@ ivas_error ivas_omasa_ana_open( { for ( j = 0; j < DIRAC_NO_COL_AVG_DIFF; j++ ) { - hOMasa->buffer_intensity_real[i][j] = (float *) malloc( MASA_FREQUENCY_BANDS * sizeof( float ) ); + if ( ( hOMasa->buffer_intensity_real[i][j] = (float *) malloc( MASA_FREQUENCY_BANDS * sizeof( float ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for OMASA data\n" ) ); + } set_zero( hOMasa->buffer_intensity_real[i][j], MASA_FREQUENCY_BANDS ); } } diff --git a/scripts/config/self_test.prm b/scripts/config/self_test.prm index c6cca4696261a9e238d130dfdd62a3842b8f795b..c9b59d4f3cd244e7548e53f39e1084acf02a8289 100644 --- a/scripts/config/self_test.prm +++ b/scripts/config/self_test.prm @@ -1290,7 +1290,7 @@ networkSimulator_g192 ../scripts/dly_error_profiles/dly_error_profile_5.dat bit ../IVAS_dec BINAURAL_ROOM_IR 32 bit testv/stvOMASA_2ISM_1MASA2TC48c.wav_BINAURAL_ROOM_IR_256000_48-32.tst -// OMASA 2Dir1TC 3ISM at 24.4 kbps, 48kHz in, 16kHz out, FOA out, FEC at 1% +// OMASA 2Dir1TC 3ISM at 24.4 kbps, 48kHz in, 16kHz out, FOA out, FEC at 10% ../IVAS_cod -ism_masa 3 1 testv/stvISM1.csv testv/stvISM2.csv testv/stvISM3.csv testv/stv2MASA1TC48c.met 24400 48 testv/stvOMASA_3ISM_2MASA1TC48c.wav bit ../IVAS_dec -fec 10 FOA 16 bit testv/stvOMASA_3ISM_2MASA1TC48c.wav_FOA_24400_48-16.tst