Commit f245b7f1 authored by emerit's avatar emerit
Browse files

add flag to signal non diegetic object in bitstream

parent cbbc052c
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -375,6 +375,9 @@ 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_VAD_FLAG = IND_ISM_METADATA_FLAG + MAX_NUM_OBJECTS,
    IND_ISM_NOISY_SPEECH_FLAG = IND_ISM_VAD_FLAG + MAX_NUM_OBJECTS,
+3 −0
Original line number Diff line number Diff line
@@ -135,6 +135,9 @@ ivas_error ivas_ism_config(
        if ( ism_total_brate >= ISM_EXTENDED_METADATA_BRATE )
        {
            nb_bits_metadata[0] += ISM_EXTENDED_METADATA_BITS;
#ifdef ISM_NON_DIEGETIC_PAN
            nb_bits_metadata[0] += ISM_METADATA_IS_NDP_FLAG_BITS;
#endif
        }
        nb_bits_metadata[0] += n_ISms * ISM_METADATA_FLAG_BITS + nchan_ism;

+0 −3
Original line number Diff line number Diff line
@@ -143,10 +143,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                    ISM_NON_DIEGETIC_PAN_EROOR_ON_WRONG_OUTPUT_FORMAT


#define FIX_CLANG_WARNING

+0 −7
Original line number Diff line number Diff line
@@ -163,13 +163,6 @@ ivas_error ivas_dec(
            }
        }

#ifdef ISM_NON_DIEGETIC_PAN_EROOR_ON_WRONG_OUTPUT_FORMAT
        if ( ( st_ivas->ism_extmeta_active & 0x2 ) && ( st_ivas->ism_mode != ISM_MODE_ISM || ( st_ivas->hDecoderConfig->output_config != AUDIO_CONFIG_BINAURAL && st_ivas->hDecoderConfig->output_config != AUDIO_CONFIG_BINAURAL_ROOM && st_ivas->hDecoderConfig->output_config != AUDIO_CONFIG_STEREO ) ) ) /* non diegetic input stream but unsupported output format*/
        {
            return IVAS_ERR_INVALID_OUTPUT_FORMAT;
        }
#endif

        for ( n = 0; n < st_ivas->nchan_transport; n++ )
        {
            if ( ( error = ivas_sce_dec( st_ivas, n, &output[n], output_frame, nb_bits_metadata[n] ) ) != IVAS_ERR_OK )
+6 −107
Original line number Diff line number Diff line
@@ -227,6 +227,9 @@ ivas_error ivas_ism_metadata_dec(
        if ( ism_total_brate >= ISM_EXTENDED_METADATA_BRATE )
        {
            ism_extmeta_bitstream = get_next_indice( st0, ISM_EXTENDED_METADATA_BITS );
#ifdef ISM_NON_DIEGETIC_PAN
            ism_extmeta_bitstream += get_next_indice( st0, ISM_METADATA_IS_NDP_FLAG_BITS );
#endif
        }
        /* 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 */
@@ -304,13 +307,7 @@ ivas_error ivas_ism_metadata_dec(
                flag_abs_orientation = 0;
                flag_abs_radius = 0;
#ifdef ISM_NON_DIEGETIC_PAN
#ifdef ISM_NON_DIEGETIC_PAN_AS_EXTENDED
                if ( hIsmMetaData->ism_metadata_flag && ism_extmeta_bitstream )
                {
                    hIsmMetaData->ism_metadata_flag += get_next_indice( st0, ISM_METADATA_IS_NDP_FLAG_BITS );
                }
#else
                if ( hIsmMetaData->ism_metadata_flag )
                if ( hIsmMetaData->ism_metadata_flag && ( ism_extmeta_bitstream && 0x2 ) )
                {
                    hIsmMetaData->ism_metadata_flag += get_next_indice( st0, ISM_METADATA_IS_NDP_FLAG_BITS );
                }
@@ -318,7 +315,7 @@ ivas_error ivas_ism_metadata_dec(

                if ( hIsmMetaData->ism_metadata_flag == 2 )
                {
#ifdef ISM_NON_DIEGETIC_PAN_EROOR_ON_WRONG_OUTPUT_FORMAT
#ifdef ISM_NON_DIEGETIC_PAN_ERROR_ON_WRONG_OUTPUT_FORMAT
                    ism_extmeta_bitstream = ism_extmeta_bitstream | 0x2;
#endif
                    /* Azimuth/Elevation dequantization */
@@ -345,7 +342,7 @@ ivas_error ivas_ism_metadata_dec(
                        nb_bits_metadata[ch] = st0->next_bit_pos - nb_bits_start;
                    }
                }

#ifdef ISM_NON_DIEGETIC_PAN
                if ( hIsmMeta[ch]->ism_metadata_flag == 1 )
                {
#else
@@ -385,11 +382,7 @@ ivas_error ivas_ism_metadata_dec(

                            idx_radius = decode_radius( st0, &hIsmMetaData->last_radius_idx, &flag_abs_radius );
                            radius = usdequant( idx_radius, ISM_RADIUS_MIN, ISM_RADIUS_DELTA );
#ifdef ISM_NON_DIEGETIC_PAN_EROOR_ON_WRONG_OUTPUT_FORMAT
                            if ( *ism_extmeta_active & 0x1 == 1 )
#else
                            if ( *ism_extmeta_active == 1 )
#endif
                            {
                                hIsmMetaData->yaw = yaw;
                                hIsmMetaData->pitch = pitch;
@@ -928,18 +921,6 @@ 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++ )
        {
@@ -1007,7 +988,6 @@ void ivas_ism_metadata_sid_dec(
        /*----------------------------------------------------------------*
         * Metadata decoding and dequantization, loop over all objects
         *----------------------------------------------------------------*/

        for ( ch = 0; ch < nchan_ism; ch++ )
        {
            hIsmMetaData = hIsmMeta[ch];
@@ -1016,86 +996,6 @@ 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 )
                    {
                        /* 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;
                    }
                }
                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 )
                {
@@ -1145,7 +1045,6 @@ void ivas_ism_metadata_sid_dec(
                    hIsmMetaData->last_true_azimuth = hIsmMetaData->azimuth;
                    hIsmMetaData->elevation = hIsmMetaData->elevation;
                }
#endif
#else
                /* Azimuth decoding */
                idx_azimuth = get_next_indice( st0, nBits_azimuth );
Loading