Loading lib_com/ivas_ism_com.c +3 −1 Original line number Diff line number Diff line Loading @@ -342,7 +342,7 @@ void ivas_ism_reset_metadata( hIsmMeta->last_true_azimuth = 0.f; hIsmMeta->last_elevation = 0.f; hIsmMeta->last_true_elevation = 0.f; hIsmMeta->ism_metadata_flag = 0; hIsmMeta->ism_metadata_flag = 1; hIsmMeta->radius_diff_cnt = 0; hIsmMeta->position_angle.angle1_diff_cnt = 0; hIsmMeta->position_angle.angle2_diff_cnt = 0; Loading @@ -364,7 +364,9 @@ void ivas_ism_reset_metadata_API( ISM_METADATA_HANDLE hIsmMeta /* i/o: ISM metadata handle */ ) { #ifndef ISM_NON_DIEGETIC_PAN hIsmMeta->ism_metadata_flag = 0; #endif ivas_ism_reset_metadata( hIsmMeta ); return; Loading lib_com/ivas_prot.h +4 −0 Original line number Diff line number Diff line Loading @@ -947,6 +947,10 @@ void ivas_ism_metadata_sid_enc( const int16_t md_diff_flag[], /* i : metadata differental flag */ BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ int16_t nb_bits_metadata[] /* o : number of metadata bits */ #ifdef ISM_NON_DIEGETIC_PAN ,const int32_t ism_total_brate, /* i : ISM total bitrate */ const int16_t ism_extended_metadata_flag /* i : Extended metadata flag */ #endif ); void ivas_ism_metadata_sid_dec( Loading lib_com/options.h +1 −0 Original line number Diff line number Diff line Loading @@ -148,6 +148,7 @@ #define NON_DIEGETIC_PAN #define FIX_CRASH_EVS_BITSTREAM_WITH_OUTPUT #define ISM_NON_DIEGETIC_PAN_AS_EXTENDED #define ISM_NON_DIEGETIC_PAN #define FIX_MDCT_BASED_BWD /* FhG: fixes for BWD for issues with reaction to transients for MDCT-stereo and MCT */ Loading lib_dec/ivas_ism_metadata_dec.c +95 −0 Original line number Diff line number Diff line Loading @@ -505,6 +505,7 @@ ivas_error ivas_ism_metadata_dec( /* IVAS_fmToDo: more work needed when the number of transported objects is not constant */ return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "wrong bit stream!" ); } #endif #ifdef FIX_419_ISM_BRATE_SW_DTX hSCE[ch]->hCoreCoder[0]->low_rate_mode = 0; #endif Loading Loading @@ -877,6 +878,7 @@ void ivas_ism_metadata_sid_dec( uint16_t bstr_meta[IVAS_SID_5k2 / FRAMES_PER_SEC], *bstr_orig; #ifdef ISM_NON_DIEGETIC_PAN uint16_t is_ndp; int16_t ism_extmeta_bitstream; #endif if ( ism_total_brate == FRAME_NO_DATA ) Loading Loading @@ -912,6 +914,18 @@ void ivas_ism_metadata_sid_dec( /* update the position in the bitstream */ st0->next_bit_pos += nchan_ism; #if defined ISM_NON_DIEGETIC_PAN && defined ISM_NON_DIEGETIC_PAN_AS_EXTENDED /* write extended metadata presence flag */ if ( ism_total_brate >= ISM_EXTENDED_METADATA_BRATE ) { ism_extmeta_bitstream = get_next_indice( st0, ISM_EXTENDED_METADATA_BITS ); } else { ism_extmeta_bitstream = 0; } #endif /* read SID metadata flag( one per object ) */ for ( ch = 0; ch < nchan_ism; ch++ ) { Loading Loading @@ -986,6 +1000,9 @@ void ivas_ism_metadata_sid_dec( { #ifdef ISM_NON_DIEGETIC_PAN #ifdef ISM_NON_DIEGETIC_PAN_AS_EXTENDED if ( ism_extmeta_bitstream && ism_mode == ISM_MODE_DISC ) { is_ndp = get_next_indice( st0, ISM_METADATA_IS_NDP_FLAG_BITS ); if ( is_ndp == 0 ) { Loading Loading @@ -1035,6 +1052,84 @@ void ivas_ism_metadata_sid_dec( hIsmMetaData->last_true_azimuth = hIsmMetaData->azimuth; hIsmMetaData->elevation = hIsmMetaData->elevation; } } else { /* Azimuth decoding */ idx_azimuth = get_next_indice( st0, nBits_azimuth ); hIsmMetaData->azimuth = ism_dequant_meta( idx_azimuth, ism_azimuth_borders, q_step, q_step_border, 1 << nBits_azimuth ); /* Elevation decoding */ idx_elevation = get_next_indice( st0, nBits_elevation ); hIsmMetaData->elevation = ism_dequant_meta( idx_elevation, ism_elevation_borders, q_step, q_step_border, 1 << nBits_elevation ); /* update last indexes to correspond to active frames coding */ if ( nBits_azimuth > ISM_AZIMUTH_NBITS ) { hIsmMetaData->position_angle.last_angle1_idx = idx_azimuth >> ( nBits_azimuth - ISM_AZIMUTH_NBITS ); hIsmMetaData->position_angle.last_angle2_idx = idx_elevation >> ( nBits_elevation - ISM_ELEVATION_NBITS ); } else { hIsmMetaData->position_angle.last_angle1_idx = idx_azimuth << ( ISM_AZIMUTH_NBITS - nBits_azimuth ); hIsmMetaData->position_angle.last_angle2_idx = idx_elevation << ( ISM_ELEVATION_NBITS - nBits_elevation ); } /* save for smoothing metadata evolution */ hIsmMetaData->last_true_azimuth = hIsmMetaData->azimuth; hIsmMetaData->last_true_elevation = hIsmMetaData->elevation; } #else is_ndp = get_next_indice( st0, ISM_METADATA_IS_NDP_FLAG_BITS ); if ( is_ndp == 0 ) { /* Azimuth decoding */ idx_azimuth = get_next_indice( st0, nBits_azimuth ); hIsmMetaData->azimuth = ism_dequant_meta( idx_azimuth, ism_azimuth_borders, q_step, q_step_border, 1 << nBits_azimuth ); /* Elevation decoding */ idx_elevation = get_next_indice( st0, nBits_elevation ); hIsmMetaData->elevation = ism_dequant_meta( idx_elevation, ism_elevation_borders, q_step, q_step_border, 1 << nBits_elevation ); /* update last indexes to correspond to active frames coding */ if ( nBits_azimuth > ISM_AZIMUTH_NBITS ) { hIsmMetaData->position_angle.last_angle1_idx = idx_azimuth >> ( nBits_azimuth - ISM_AZIMUTH_NBITS ); hIsmMetaData->position_angle.last_angle2_idx = idx_elevation >> ( nBits_elevation - ISM_ELEVATION_NBITS ); } else { hIsmMetaData->position_angle.last_angle1_idx = idx_azimuth << ( ISM_AZIMUTH_NBITS - nBits_azimuth ); hIsmMetaData->position_angle.last_angle2_idx = idx_elevation << ( ISM_ELEVATION_NBITS - nBits_elevation ); } /* save for smoothing metadata evolution */ hIsmMetaData->last_true_azimuth = hIsmMetaData->azimuth; hIsmMetaData->last_true_elevation = hIsmMetaData->elevation; } if ( is_ndp == 1 ) { /* Azimuth decoding */ idx_azimuth = get_next_indice( st0, nBits_azimuth ); hIsmMetaData->azimuth = ism_dequant_meta( idx_azimuth, ism_azimuth_borders, q_step, q_step_border, 1 << nBits_azimuth ); hIsmMetaData->elevation = 0.0f; /* update last indexes to correspond to active frames coding */ if ( nBits_azimuth > ISM_AZIMUTH_NBITS ) { hIsmMetaData->position_angle.last_angle1_idx = idx_azimuth >> ( nBits_azimuth - ISM_AZIMUTH_NBITS ); hIsmMetaData->position_angle.last_angle2_idx = 1 << ( ISM_ELEVATION_NBITS - 1 ); } else { hIsmMetaData->position_angle.last_angle1_idx = idx_azimuth << ( ISM_AZIMUTH_NBITS - nBits_azimuth ); hIsmMetaData->position_angle.last_angle2_idx = 1 << ( ISM_ELEVATION_NBITS - 1 ); } /* save for smoothing metadata evolution */ hIsmMetaData->last_true_azimuth = hIsmMetaData->azimuth; hIsmMetaData->elevation = hIsmMetaData->elevation; } #endif #else /* Azimuth decoding */ idx_azimuth = get_next_indice( st0, nBits_azimuth ); Loading lib_enc/ivas_ism_enc.c +7 −1 Original line number Diff line number Diff line Loading @@ -218,7 +218,13 @@ ivas_error ivas_ism_enc( if ( dtx_flag ) { ivas_ism_metadata_sid_enc( st_ivas->hISMDTX, flag_noisy_speech, nchan_ism, st_ivas->nchan_transport, st_ivas->ism_mode, st_ivas->hIsmMetaData, sid_flag, md_diff_flag, st_ivas->hSCE[st_ivas->nSCE - 1]->hMetaData, nb_bits_metadata ); ivas_ism_metadata_sid_enc( st_ivas->hISMDTX, flag_noisy_speech, nchan_ism, st_ivas->nchan_transport, st_ivas->ism_mode, st_ivas->hIsmMetaData, sid_flag, md_diff_flag, st_ivas->hSCE[st_ivas->nSCE - 1]->hMetaData, nb_bits_metadata #ifdef ISM_NON_DIEGETIC_PAN , st_ivas->hEncoderConfig->ivas_total_brate, st_ivas->hEncoderConfig->ism_extended_metadata_flag #endif ); } else if ( st_ivas->ism_mode == ISM_MODE_PARAM ) { Loading Loading
lib_com/ivas_ism_com.c +3 −1 Original line number Diff line number Diff line Loading @@ -342,7 +342,7 @@ void ivas_ism_reset_metadata( hIsmMeta->last_true_azimuth = 0.f; hIsmMeta->last_elevation = 0.f; hIsmMeta->last_true_elevation = 0.f; hIsmMeta->ism_metadata_flag = 0; hIsmMeta->ism_metadata_flag = 1; hIsmMeta->radius_diff_cnt = 0; hIsmMeta->position_angle.angle1_diff_cnt = 0; hIsmMeta->position_angle.angle2_diff_cnt = 0; Loading @@ -364,7 +364,9 @@ void ivas_ism_reset_metadata_API( ISM_METADATA_HANDLE hIsmMeta /* i/o: ISM metadata handle */ ) { #ifndef ISM_NON_DIEGETIC_PAN hIsmMeta->ism_metadata_flag = 0; #endif ivas_ism_reset_metadata( hIsmMeta ); return; Loading
lib_com/ivas_prot.h +4 −0 Original line number Diff line number Diff line Loading @@ -947,6 +947,10 @@ void ivas_ism_metadata_sid_enc( const int16_t md_diff_flag[], /* i : metadata differental flag */ BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ int16_t nb_bits_metadata[] /* o : number of metadata bits */ #ifdef ISM_NON_DIEGETIC_PAN ,const int32_t ism_total_brate, /* i : ISM total bitrate */ const int16_t ism_extended_metadata_flag /* i : Extended metadata flag */ #endif ); void ivas_ism_metadata_sid_dec( Loading
lib_com/options.h +1 −0 Original line number Diff line number Diff line Loading @@ -148,6 +148,7 @@ #define NON_DIEGETIC_PAN #define FIX_CRASH_EVS_BITSTREAM_WITH_OUTPUT #define ISM_NON_DIEGETIC_PAN_AS_EXTENDED #define ISM_NON_DIEGETIC_PAN #define FIX_MDCT_BASED_BWD /* FhG: fixes for BWD for issues with reaction to transients for MDCT-stereo and MCT */ Loading
lib_dec/ivas_ism_metadata_dec.c +95 −0 Original line number Diff line number Diff line Loading @@ -505,6 +505,7 @@ ivas_error ivas_ism_metadata_dec( /* IVAS_fmToDo: more work needed when the number of transported objects is not constant */ return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "wrong bit stream!" ); } #endif #ifdef FIX_419_ISM_BRATE_SW_DTX hSCE[ch]->hCoreCoder[0]->low_rate_mode = 0; #endif Loading Loading @@ -877,6 +878,7 @@ void ivas_ism_metadata_sid_dec( uint16_t bstr_meta[IVAS_SID_5k2 / FRAMES_PER_SEC], *bstr_orig; #ifdef ISM_NON_DIEGETIC_PAN uint16_t is_ndp; int16_t ism_extmeta_bitstream; #endif if ( ism_total_brate == FRAME_NO_DATA ) Loading Loading @@ -912,6 +914,18 @@ void ivas_ism_metadata_sid_dec( /* update the position in the bitstream */ st0->next_bit_pos += nchan_ism; #if defined ISM_NON_DIEGETIC_PAN && defined ISM_NON_DIEGETIC_PAN_AS_EXTENDED /* write extended metadata presence flag */ if ( ism_total_brate >= ISM_EXTENDED_METADATA_BRATE ) { ism_extmeta_bitstream = get_next_indice( st0, ISM_EXTENDED_METADATA_BITS ); } else { ism_extmeta_bitstream = 0; } #endif /* read SID metadata flag( one per object ) */ for ( ch = 0; ch < nchan_ism; ch++ ) { Loading Loading @@ -986,6 +1000,9 @@ void ivas_ism_metadata_sid_dec( { #ifdef ISM_NON_DIEGETIC_PAN #ifdef ISM_NON_DIEGETIC_PAN_AS_EXTENDED if ( ism_extmeta_bitstream && ism_mode == ISM_MODE_DISC ) { is_ndp = get_next_indice( st0, ISM_METADATA_IS_NDP_FLAG_BITS ); if ( is_ndp == 0 ) { Loading Loading @@ -1035,6 +1052,84 @@ void ivas_ism_metadata_sid_dec( hIsmMetaData->last_true_azimuth = hIsmMetaData->azimuth; hIsmMetaData->elevation = hIsmMetaData->elevation; } } else { /* Azimuth decoding */ idx_azimuth = get_next_indice( st0, nBits_azimuth ); hIsmMetaData->azimuth = ism_dequant_meta( idx_azimuth, ism_azimuth_borders, q_step, q_step_border, 1 << nBits_azimuth ); /* Elevation decoding */ idx_elevation = get_next_indice( st0, nBits_elevation ); hIsmMetaData->elevation = ism_dequant_meta( idx_elevation, ism_elevation_borders, q_step, q_step_border, 1 << nBits_elevation ); /* update last indexes to correspond to active frames coding */ if ( nBits_azimuth > ISM_AZIMUTH_NBITS ) { hIsmMetaData->position_angle.last_angle1_idx = idx_azimuth >> ( nBits_azimuth - ISM_AZIMUTH_NBITS ); hIsmMetaData->position_angle.last_angle2_idx = idx_elevation >> ( nBits_elevation - ISM_ELEVATION_NBITS ); } else { hIsmMetaData->position_angle.last_angle1_idx = idx_azimuth << ( ISM_AZIMUTH_NBITS - nBits_azimuth ); hIsmMetaData->position_angle.last_angle2_idx = idx_elevation << ( ISM_ELEVATION_NBITS - nBits_elevation ); } /* save for smoothing metadata evolution */ hIsmMetaData->last_true_azimuth = hIsmMetaData->azimuth; hIsmMetaData->last_true_elevation = hIsmMetaData->elevation; } #else is_ndp = get_next_indice( st0, ISM_METADATA_IS_NDP_FLAG_BITS ); if ( is_ndp == 0 ) { /* Azimuth decoding */ idx_azimuth = get_next_indice( st0, nBits_azimuth ); hIsmMetaData->azimuth = ism_dequant_meta( idx_azimuth, ism_azimuth_borders, q_step, q_step_border, 1 << nBits_azimuth ); /* Elevation decoding */ idx_elevation = get_next_indice( st0, nBits_elevation ); hIsmMetaData->elevation = ism_dequant_meta( idx_elevation, ism_elevation_borders, q_step, q_step_border, 1 << nBits_elevation ); /* update last indexes to correspond to active frames coding */ if ( nBits_azimuth > ISM_AZIMUTH_NBITS ) { hIsmMetaData->position_angle.last_angle1_idx = idx_azimuth >> ( nBits_azimuth - ISM_AZIMUTH_NBITS ); hIsmMetaData->position_angle.last_angle2_idx = idx_elevation >> ( nBits_elevation - ISM_ELEVATION_NBITS ); } else { hIsmMetaData->position_angle.last_angle1_idx = idx_azimuth << ( ISM_AZIMUTH_NBITS - nBits_azimuth ); hIsmMetaData->position_angle.last_angle2_idx = idx_elevation << ( ISM_ELEVATION_NBITS - nBits_elevation ); } /* save for smoothing metadata evolution */ hIsmMetaData->last_true_azimuth = hIsmMetaData->azimuth; hIsmMetaData->last_true_elevation = hIsmMetaData->elevation; } if ( is_ndp == 1 ) { /* Azimuth decoding */ idx_azimuth = get_next_indice( st0, nBits_azimuth ); hIsmMetaData->azimuth = ism_dequant_meta( idx_azimuth, ism_azimuth_borders, q_step, q_step_border, 1 << nBits_azimuth ); hIsmMetaData->elevation = 0.0f; /* update last indexes to correspond to active frames coding */ if ( nBits_azimuth > ISM_AZIMUTH_NBITS ) { hIsmMetaData->position_angle.last_angle1_idx = idx_azimuth >> ( nBits_azimuth - ISM_AZIMUTH_NBITS ); hIsmMetaData->position_angle.last_angle2_idx = 1 << ( ISM_ELEVATION_NBITS - 1 ); } else { hIsmMetaData->position_angle.last_angle1_idx = idx_azimuth << ( ISM_AZIMUTH_NBITS - nBits_azimuth ); hIsmMetaData->position_angle.last_angle2_idx = 1 << ( ISM_ELEVATION_NBITS - 1 ); } /* save for smoothing metadata evolution */ hIsmMetaData->last_true_azimuth = hIsmMetaData->azimuth; hIsmMetaData->elevation = hIsmMetaData->elevation; } #endif #else /* Azimuth decoding */ idx_azimuth = get_next_indice( st0, nBits_azimuth ); Loading
lib_enc/ivas_ism_enc.c +7 −1 Original line number Diff line number Diff line Loading @@ -218,7 +218,13 @@ ivas_error ivas_ism_enc( if ( dtx_flag ) { ivas_ism_metadata_sid_enc( st_ivas->hISMDTX, flag_noisy_speech, nchan_ism, st_ivas->nchan_transport, st_ivas->ism_mode, st_ivas->hIsmMetaData, sid_flag, md_diff_flag, st_ivas->hSCE[st_ivas->nSCE - 1]->hMetaData, nb_bits_metadata ); ivas_ism_metadata_sid_enc( st_ivas->hISMDTX, flag_noisy_speech, nchan_ism, st_ivas->nchan_transport, st_ivas->ism_mode, st_ivas->hIsmMetaData, sid_flag, md_diff_flag, st_ivas->hSCE[st_ivas->nSCE - 1]->hMetaData, nb_bits_metadata #ifdef ISM_NON_DIEGETIC_PAN , st_ivas->hEncoderConfig->ivas_total_brate, st_ivas->hEncoderConfig->ism_extended_metadata_flag #endif ); } else if ( st_ivas->ism_mode == ISM_MODE_PARAM ) { Loading