diff --git a/lib_com/ivas_cnst.h b/lib_com/ivas_cnst.h index 9243b3f508b02be0f20e6006f8c768413d4b37ce..e65ecc2cf2ccf57e3905aac173b953546f05a742 100644 --- a/lib_com/ivas_cnst.h +++ b/lib_com/ivas_cnst.h @@ -360,6 +360,10 @@ typedef enum #define ISM_Q_STEP_BORDER 5.0f #define ISM_Q_STEP_BORDER_FX ( 20971520 ) // Q22 +#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_MIN_Q9 0 diff --git a/lib_com/options.h b/lib_com/options.h index 6fb9e5c9443482c2bed87170ee15606f926b5453..1b1465cc5eb0a1008e4fd72e86394932cb09a942 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -96,6 +96,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_ism_metadata_enc_fx.c b/lib_enc/ivas_ism_metadata_enc_fx.c index 1efbb2123e56790854df9a4a08a641ed61d94dfa..589210cefb745d54f95c8638049def86f781b984 100644 --- a/lib_enc/ivas_ism_metadata_enc_fx.c +++ b/lib_enc/ivas_ism_metadata_enc_fx.c @@ -54,7 +54,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_FEC_DIFF_Q22 41943040 #define ISM_MD_INC_DIFF_CNT_MAX 6 diff --git a/lib_enc/ivas_omasa_enc_fx.c b/lib_enc/ivas_omasa_enc_fx.c index f1187bc6cfe77f5deb5328174eececa5a15aa0cb..f3c461fa3eb4d8716cf1741162b13d791d9d7ef6 100644 --- a/lib_enc/ivas_omasa_enc_fx.c +++ b/lib_enc/ivas_omasa_enc_fx.c @@ -45,6 +45,14 @@ #endif +#ifdef NONBE_FIX_944_FEC_OMASA_1SEP_OBJ_MASA +/*------------------------------------------------------------------------- + * Local constants + *------------------------------------------------------------------------*/ + +#define OMASA_FEC_MAX 5 +#endif + /*------------------------------------------------------------------------- * Local function prototypes *------------------------------------------------------------------------*/ @@ -184,6 +192,10 @@ ivas_error ivas_omasa_enc_open_fx( hOMasa->prev_selected_object = 0; hOMasa->changing_object = 0; +#ifdef NONBE_FIX_944_FEC_OMASA_1SEP_OBJ_MASA + hOMasa->since_obj_change_cnt = 0; + move16(); +#endif move16(); move16(); @@ -648,6 +660,27 @@ void ivas_omasa_enc_fx( move32(); move16(); } + +#ifdef NONBE_FIX_944_FEC_OMASA_1SEP_OBJ_MASA + /* force absolute MD coding in case of change of separated object */ + IF( NE_16( hOMasa->prev_selected_object, selected_object ) ) + { + hOMasa->since_obj_change_cnt = 0; + hIsmMeta[0]->position_angle.angle1_diff_cnt = ISM_FEC_MAX; + move16(); + move16(); + } + ELSE + { + hOMasa->since_obj_change_cnt = add( hOMasa->since_obj_change_cnt, 1 ); + hOMasa->since_obj_change_cnt = s_min( OMASA_FEC_MAX, hOMasa->since_obj_change_cnt ); + IF( LT_16( hOMasa->since_obj_change_cnt, OMASA_FEC_MAX ) ) + { + hIsmMeta[0]->position_angle.angle1_diff_cnt = ISM_FEC_MAX; + move16(); + } + } +#endif hOMasa->prev_selected_object = selected_object; move16(); diff --git a/lib_enc/ivas_stat_enc.h b/lib_enc/ivas_stat_enc.h index f421fd034f4f3e6ab0cfe60915568b6d288abb9a..f5dddcb77d57f27c004fb4d19e9afda814cddab0 100644 --- a/lib_enc/ivas_stat_enc.h +++ b/lib_enc/ivas_stat_enc.h @@ -873,6 +873,9 @@ typedef struct ivas_omasa_enc_state_structure Word16 prev_selected_object; UWord8 changing_object; +#ifdef NONBE_FIX_944_FEC_OMASA_1SEP_OBJ_MASA + Word16 since_obj_change_cnt; +#endif } OMASA_ENC_STATE, *OMASA_ENC_HANDLE;