diff --git a/lib_com/ivas_cnst.h b/lib_com/ivas_cnst.h index 3c6a93dd596fa05bf8d2080ed8137a5f92f874d0..6787571189c0cbcd7fc0855d0f3e0489dbc90524 100755 --- a/lib_com/ivas_cnst.h +++ b/lib_com/ivas_cnst.h @@ -328,6 +328,10 @@ typedef enum #define ISM_Q_STEP 2.5f #define ISM_Q_STEP_BORDER 5.0f +#ifdef NONBE_FIX_944_FEC_OMASA_1SEP_OBJ_MASA +#define ISM_FEC_MAX 10 +#endif + #define ISM_RADIUS_NBITS 6 #define ISM_RADIUS_MIN 0.0f #define ISM_RADIUS_DELTA 0.25f /* Max radius = (2^ISM_RADIUS_NBITS-1)*0.25 = 15.75 */ diff --git a/lib_com/options.h b/lib_com/options.h index 8b9acd92dd5f7d373b2e5a619a79ea673267fd10..1f1d3285ca870ad32c5df8cb3f4d1fe5baf024be 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -162,6 +162,7 @@ #define NONBE_FIX_856_TCX_LTP_SYNTH_FILTER /* FhG: issue 856: correct filtering length for tcx-ltp synth filtering*/ #define NONBE_FIX_943_RECONFIG_IGF_AFTER_SETTING_BW /* FhG: issue 943: fix crash in BW switchin from WB in MDCT-Stereo core encoder */ +#define NONBE_FIX_944_FEC_OMASA_1SEP_OBJ_MASA /* Nokia: issue 944: fix FEC error in OMASA */ /* ##################### End NON-BE switches ########################### */ diff --git a/lib_enc/ivas_enc.c b/lib_enc/ivas_enc.c index c52a722c20303c1e1875296c1a9dd7e033979728..e2a61aa4615f6e54d5b82d8b08a13751b5009e62 100644 --- a/lib_enc/ivas_enc.c +++ b/lib_enc/ivas_enc.c @@ -275,7 +275,6 @@ ivas_error ivas_enc( else if ( ivas_format == MASA_ISM_FORMAT ) { float *data_separated_object; - int16_t idx_separated_object; int16_t flag_omasa_ener_brate; diff --git a/lib_enc/ivas_ism_metadata_enc.c b/lib_enc/ivas_ism_metadata_enc.c index 849b7957ae86da6e1152d7fa864db63aac05e6a7..3b23359850014686a8a3e88b60ebbf4813384903 100644 --- a/lib_enc/ivas_ism_metadata_enc.c +++ b/lib_enc/ivas_ism_metadata_enc.c @@ -55,7 +55,9 @@ #define ISM_MAX_ELEVATION_DIFF_IDX ( ISM_ELEVATION_NBITS - 1 /*zero*/ - 1 /*sign*/ ) #define ISM_MAX_RADIUS_DIFF_IDX ( ISM_RADIUS_NBITS - 1 /*zero*/ - 1 /*sign*/ ) -#define ISM_FEC_MAX 10 +#ifndef NONBE_FIX_944_FEC_OMASA_1SEP_OBJ_MASA +#define ISM_FEC_MAX 10 +#endif #define ISM_MD_FEC_DIFF 10 #define ISM_MD_INC_DIFF_CNT_MAX 6 #define ISM_MD_FEC_CNT_MAX 25 @@ -429,6 +431,7 @@ ivas_error ivas_ism_metadata_enc( } idx_angle1_abs = ism_quant_meta( hIsmMetaData->azimuth, &valQ, ism_azimuth_borders, ISM_Q_STEP, ISM_Q_STEP_BORDER, 1 << ISM_AZIMUTH_NBITS ); + encode_angle_indices( hBstr, &( hIsmMetaData->position_angle ), hIsmMetaData->last_ism_metadata_flag, hSCE[0]->hCoreCoder[0]->ini_frame, idx_angle1_abs, 0, &flag_abs_azimuth[ch], NULL ); } else @@ -443,6 +446,7 @@ ivas_error ivas_ism_metadata_enc( idx_angle1_abs = hParamIsm->azi_index[ch]; idx_angle2_abs = hParamIsm->ele_index[ch]; } + encode_angle_indices( hBstr, &( hIsmMetaData->position_angle ), hIsmMetaData->last_ism_metadata_flag, ini_frame, idx_angle1_abs, idx_angle2_abs, &flag_abs_azimuth[ch], &flag_abs_elevation[ch] ); /*----------------------------------------------------------------* diff --git a/lib_enc/ivas_omasa_enc.c b/lib_enc/ivas_omasa_enc.c index 8f0cf13487bb3917d845824ed0ba6142fa904378..b5382f906050379c9cac535a5d85324fdcfe2ea6 100644 --- a/lib_enc/ivas_omasa_enc.c +++ b/lib_enc/ivas_omasa_enc.c @@ -45,6 +45,14 @@ #include "wmc_auto.h" +#ifdef NONBE_FIX_944_FEC_OMASA_1SEP_OBJ_MASA +/*------------------------------------------------------------------------- + * Local constants + *------------------------------------------------------------------------*/ + +#define OMASA_FEC_MAX 5 +#endif + /*------------------------------------------------------------------------- * Local function prototypes *------------------------------------------------------------------------*/ @@ -133,6 +141,9 @@ ivas_error ivas_omasa_enc_open( set_zero( hOMasa->broadband_energy_prev, MAX_NUM_OBJECTS + MASA_MAX_TRANSPORT_CHANNELS ); hOMasa->prev_selected_object = 0; hOMasa->changing_object = 0; +#ifdef NONBE_FIX_944_FEC_OMASA_1SEP_OBJ_MASA + hOMasa->since_obj_change_cnt = 0; +#endif input_frame = (int16_t) ( st_ivas->hEncoderConfig->input_Fs / FRAMES_PER_SEC ); for ( i = 0; i < input_frame; i++ ) @@ -495,6 +506,24 @@ void ivas_omasa_enc( { hOMasa->broadband_energy_prev[i] = broadband_energy[i]; } + +#ifdef NONBE_FIX_944_FEC_OMASA_1SEP_OBJ_MASA + /* force absolute MD coding in case of change of separated object */ + if ( hOMasa->prev_selected_object != selected_object ) + { + hOMasa->since_obj_change_cnt = 0; + hIsmMeta[0]->position_angle.angle1_diff_cnt = ISM_FEC_MAX; + } + else + { + hOMasa->since_obj_change_cnt++; + hOMasa->since_obj_change_cnt = min( OMASA_FEC_MAX, hOMasa->since_obj_change_cnt ); + if ( hOMasa->since_obj_change_cnt < OMASA_FEC_MAX ) + { + hIsmMeta[0]->position_angle.angle1_diff_cnt = ISM_FEC_MAX; + } + } +#endif hOMasa->prev_selected_object = selected_object; /* Separate the selected object */ diff --git a/lib_enc/ivas_stat_enc.h b/lib_enc/ivas_stat_enc.h index 6725d778b08d3c06a604006e5fde36cd8694a4dc..181fe5316b305bd1444035e0fba6ba4581c86da8 100644 --- a/lib_enc/ivas_stat_enc.h +++ b/lib_enc/ivas_stat_enc.h @@ -788,6 +788,9 @@ typedef struct ivas_omasa_enc_state_structure float broadband_energy_prev[MAX_NUM_OBJECTS + MASA_MAX_TRANSPORT_CHANNELS]; int16_t prev_selected_object; uint8_t changing_object; +#ifdef NONBE_FIX_944_FEC_OMASA_1SEP_OBJ_MASA + int16_t since_obj_change_cnt; +#endif float fade_out_gain[L_FRAME48k]; float fade_in_gain[L_FRAME48k];