Loading lib_com/ivas_cnst.h +13 −3 Original line number Diff line number Diff line Loading @@ -374,17 +374,27 @@ typedef enum enum { IND_ISM_NUM_OBJECTS, IND_ISM_EXTENDED_FLAG = IND_ISM_NUM_OBJECTS + MAX_NUM_OBJECTS, #ifdef ISM_NON_DIEGETIC_PAN IND_ISM_EXTENDED_NDP_FLAG, #endif IND_ISM_METADATA_FLAG = IND_ISM_NUM_OBJECTS + MAX_NUM_OBJECTS, IND_ISM_VAD_FLAG = IND_ISM_METADATA_FLAG + MAX_NUM_OBJECTS, IND_ISM_NOISY_SPEECH_FLAG, #else IND_ISM_EXTENDED_FLAG = IND_ISM_NUM_OBJECTS + MAX_NUM_OBJECTS, IND_ISM_METADATA_FLAG, IND_ISM_VAD_FLAG = IND_ISM_METADATA_FLAG + MAX_NUM_OBJECTS, IND_ISM_NOISY_SPEECH_FLAG = IND_ISM_VAD_FLAG + MAX_NUM_OBJECTS, #endif IND_ISM_SCE_ID_DTX, IND_ISM_DTX_COH_SCA, #ifdef ISM_NON_DIEGETIC_PAN IND_ISM_EXTENDED_FLAG = IND_ISM_DTX_COH_SCA + MAX_NUM_OBJECTS, IND_ISM_EXTENDED_NDP_FLAG, /* ------------- loop for objects -------------- */ TAG_ISM_LOOP_START = IND_ISM_EXTENDED_NDP_FLAG + MAX_NUM_OBJECTS, #else /* ------------- loop for objects -------------- */ TAG_ISM_LOOP_START = IND_ISM_DTX_COH_SCA + MAX_NUM_OBJECTS, #endif #ifdef ISM_NON_DIEGETIC_PAN IND_ISM_NDP_FLAG = TAG_ISM_LOOP_START, #endif Loading lib_com/ivas_prot.h +3 −0 Original line number Diff line number Diff line Loading @@ -961,6 +961,9 @@ void ivas_ism_metadata_sid_enc( void ivas_ism_metadata_sid_dec( SCE_DEC_HANDLE hSCE[MAX_SCE], /* i/o: SCE encoder structure */ const int32_t ism_total_brate, /* i : ISms total bitrate */ #ifdef ISM_NON_DIEGETIC_PAN_SID const int32_t last_active_total_brate, /* i : last active total bitrate */ #endif const int16_t bfi, /* i : bfi flag */ const int16_t nchan_ism, /* i : number of objects */ const int16_t nchan_transport, /* i : number of transport channels */ Loading lib_dec/ivas_ism_dtx_dec.c +5 −1 Original line number Diff line number Diff line Loading @@ -145,7 +145,11 @@ ivas_error ivas_ism_dtx_dec( } /* Metadata decoding and dequantization */ ivas_ism_metadata_sid_dec( st_ivas->hSCE, ivas_total_brate, st_ivas->bfi, nchan_ism, st_ivas->nchan_transport, st_ivas->ism_mode, ivas_ism_metadata_sid_dec( st_ivas->hSCE, ivas_total_brate, #ifdef ISM_NON_DIEGETIC_PAN_SID st_ivas->last_active_ivas_total_brate, #endif st_ivas->bfi, nchan_ism, st_ivas->nchan_transport, st_ivas->ism_mode, &flag_noisy_speech, &sce_id_dtx, st_ivas->hIsmMetaData, nb_bits_metadata ); if ( ivas_total_brate == IVAS_SID_5k2 && !st_ivas->bfi ) Loading lib_dec/ivas_ism_metadata_dec.c +90 −40 Original line number Diff line number Diff line Loading @@ -224,16 +224,38 @@ ivas_error ivas_ism_metadata_dec( return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "wrong number of objects signalled!" ); } /* read extended metadata presence flag */ if ( ism_total_brate >= ISM_EXTENDED_METADATA_BRATE ) { ism_extmeta_bitstream = get_next_indice( st0, ISM_EXTENDED_METADATA_BITS ); #ifdef ISM_NON_DIEGETIC_PAN if ( ism_extmeta_bitstream ) /* Read ISM present flags (one per object) */ for ( ch = 0; ch < *nchan_transport; ch++ ) { ism_extmeta_bitstream += get_next_indice( st0, ISM_METADATA_IS_NDP_BITS ); ism_imp[ch] = get_next_indice( st0, ISM_METADATA_FLAG_BITS ); if ( ism_imp[ch] > ISM_NO_META ) { hIsmMeta[ch]->ism_metadata_flag = 1; } else { hIsmMeta[ch]->ism_metadata_flag = 0; } ism_metadata_flag_global |= hIsmMeta[ch]->ism_metadata_flag; } for ( ; ch < nchan_ism; ch++ ) { hIsmMeta[ch]->ism_metadata_flag = 1; ism_metadata_flag_global |= hIsmMeta[ch]->ism_metadata_flag; } #endif #ifndef ISM_NON_DIEGETIC_PAN /* read extended metadata presence flag */ if ( ism_total_brate >= ISM_EXTENDED_METADATA_BRATE ) { ism_extmeta_bitstream = get_next_indice( st0, ISM_EXTENDED_METADATA_BITS ); } /* Apply hysteresis in case rate switching causes fluctuation in presence of extended metadata */ if ( *ism_extmeta_active == -1 || *ism_extmeta_active == ism_extmeta_bitstream ) /* If first frame or bitstream matches internal state */ Loading @@ -250,7 +272,10 @@ ivas_error ivas_ism_metadata_dec( *ism_extmeta_cnt = 0; } } #endif #ifndef ISM_NON_DIEGETIC_PAN /* Read ISM present flags (one per object) */ for ( ch = 0; ch < *nchan_transport; ch++ ) { Loading @@ -273,7 +298,7 @@ ivas_error ivas_ism_metadata_dec( hIsmMeta[ch]->ism_metadata_flag = 1; ism_metadata_flag_global |= hIsmMeta[ch]->ism_metadata_flag; } #endif /* read VAD flag */ for ( ch = 0; ch < *nchan_transport; ch++ ) { Loading @@ -287,6 +312,35 @@ ivas_error ivas_ism_metadata_dec( } } #ifdef ISM_NON_DIEGETIC_PAN /* read extended metadata presence flag */ if ( ism_total_brate >= ISM_EXTENDED_METADATA_BRATE ) { ism_extmeta_bitstream = get_next_indice( st0, ISM_EXTENDED_METADATA_BITS ); if ( ism_extmeta_bitstream ) { ism_extmeta_bitstream += get_next_indice( st0, ISM_METADATA_IS_NDP_BITS ); } } /* Apply hysteresis in case rate switching causes fluctuation in presence of extended metadata */ if ( *ism_extmeta_active == -1 || *ism_extmeta_active == ism_extmeta_bitstream ) /* If first frame or bitstream matches internal state */ { *ism_extmeta_active = ism_extmeta_bitstream; *ism_extmeta_cnt = 0; } else { ( *ism_extmeta_cnt )++; if ( *ism_extmeta_cnt == ISM_METADATA_RS_MAX_FRAMES ) /* ISM_METADATA_RS_MAX_FRAMES change frames observed - update state */ { *ism_extmeta_active = ism_extmeta_bitstream; *ism_extmeta_cnt = 0; } } #endif if ( ism_metadata_flag_global ) { /*----------------------------------------------------------------* Loading Loading @@ -873,6 +927,9 @@ static int16_t decode_radius( void ivas_ism_metadata_sid_dec( SCE_DEC_HANDLE hSCE[MAX_SCE], /* i/o: SCE encoder structure */ const int32_t ism_total_brate, /* i : ISms total bitrate */ #ifdef ISM_NON_DIEGETIC_PAN_SID const int32_t last_active_total_brate, /* i : last active total bitrate */ #endif const int16_t bfi, /* i : bfi flag */ const int16_t nchan_ism, /* i : number of objects */ const int16_t nchan_transport, /* i : number of transport channels*/ Loading Loading @@ -937,36 +994,6 @@ void ivas_ism_metadata_sid_dec( md_diff_flag[ch] = get_next_indice( st0, 1 ); } #ifdef ISM_NON_DIEGETIC_PAN_SID ism_extmeta_bitstream = 0; if ( ism_total_brate >= ISM_EXTENDED_METADATA_BRATE ) { ism_metadata_flag_global = 0; /* read SID metadata flag( one per object ) */ for ( ch = 0; ch < nchan_ism; ch++ ) { if ( md_diff_flag[ch] ) { ism_metadata_flag_global |= hIsmMeta[ch]->ism_metadata_flag; } } if ( ism_metadata_flag_global ) { ism_extmeta_bitstream = get_next_indice( st0, ISM_EXTENDED_METADATA_BITS ); if ( ism_extmeta_bitstream ) { for ( ch = 0; ch < nchan_ism; ch++ ) { if ( md_diff_flag[ch] ) { hIsmMeta[ch]->ism_metadata_flag += get_next_indice( st0, ISM_METADATA_IS_NDP_BITS ); } } } } } #endif /*----------------------------------------------------------------* * Set quantization bits based on the number of coded objects *----------------------------------------------------------------*/ Loading Loading @@ -1025,17 +1052,40 @@ void ivas_ism_metadata_sid_dec( hSCE[*sce_id_dtx]->hCoreCoder[0]->hFdCngDec->hFdCngCom->coherence = hSCE[!*sce_id_dtx]->hCoreCoder[0]->hFdCngDec->hFdCngCom->coherence; } #ifdef ISM_NON_DIEGETIC_PAN_SID ism_extmeta_bitstream = 0; if ( last_active_total_brate >= ISM_EXTENDED_METADATA_BRATE ) { ism_metadata_flag_global = 0; /* read SID metadata flag( one per object ) */ for ( ch = 0; ch < nchan_ism; ch++ ) { ism_metadata_flag_global |= md_diff_flag[ch]; } if ( ism_metadata_flag_global ) { ism_extmeta_bitstream = get_next_indice( st0, ISM_EXTENDED_METADATA_BITS ); } } #endif /*----------------------------------------------------------------* * Metadata decoding and dequantization, loop over all objects *----------------------------------------------------------------*/ for ( ch = 0; ch < nchan_ism; ch++ ) { hIsmMetaData = hIsmMeta[ch]; if ( md_diff_flag[ch] == 1 ) { hIsmMetaData = hIsmMeta[ch]; #ifdef ISM_NON_DIEGETIC_PAN_SID if ( ism_extmeta_bitstream ) { hIsmMetaData->ism_metadata_flag = get_next_indice( st0, ISM_METADATA_IS_NDP_BITS ) + 1; } #endif /* 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 ); Loading lib_enc/ivas_ism_metadata_enc.c +55 −38 Original line number Diff line number Diff line Loading @@ -308,12 +308,19 @@ ivas_error ivas_ism_metadata_enc( #ifdef ISM_NON_DIEGETIC_PAN /* write ISM metadata flag (one per object) */ for ( ch = 0; ch < nchan_transport; ch++ ) { push_indice( hBstr, IND_ISM_METADATA_FLAG, ism_imp[ch], ISM_METADATA_FLAG_BITS ); } for ( ch = 0; ch < nchan_ism; ch++ ) { ism_metadata_flag_global |= hIsmMeta[ch]->ism_metadata_flag; } #endif #ifndef ISM_NON_DIEGETIC_PAN /* write extended metadata presence flag */ if ( ism_total_brate >= ISM_EXTENDED_METADATA_BRATE ) { Loading @@ -332,14 +339,15 @@ ivas_error ivas_ism_metadata_enc( } #endif } #endif #ifndef ISM_NON_DIEGETIC_PAN /* write ISM metadata flag (one per object) */ for ( ch = 0; ch < nchan_transport; ch++ ) { push_indice( hBstr, IND_ISM_METADATA_FLAG, ism_imp[ch], ISM_METADATA_FLAG_BITS ); } #ifndef ISM_NON_DIEGETIC_PAN for ( ch = 0; ch < nchan_ism; ch++ ) { ism_metadata_flag_global |= hIsmMeta[ch]->ism_metadata_flag; Loading @@ -359,6 +367,25 @@ ivas_error ivas_ism_metadata_enc( } } #ifdef ISM_NON_DIEGETIC_PAN /* write extended metadata presence flag */ if ( ism_total_brate >= ISM_EXTENDED_METADATA_BRATE ) { push_indice( hBstr, IND_ISM_EXTENDED_FLAG, ism_extended_metadata_flag, ISM_EXTENDED_METADATA_BITS ); if ( ism_extended_metadata_flag ) { if ( ism_metadata_flag_global & 0x2 ) { push_indice( hBstr, IND_ISM_EXTENDED_NDP_FLAG, 1, ISM_METADATA_IS_NDP_BITS ); } else { push_indice( hBstr, IND_ISM_EXTENDED_NDP_FLAG, 0, ISM_METADATA_IS_NDP_BITS ); } } } #endif if ( ism_metadata_flag_global ) { /*----------------------------------------------------------------* Loading Loading @@ -1159,43 +1186,6 @@ void ivas_ism_metadata_sid_enc( push_indice( hBstr, IND_ISM_METADATA_FLAG, md_diff_flag[ch], 1 ); } #ifdef ISM_NON_DIEGETIC_PAN_SID if ( ism_total_brate >= ISM_EXTENDED_METADATA_BRATE ) { ism_metadata_flag_global = 0; for ( ch = 0; ch < nchan_ism; ch++ ) { if ( md_diff_flag[ch] ) { ism_metadata_flag_global |= hIsmMeta[ch]->ism_metadata_flag; } } if ( ism_metadata_flag_global ) { push_indice( hBstr, IND_ISM_EXTENDED_FLAG, ism_extended_metadata_flag, ISM_EXTENDED_METADATA_BITS ); } if ( ism_extended_metadata_flag ) { for ( ch = 0; ch < nchan_ism; ch++ ) { if ( md_diff_flag[ch] ) { hIsmMetaData = hIsmMeta[ch]; if ( hIsmMetaData->ism_metadata_flag == 2 ) { push_indice( hBstr, IND_ISM_NDP_FLAG, 1, ISM_METADATA_IS_NDP_BITS ); } else { push_indice( hBstr, IND_ISM_NDP_FLAG, 0, ISM_METADATA_IS_NDP_BITS ); } } } } } #endif /*----------------------------------------------------------------* * Set quantization bits based on the number of coded objects *----------------------------------------------------------------*/ Loading Loading @@ -1245,6 +1235,24 @@ void ivas_ism_metadata_sid_enc( } } #ifdef ISM_NON_DIEGETIC_PAN_SID ism_metadata_flag_global = 0; if ( ism_total_brate >= ISM_EXTENDED_METADATA_BRATE && ism_extended_metadata_flag ) { for ( ch = 0; ch < nchan_ism; ch++ ) { if ( md_diff_flag[ch] ) { ism_metadata_flag_global |= hIsmMeta[ch]->ism_metadata_flag; } } if ( ism_metadata_flag_global ) { push_indice( hBstr, IND_ISM_EXTENDED_FLAG, ism_extended_metadata_flag, ISM_EXTENDED_METADATA_BITS ); } } #endif /*----------------------------------------------------------------* * Metadata quantization and coding, loop over all objects *----------------------------------------------------------------*/ Loading @@ -1256,6 +1264,7 @@ void ivas_ism_metadata_sid_enc( #ifdef ISM_NON_DIEGETIC_PAN_SID if ( hIsmMetaData->ism_metadata_flag == 2 && ism_extended_metadata_flag ) { push_indice( hBstr, IND_ISM_NDP_FLAG, 1, ISM_METADATA_IS_NDP_BITS ); idx_azimuth = ism_quant_meta( hIsmMetaData->azimuth, &valQ, ism_azimuth_borders, q_step, q_step_border, 1 << nBits_azimuth ); push_indice( hBstr, IND_ISM_AZIMUTH, idx_azimuth, nBits_azimuth ); Loading @@ -1272,6 +1281,11 @@ void ivas_ism_metadata_sid_enc( } else { hIsmMetaData = hIsmMeta[ch]; if ( hIsmMetaData->ism_metadata_flag == 1 ) { push_indice( hBstr, IND_ISM_NDP_FLAG, 0, ISM_METADATA_IS_NDP_BITS ); } #endif idx_azimuth = ism_quant_meta( hIsmMetaData->azimuth, &valQ, ism_azimuth_borders, q_step, q_step_border, 1 << nBits_azimuth ); idx_elevation = ism_quant_meta( hIsmMetaData->elevation, &valQ, ism_elevation_borders, q_step, q_step_border, 1 << nBits_elevation ); Loading @@ -1292,6 +1306,9 @@ void ivas_ism_metadata_sid_enc( } #ifdef ISM_NON_DIEGETIC_PAN_SID } hIsmMetaData->last_azimuth = hIsmMetaData->azimuth; hIsmMetaData->elevation = hIsmMetaData->elevation; hIsmMetaData->last_ism_metadata_flag = hIsmMetaData->ism_metadata_flag; #endif #ifdef FIX_387_ISM_MD_FEC Loading Loading
lib_com/ivas_cnst.h +13 −3 Original line number Diff line number Diff line Loading @@ -374,17 +374,27 @@ typedef enum enum { IND_ISM_NUM_OBJECTS, IND_ISM_EXTENDED_FLAG = IND_ISM_NUM_OBJECTS + MAX_NUM_OBJECTS, #ifdef ISM_NON_DIEGETIC_PAN IND_ISM_EXTENDED_NDP_FLAG, #endif IND_ISM_METADATA_FLAG = IND_ISM_NUM_OBJECTS + MAX_NUM_OBJECTS, IND_ISM_VAD_FLAG = IND_ISM_METADATA_FLAG + MAX_NUM_OBJECTS, IND_ISM_NOISY_SPEECH_FLAG, #else IND_ISM_EXTENDED_FLAG = IND_ISM_NUM_OBJECTS + MAX_NUM_OBJECTS, IND_ISM_METADATA_FLAG, IND_ISM_VAD_FLAG = IND_ISM_METADATA_FLAG + MAX_NUM_OBJECTS, IND_ISM_NOISY_SPEECH_FLAG = IND_ISM_VAD_FLAG + MAX_NUM_OBJECTS, #endif IND_ISM_SCE_ID_DTX, IND_ISM_DTX_COH_SCA, #ifdef ISM_NON_DIEGETIC_PAN IND_ISM_EXTENDED_FLAG = IND_ISM_DTX_COH_SCA + MAX_NUM_OBJECTS, IND_ISM_EXTENDED_NDP_FLAG, /* ------------- loop for objects -------------- */ TAG_ISM_LOOP_START = IND_ISM_EXTENDED_NDP_FLAG + MAX_NUM_OBJECTS, #else /* ------------- loop for objects -------------- */ TAG_ISM_LOOP_START = IND_ISM_DTX_COH_SCA + MAX_NUM_OBJECTS, #endif #ifdef ISM_NON_DIEGETIC_PAN IND_ISM_NDP_FLAG = TAG_ISM_LOOP_START, #endif Loading
lib_com/ivas_prot.h +3 −0 Original line number Diff line number Diff line Loading @@ -961,6 +961,9 @@ void ivas_ism_metadata_sid_enc( void ivas_ism_metadata_sid_dec( SCE_DEC_HANDLE hSCE[MAX_SCE], /* i/o: SCE encoder structure */ const int32_t ism_total_brate, /* i : ISms total bitrate */ #ifdef ISM_NON_DIEGETIC_PAN_SID const int32_t last_active_total_brate, /* i : last active total bitrate */ #endif const int16_t bfi, /* i : bfi flag */ const int16_t nchan_ism, /* i : number of objects */ const int16_t nchan_transport, /* i : number of transport channels */ Loading
lib_dec/ivas_ism_dtx_dec.c +5 −1 Original line number Diff line number Diff line Loading @@ -145,7 +145,11 @@ ivas_error ivas_ism_dtx_dec( } /* Metadata decoding and dequantization */ ivas_ism_metadata_sid_dec( st_ivas->hSCE, ivas_total_brate, st_ivas->bfi, nchan_ism, st_ivas->nchan_transport, st_ivas->ism_mode, ivas_ism_metadata_sid_dec( st_ivas->hSCE, ivas_total_brate, #ifdef ISM_NON_DIEGETIC_PAN_SID st_ivas->last_active_ivas_total_brate, #endif st_ivas->bfi, nchan_ism, st_ivas->nchan_transport, st_ivas->ism_mode, &flag_noisy_speech, &sce_id_dtx, st_ivas->hIsmMetaData, nb_bits_metadata ); if ( ivas_total_brate == IVAS_SID_5k2 && !st_ivas->bfi ) Loading
lib_dec/ivas_ism_metadata_dec.c +90 −40 Original line number Diff line number Diff line Loading @@ -224,16 +224,38 @@ ivas_error ivas_ism_metadata_dec( return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "wrong number of objects signalled!" ); } /* read extended metadata presence flag */ if ( ism_total_brate >= ISM_EXTENDED_METADATA_BRATE ) { ism_extmeta_bitstream = get_next_indice( st0, ISM_EXTENDED_METADATA_BITS ); #ifdef ISM_NON_DIEGETIC_PAN if ( ism_extmeta_bitstream ) /* Read ISM present flags (one per object) */ for ( ch = 0; ch < *nchan_transport; ch++ ) { ism_extmeta_bitstream += get_next_indice( st0, ISM_METADATA_IS_NDP_BITS ); ism_imp[ch] = get_next_indice( st0, ISM_METADATA_FLAG_BITS ); if ( ism_imp[ch] > ISM_NO_META ) { hIsmMeta[ch]->ism_metadata_flag = 1; } else { hIsmMeta[ch]->ism_metadata_flag = 0; } ism_metadata_flag_global |= hIsmMeta[ch]->ism_metadata_flag; } for ( ; ch < nchan_ism; ch++ ) { hIsmMeta[ch]->ism_metadata_flag = 1; ism_metadata_flag_global |= hIsmMeta[ch]->ism_metadata_flag; } #endif #ifndef ISM_NON_DIEGETIC_PAN /* read extended metadata presence flag */ if ( ism_total_brate >= ISM_EXTENDED_METADATA_BRATE ) { ism_extmeta_bitstream = get_next_indice( st0, ISM_EXTENDED_METADATA_BITS ); } /* Apply hysteresis in case rate switching causes fluctuation in presence of extended metadata */ if ( *ism_extmeta_active == -1 || *ism_extmeta_active == ism_extmeta_bitstream ) /* If first frame or bitstream matches internal state */ Loading @@ -250,7 +272,10 @@ ivas_error ivas_ism_metadata_dec( *ism_extmeta_cnt = 0; } } #endif #ifndef ISM_NON_DIEGETIC_PAN /* Read ISM present flags (one per object) */ for ( ch = 0; ch < *nchan_transport; ch++ ) { Loading @@ -273,7 +298,7 @@ ivas_error ivas_ism_metadata_dec( hIsmMeta[ch]->ism_metadata_flag = 1; ism_metadata_flag_global |= hIsmMeta[ch]->ism_metadata_flag; } #endif /* read VAD flag */ for ( ch = 0; ch < *nchan_transport; ch++ ) { Loading @@ -287,6 +312,35 @@ ivas_error ivas_ism_metadata_dec( } } #ifdef ISM_NON_DIEGETIC_PAN /* read extended metadata presence flag */ if ( ism_total_brate >= ISM_EXTENDED_METADATA_BRATE ) { ism_extmeta_bitstream = get_next_indice( st0, ISM_EXTENDED_METADATA_BITS ); if ( ism_extmeta_bitstream ) { ism_extmeta_bitstream += get_next_indice( st0, ISM_METADATA_IS_NDP_BITS ); } } /* Apply hysteresis in case rate switching causes fluctuation in presence of extended metadata */ if ( *ism_extmeta_active == -1 || *ism_extmeta_active == ism_extmeta_bitstream ) /* If first frame or bitstream matches internal state */ { *ism_extmeta_active = ism_extmeta_bitstream; *ism_extmeta_cnt = 0; } else { ( *ism_extmeta_cnt )++; if ( *ism_extmeta_cnt == ISM_METADATA_RS_MAX_FRAMES ) /* ISM_METADATA_RS_MAX_FRAMES change frames observed - update state */ { *ism_extmeta_active = ism_extmeta_bitstream; *ism_extmeta_cnt = 0; } } #endif if ( ism_metadata_flag_global ) { /*----------------------------------------------------------------* Loading Loading @@ -873,6 +927,9 @@ static int16_t decode_radius( void ivas_ism_metadata_sid_dec( SCE_DEC_HANDLE hSCE[MAX_SCE], /* i/o: SCE encoder structure */ const int32_t ism_total_brate, /* i : ISms total bitrate */ #ifdef ISM_NON_DIEGETIC_PAN_SID const int32_t last_active_total_brate, /* i : last active total bitrate */ #endif const int16_t bfi, /* i : bfi flag */ const int16_t nchan_ism, /* i : number of objects */ const int16_t nchan_transport, /* i : number of transport channels*/ Loading Loading @@ -937,36 +994,6 @@ void ivas_ism_metadata_sid_dec( md_diff_flag[ch] = get_next_indice( st0, 1 ); } #ifdef ISM_NON_DIEGETIC_PAN_SID ism_extmeta_bitstream = 0; if ( ism_total_brate >= ISM_EXTENDED_METADATA_BRATE ) { ism_metadata_flag_global = 0; /* read SID metadata flag( one per object ) */ for ( ch = 0; ch < nchan_ism; ch++ ) { if ( md_diff_flag[ch] ) { ism_metadata_flag_global |= hIsmMeta[ch]->ism_metadata_flag; } } if ( ism_metadata_flag_global ) { ism_extmeta_bitstream = get_next_indice( st0, ISM_EXTENDED_METADATA_BITS ); if ( ism_extmeta_bitstream ) { for ( ch = 0; ch < nchan_ism; ch++ ) { if ( md_diff_flag[ch] ) { hIsmMeta[ch]->ism_metadata_flag += get_next_indice( st0, ISM_METADATA_IS_NDP_BITS ); } } } } } #endif /*----------------------------------------------------------------* * Set quantization bits based on the number of coded objects *----------------------------------------------------------------*/ Loading Loading @@ -1025,17 +1052,40 @@ void ivas_ism_metadata_sid_dec( hSCE[*sce_id_dtx]->hCoreCoder[0]->hFdCngDec->hFdCngCom->coherence = hSCE[!*sce_id_dtx]->hCoreCoder[0]->hFdCngDec->hFdCngCom->coherence; } #ifdef ISM_NON_DIEGETIC_PAN_SID ism_extmeta_bitstream = 0; if ( last_active_total_brate >= ISM_EXTENDED_METADATA_BRATE ) { ism_metadata_flag_global = 0; /* read SID metadata flag( one per object ) */ for ( ch = 0; ch < nchan_ism; ch++ ) { ism_metadata_flag_global |= md_diff_flag[ch]; } if ( ism_metadata_flag_global ) { ism_extmeta_bitstream = get_next_indice( st0, ISM_EXTENDED_METADATA_BITS ); } } #endif /*----------------------------------------------------------------* * Metadata decoding and dequantization, loop over all objects *----------------------------------------------------------------*/ for ( ch = 0; ch < nchan_ism; ch++ ) { hIsmMetaData = hIsmMeta[ch]; if ( md_diff_flag[ch] == 1 ) { hIsmMetaData = hIsmMeta[ch]; #ifdef ISM_NON_DIEGETIC_PAN_SID if ( ism_extmeta_bitstream ) { hIsmMetaData->ism_metadata_flag = get_next_indice( st0, ISM_METADATA_IS_NDP_BITS ) + 1; } #endif /* 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 ); Loading
lib_enc/ivas_ism_metadata_enc.c +55 −38 Original line number Diff line number Diff line Loading @@ -308,12 +308,19 @@ ivas_error ivas_ism_metadata_enc( #ifdef ISM_NON_DIEGETIC_PAN /* write ISM metadata flag (one per object) */ for ( ch = 0; ch < nchan_transport; ch++ ) { push_indice( hBstr, IND_ISM_METADATA_FLAG, ism_imp[ch], ISM_METADATA_FLAG_BITS ); } for ( ch = 0; ch < nchan_ism; ch++ ) { ism_metadata_flag_global |= hIsmMeta[ch]->ism_metadata_flag; } #endif #ifndef ISM_NON_DIEGETIC_PAN /* write extended metadata presence flag */ if ( ism_total_brate >= ISM_EXTENDED_METADATA_BRATE ) { Loading @@ -332,14 +339,15 @@ ivas_error ivas_ism_metadata_enc( } #endif } #endif #ifndef ISM_NON_DIEGETIC_PAN /* write ISM metadata flag (one per object) */ for ( ch = 0; ch < nchan_transport; ch++ ) { push_indice( hBstr, IND_ISM_METADATA_FLAG, ism_imp[ch], ISM_METADATA_FLAG_BITS ); } #ifndef ISM_NON_DIEGETIC_PAN for ( ch = 0; ch < nchan_ism; ch++ ) { ism_metadata_flag_global |= hIsmMeta[ch]->ism_metadata_flag; Loading @@ -359,6 +367,25 @@ ivas_error ivas_ism_metadata_enc( } } #ifdef ISM_NON_DIEGETIC_PAN /* write extended metadata presence flag */ if ( ism_total_brate >= ISM_EXTENDED_METADATA_BRATE ) { push_indice( hBstr, IND_ISM_EXTENDED_FLAG, ism_extended_metadata_flag, ISM_EXTENDED_METADATA_BITS ); if ( ism_extended_metadata_flag ) { if ( ism_metadata_flag_global & 0x2 ) { push_indice( hBstr, IND_ISM_EXTENDED_NDP_FLAG, 1, ISM_METADATA_IS_NDP_BITS ); } else { push_indice( hBstr, IND_ISM_EXTENDED_NDP_FLAG, 0, ISM_METADATA_IS_NDP_BITS ); } } } #endif if ( ism_metadata_flag_global ) { /*----------------------------------------------------------------* Loading Loading @@ -1159,43 +1186,6 @@ void ivas_ism_metadata_sid_enc( push_indice( hBstr, IND_ISM_METADATA_FLAG, md_diff_flag[ch], 1 ); } #ifdef ISM_NON_DIEGETIC_PAN_SID if ( ism_total_brate >= ISM_EXTENDED_METADATA_BRATE ) { ism_metadata_flag_global = 0; for ( ch = 0; ch < nchan_ism; ch++ ) { if ( md_diff_flag[ch] ) { ism_metadata_flag_global |= hIsmMeta[ch]->ism_metadata_flag; } } if ( ism_metadata_flag_global ) { push_indice( hBstr, IND_ISM_EXTENDED_FLAG, ism_extended_metadata_flag, ISM_EXTENDED_METADATA_BITS ); } if ( ism_extended_metadata_flag ) { for ( ch = 0; ch < nchan_ism; ch++ ) { if ( md_diff_flag[ch] ) { hIsmMetaData = hIsmMeta[ch]; if ( hIsmMetaData->ism_metadata_flag == 2 ) { push_indice( hBstr, IND_ISM_NDP_FLAG, 1, ISM_METADATA_IS_NDP_BITS ); } else { push_indice( hBstr, IND_ISM_NDP_FLAG, 0, ISM_METADATA_IS_NDP_BITS ); } } } } } #endif /*----------------------------------------------------------------* * Set quantization bits based on the number of coded objects *----------------------------------------------------------------*/ Loading Loading @@ -1245,6 +1235,24 @@ void ivas_ism_metadata_sid_enc( } } #ifdef ISM_NON_DIEGETIC_PAN_SID ism_metadata_flag_global = 0; if ( ism_total_brate >= ISM_EXTENDED_METADATA_BRATE && ism_extended_metadata_flag ) { for ( ch = 0; ch < nchan_ism; ch++ ) { if ( md_diff_flag[ch] ) { ism_metadata_flag_global |= hIsmMeta[ch]->ism_metadata_flag; } } if ( ism_metadata_flag_global ) { push_indice( hBstr, IND_ISM_EXTENDED_FLAG, ism_extended_metadata_flag, ISM_EXTENDED_METADATA_BITS ); } } #endif /*----------------------------------------------------------------* * Metadata quantization and coding, loop over all objects *----------------------------------------------------------------*/ Loading @@ -1256,6 +1264,7 @@ void ivas_ism_metadata_sid_enc( #ifdef ISM_NON_DIEGETIC_PAN_SID if ( hIsmMetaData->ism_metadata_flag == 2 && ism_extended_metadata_flag ) { push_indice( hBstr, IND_ISM_NDP_FLAG, 1, ISM_METADATA_IS_NDP_BITS ); idx_azimuth = ism_quant_meta( hIsmMetaData->azimuth, &valQ, ism_azimuth_borders, q_step, q_step_border, 1 << nBits_azimuth ); push_indice( hBstr, IND_ISM_AZIMUTH, idx_azimuth, nBits_azimuth ); Loading @@ -1272,6 +1281,11 @@ void ivas_ism_metadata_sid_enc( } else { hIsmMetaData = hIsmMeta[ch]; if ( hIsmMetaData->ism_metadata_flag == 1 ) { push_indice( hBstr, IND_ISM_NDP_FLAG, 0, ISM_METADATA_IS_NDP_BITS ); } #endif idx_azimuth = ism_quant_meta( hIsmMetaData->azimuth, &valQ, ism_azimuth_borders, q_step, q_step_border, 1 << nBits_azimuth ); idx_elevation = ism_quant_meta( hIsmMetaData->elevation, &valQ, ism_elevation_borders, q_step, q_step_border, 1 << nBits_elevation ); Loading @@ -1292,6 +1306,9 @@ void ivas_ism_metadata_sid_enc( } #ifdef ISM_NON_DIEGETIC_PAN_SID } hIsmMetaData->last_azimuth = hIsmMetaData->azimuth; hIsmMetaData->elevation = hIsmMetaData->elevation; hIsmMetaData->last_ism_metadata_flag = hIsmMetaData->ism_metadata_flag; #endif #ifdef FIX_387_ISM_MD_FEC Loading