Commit cc009bc6 authored by emerit's avatar emerit
Browse files

ism no diegetic on for bitrate >= 64 kb and ism

parent e1dba184
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -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;
@@ -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;
+4 −0
Original line number Diff line number Diff line
@@ -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(
+1 −0
Original line number Diff line number Diff line
@@ -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 */
+95 −0
Original line number Diff line number Diff line
@@ -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
@@ -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 )
@@ -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++ )
        {
@@ -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 )
                    {
@@ -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 );
+7 −1
Original line number Diff line number Diff line
@@ -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