Loading lib_com/ivas_omasa_com.c +19 −1 Original line number Diff line number Diff line Loading @@ -60,12 +60,19 @@ #define GAMMA_ISM_LOW_IMP3 0.85f #define GAMMA_ISM_MEDIUM_IMP3 1.15f #define GAMMA_ISM_HIGH_IMP3 1.3f #ifdef TUNING_DISC_3_4obj #ifdef FIX_4OBJ_128 #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 #endif #endif /*--------------------------------------------------------------- * ivas_omasa_ism_mode_select() Loading Loading @@ -175,6 +182,10 @@ int32_t ivas_interformat_brate( 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 FIX_4OBJ_128 , const int16_t limit_flag /* i : flag to limit the bitrate increase */ #endif ) { int32_t element_brate_out; Loading @@ -182,7 +193,6 @@ int32_t ivas_interformat_brate( nBits = (int16_t) ( element_brate / FRAMES_PER_SEC ); if ( ism_imp == ISM_INACTIVE_IMP ) { nBits = BITS_ISM_INACTIVE; Loading @@ -192,6 +202,14 @@ int32_t ivas_interformat_brate( #ifdef TUNING_DISC_3_4obj if ( ism_mode == ISM_MASA_MODE_DISC && ( ( nchan_ism == 4 && element_brate == 24000 ) || ( nchan_ism == 3 && element_brate == 20000 ) ) ) /* this condition corresponds to the ivas_total_brate = 96000 and 3 objects */ { #ifdef FIX_4OBJ_128 if ( limit_flag && ( nchan_ism == 4 && element_brate == 24000 ) ) { return element_brate; } #endif if ( ism_imp == ISM_LOW_IMP ) { nBits = (int16_t) ( nBits * GAMMA_ISM_LOW_IMP4 ); Loading lib_com/ivas_prot.h +3 −0 Original line number Diff line number Diff line Loading @@ -5079,6 +5079,9 @@ int32_t ivas_interformat_brate( 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 FIX_4OBJ_128 , const int16_t limit_flag /* i : flag to limit the bitrate increase */ #endif ); void ivas_combined_format_brate_sanity( Loading lib_com/options.h +3 −0 Original line number Diff line number Diff line Loading @@ -179,6 +179,9 @@ #define REDUCE_OMASA_META_BITS /* Nokia: reduce metadata number of bits and fix directional metadata bit allocation */ #define OMASA_DIFFUSE_ISM_MERGE /* Nokia: Diffuse-energy retaining merging of ISM and MASA */ #define FIX_4OBJ_128 /* VA: fix to 4 ISMs 24 kbps case: when all objects are HIGH_IMP, keep 24 kbps bitrate, otherwise increase the 24 kbps bitrate */ #endif /* MASA_AND_OBJECTS */ Loading lib_dec/ivas_omasa_dec.c +22 −2 Original line number Diff line number Diff line Loading @@ -59,7 +59,12 @@ void ivas_set_surplus_brate_dec( 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 ); *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 ); st_ivas->hCPE[0]->brate_surplus = st_ivas->hSCE[0]->element_brate - *ism_total_brate; Loading @@ -74,6 +79,16 @@ void ivas_set_surplus_brate_dec( } else if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC ) { #ifdef FIX_4OBJ_128 int16_t brate_limit_flag = 0; for ( n = 0; n < st_ivas->nchan_ism; n++ ) { brate_limit_flag += st_ivas->hIsmMetaData[n]->ism_imp; } brate_limit_flag = brate_limit_flag >= 10 ? 1 : 0; #endif ism_total_brate_ref = 0; for ( n = 0; n < st_ivas->nchan_ism; n++ ) { Loading @@ -90,7 +105,12 @@ 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 ); *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 FIX_4OBJ_128 , brate_limit_flag #endif ); } st_ivas->hCPE[0]->brate_surplus = ism_total_brate_ref - *ism_total_brate; Loading lib_enc/ivas_ism_metadata_enc.c +15 −1 Original line number Diff line number Diff line Loading @@ -824,6 +824,15 @@ ivas_error ivas_ism_metadata_enc( if ( ism_mode == ISM_MASA_MODE_DISC ) { int16_t bits_ism, bits_element[MAX_NUM_OBJECTS]; #ifdef FIX_4OBJ_128 int16_t brate_limit_flag = 0; for ( ch = 0; ch < num_obj; ch++ ) { brate_limit_flag += ism_imp[ch]; } brate_limit_flag = brate_limit_flag >= 10 ? 1 : 0; #endif bits_ism = (int16_t) ( *ism_total_brate / FRAMES_PER_SECOND ); set_s( bits_element, bits_ism / num_obj, num_obj ); Loading @@ -833,7 +842,12 @@ ivas_error ivas_ism_metadata_enc( *ism_total_brate = 0; for ( ch = 0; ch < num_obj; ch++ ) { *ism_total_brate += ivas_interformat_brate( ISM_MASA_MODE_DISC, num_obj, hSCE[ch]->element_brate, ism_imp[ch] ); *ism_total_brate += ivas_interformat_brate( ISM_MASA_MODE_DISC, num_obj, hSCE[ch]->element_brate, ism_imp[ch] #ifdef FIX_4OBJ_128 , brate_limit_flag #endif ); } ism_metadata_flag_global = 1; } Loading Loading
lib_com/ivas_omasa_com.c +19 −1 Original line number Diff line number Diff line Loading @@ -60,12 +60,19 @@ #define GAMMA_ISM_LOW_IMP3 0.85f #define GAMMA_ISM_MEDIUM_IMP3 1.15f #define GAMMA_ISM_HIGH_IMP3 1.3f #ifdef TUNING_DISC_3_4obj #ifdef FIX_4OBJ_128 #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 #endif #endif /*--------------------------------------------------------------- * ivas_omasa_ism_mode_select() Loading Loading @@ -175,6 +182,10 @@ int32_t ivas_interformat_brate( 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 FIX_4OBJ_128 , const int16_t limit_flag /* i : flag to limit the bitrate increase */ #endif ) { int32_t element_brate_out; Loading @@ -182,7 +193,6 @@ int32_t ivas_interformat_brate( nBits = (int16_t) ( element_brate / FRAMES_PER_SEC ); if ( ism_imp == ISM_INACTIVE_IMP ) { nBits = BITS_ISM_INACTIVE; Loading @@ -192,6 +202,14 @@ int32_t ivas_interformat_brate( #ifdef TUNING_DISC_3_4obj if ( ism_mode == ISM_MASA_MODE_DISC && ( ( nchan_ism == 4 && element_brate == 24000 ) || ( nchan_ism == 3 && element_brate == 20000 ) ) ) /* this condition corresponds to the ivas_total_brate = 96000 and 3 objects */ { #ifdef FIX_4OBJ_128 if ( limit_flag && ( nchan_ism == 4 && element_brate == 24000 ) ) { return element_brate; } #endif if ( ism_imp == ISM_LOW_IMP ) { nBits = (int16_t) ( nBits * GAMMA_ISM_LOW_IMP4 ); Loading
lib_com/ivas_prot.h +3 −0 Original line number Diff line number Diff line Loading @@ -5079,6 +5079,9 @@ int32_t ivas_interformat_brate( 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 FIX_4OBJ_128 , const int16_t limit_flag /* i : flag to limit the bitrate increase */ #endif ); void ivas_combined_format_brate_sanity( Loading
lib_com/options.h +3 −0 Original line number Diff line number Diff line Loading @@ -179,6 +179,9 @@ #define REDUCE_OMASA_META_BITS /* Nokia: reduce metadata number of bits and fix directional metadata bit allocation */ #define OMASA_DIFFUSE_ISM_MERGE /* Nokia: Diffuse-energy retaining merging of ISM and MASA */ #define FIX_4OBJ_128 /* VA: fix to 4 ISMs 24 kbps case: when all objects are HIGH_IMP, keep 24 kbps bitrate, otherwise increase the 24 kbps bitrate */ #endif /* MASA_AND_OBJECTS */ Loading
lib_dec/ivas_omasa_dec.c +22 −2 Original line number Diff line number Diff line Loading @@ -59,7 +59,12 @@ void ivas_set_surplus_brate_dec( 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 ); *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 ); st_ivas->hCPE[0]->brate_surplus = st_ivas->hSCE[0]->element_brate - *ism_total_brate; Loading @@ -74,6 +79,16 @@ void ivas_set_surplus_brate_dec( } else if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC ) { #ifdef FIX_4OBJ_128 int16_t brate_limit_flag = 0; for ( n = 0; n < st_ivas->nchan_ism; n++ ) { brate_limit_flag += st_ivas->hIsmMetaData[n]->ism_imp; } brate_limit_flag = brate_limit_flag >= 10 ? 1 : 0; #endif ism_total_brate_ref = 0; for ( n = 0; n < st_ivas->nchan_ism; n++ ) { Loading @@ -90,7 +105,12 @@ 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 ); *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 FIX_4OBJ_128 , brate_limit_flag #endif ); } st_ivas->hCPE[0]->brate_surplus = ism_total_brate_ref - *ism_total_brate; Loading
lib_enc/ivas_ism_metadata_enc.c +15 −1 Original line number Diff line number Diff line Loading @@ -824,6 +824,15 @@ ivas_error ivas_ism_metadata_enc( if ( ism_mode == ISM_MASA_MODE_DISC ) { int16_t bits_ism, bits_element[MAX_NUM_OBJECTS]; #ifdef FIX_4OBJ_128 int16_t brate_limit_flag = 0; for ( ch = 0; ch < num_obj; ch++ ) { brate_limit_flag += ism_imp[ch]; } brate_limit_flag = brate_limit_flag >= 10 ? 1 : 0; #endif bits_ism = (int16_t) ( *ism_total_brate / FRAMES_PER_SECOND ); set_s( bits_element, bits_ism / num_obj, num_obj ); Loading @@ -833,7 +842,12 @@ ivas_error ivas_ism_metadata_enc( *ism_total_brate = 0; for ( ch = 0; ch < num_obj; ch++ ) { *ism_total_brate += ivas_interformat_brate( ISM_MASA_MODE_DISC, num_obj, hSCE[ch]->element_brate, ism_imp[ch] ); *ism_total_brate += ivas_interformat_brate( ISM_MASA_MODE_DISC, num_obj, hSCE[ch]->element_brate, ism_imp[ch] #ifdef FIX_4OBJ_128 , brate_limit_flag #endif ); } ism_metadata_flag_global = 1; } Loading