From 0a8838fe8d7b02807f63f02b5ba560b6910d14d2 Mon Sep 17 00:00:00 2001 From: Tapani Pihlajakuja Date: Tue, 15 Apr 2025 12:25:29 +0300 Subject: [PATCH 1/2] Port changes from PC float MR 1292 on top of float-pc --- lib_com/ivas_cnst.h | 4 ++++ lib_com/options.h | 1 + lib_enc/ivas_enc.c | 1 - lib_enc/ivas_ism_metadata_enc.c | 4 ++++ lib_enc/ivas_omasa_enc.c | 29 +++++++++++++++++++++++++++++ lib_enc/ivas_stat_enc.h | 3 +++ 6 files changed, 41 insertions(+), 1 deletion(-) diff --git a/lib_com/ivas_cnst.h b/lib_com/ivas_cnst.h index 4389d6fb5..bf6ec441c 100644 --- a/lib_com/ivas_cnst.h +++ b/lib_com/ivas_cnst.h @@ -320,6 +320,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 6917d5f67..fe86bfc06 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -200,6 +200,7 @@ #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 FIX_911_REMOVE_CREND_DUPLICATION /* VA: issue 911: resolve duplication of CRend binaural external renderer function */ #define FIX_938_GCC_12_WARNINGS /* VA: issue #938: remove set_f(.,.,0) call in which length is always 0 to remove GCC 12.0 warning */ +#define NONBE_FIX_944_FEC_OMASA_1SEP_OBJ_MASA /* Nokia: issue 944: fix FEC error in OMASA */ /* #################### End BASOP porting switches ############################ */ diff --git a/lib_enc/ivas_enc.c b/lib_enc/ivas_enc.c index e73f131fa..db2e60fad 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 c2b047ebb..5b2b8df9b 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*/ ) +#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 @@ -443,6 +445,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 @@ -457,6 +460,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 0e1cc50e6..9414d527c 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 59363a41a..5184b4ba1 100644 --- a/lib_enc/ivas_stat_enc.h +++ b/lib_enc/ivas_stat_enc.h @@ -792,6 +792,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]; -- GitLab From cc5b1890fdac689f84cd2caadcc4df003c261dd3 Mon Sep 17 00:00:00 2001 From: Tapani Pihlajakuja Date: Tue, 15 Apr 2025 13:32:45 +0300 Subject: [PATCH 2/2] Apply clang format --- lib_enc/ivas_ism_metadata_enc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_enc/ivas_ism_metadata_enc.c b/lib_enc/ivas_ism_metadata_enc.c index 4efca7dce..91e768465 100644 --- a/lib_enc/ivas_ism_metadata_enc.c +++ b/lib_enc/ivas_ism_metadata_enc.c @@ -56,7 +56,7 @@ #define ISM_MAX_RADIUS_DIFF_IDX ( ISM_RADIUS_NBITS - 1 /*zero*/ - 1 /*sign*/ ) #ifndef NONBE_FIX_944_FEC_OMASA_1SEP_OBJ_MASA -#define ISM_FEC_MAX 10 +#define ISM_FEC_MAX 10 #endif #define ISM_MD_FEC_DIFF 10 #define ISM_MD_INC_DIFF_CNT_MAX 6 -- GitLab