Commit 4a0791ba authored by vaclav's avatar vaclav
Browse files

wrap all changes within NONBE_1217_INIT_OBJ_EDIT

parent d4794240
Loading
Loading
Loading
Loading
+321 −0
Original line number Diff line number Diff line
@@ -1213,14 +1213,17 @@ ivas_error IVAS_DEC_GetEditableParameters(
)
{
    int16_t dirac_read_idx, obj;
#ifdef NONBE_1217_INIT_OBJ_EDIT
    Decoder_Struct *st_ivas;
    ISM_MODE ism_mode;
#endif

    if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL || hIvasEditableParameters == NULL )
    {
        return IVAS_ERR_UNEXPECTED_NULL_POINTER;
    }

#ifdef NONBE_1217_INIT_OBJ_EDIT
    st_ivas = hIvasDec->st_ivas;
    ism_mode = st_ivas->ism_mode;

@@ -1345,6 +1348,114 @@ ivas_error IVAS_DEC_GetEditableParameters(
#endif
#endif
    }
#else
    if ( !( hIvasDec->st_ivas->ivas_format == ISM_FORMAT ||
            hIvasDec->st_ivas->ivas_format == SBA_ISM_FORMAT ||
            hIvasDec->st_ivas->ivas_format == MASA_ISM_FORMAT ||
            ( hIvasDec->st_ivas->ivas_format == MASA_FORMAT && hIvasDec->st_ivas->nchan_ism > 0 ) ) )
    {
        return IVAS_ERROR( IVAS_ERR_OBJECTS_EDITING_NOT_SUPPORTED, "Object editing is not supported in this operation mode." );
    }

    if ( hIvasEditableParameters == NULL || hIvasDec == NULL || hIvasDec->st_ivas == NULL )
    {
        return IVAS_ERR_UNEXPECTED_NULL_POINTER;
    }

    hIvasEditableParameters->gain_bed = 1.0f;
    hIvasEditableParameters->num_obj = hIvasDec->st_ivas->nchan_ism;
    if ( hIvasDec->st_ivas->ivas_format == ISM_FORMAT || hIvasDec->st_ivas->ivas_format == SBA_ISM_FORMAT )
    {
        if ( hIvasDec->st_ivas->ism_mode == ISM_MODE_DISC || hIvasDec->st_ivas->ism_mode == ISM_SBA_MODE_DISC )
        {
            for ( obj = 0; obj < hIvasEditableParameters->num_obj; obj++ )
            {
                hIvasEditableParameters->ism_metadata[obj].azimuth = hIvasDec->st_ivas->hIsmMetaData[obj]->azimuth;
                hIvasEditableParameters->ism_metadata[obj].elevation = hIvasDec->st_ivas->hIsmMetaData[obj]->elevation;
                hIvasEditableParameters->ism_metadata[obj].yaw = hIvasDec->st_ivas->hIsmMetaData[obj]->yaw;
                hIvasEditableParameters->ism_metadata[obj].pitch = hIvasDec->st_ivas->hIsmMetaData[obj]->pitch;
                hIvasEditableParameters->ism_metadata[obj].radius = hIvasDec->st_ivas->hIsmMetaData[obj]->radius;
                hIvasEditableParameters->ism_metadata[obj].gain = hIvasDec->st_ivas->hIsmMetaData[obj]->edited_gain;
                hIvasEditableParameters->ism_metadata[obj].non_diegetic_flag = hIvasDec->st_ivas->hIsmMetaData[obj]->non_diegetic_flag;
            }

            if ( hIvasDec->st_ivas->ism_mode == ISM_SBA_MODE_DISC )
            {
                hIvasEditableParameters->gain_bed = 1.0f;
            }
        }
        else if ( hIvasDec->st_ivas->ism_mode == ISM_MODE_PARAM )
        {
            for ( obj = 0; obj < hIvasEditableParameters->num_obj; obj++ )
            {
                hIvasEditableParameters->ism_metadata[obj].azimuth = hIvasDec->st_ivas->hParamIsmDec->azimuth_values[obj];
                hIvasEditableParameters->ism_metadata[obj].elevation = hIvasDec->st_ivas->hParamIsmDec->elevation_values[obj];
                hIvasEditableParameters->ism_metadata[obj].yaw = 0.0f;
                hIvasEditableParameters->ism_metadata[obj].pitch = 0.0f;
                hIvasEditableParameters->ism_metadata[obj].radius = 0.0f;
                hIvasEditableParameters->ism_metadata[obj].gain = 1.0f;
                hIvasEditableParameters->ism_metadata[obj].non_diegetic_flag = 0;
            }
        }
        else if ( hIvasDec->st_ivas->ism_mode == ISM_MODE_NONE )
        {
            hIvasEditableParameters->num_obj = 0;
        }
#ifdef DEBUGGING
        else
        {
            assert( 0 && "This should never happen!" );
        }
#endif
    }
    else if ( hIvasDec->st_ivas->ivas_format == MASA_ISM_FORMAT && ( hIvasDec->st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || hIvasDec->st_ivas->ism_mode == ISM_MASA_MODE_DISC ) )
    {
        /* object editing possible only in two highest OMASA modes */
        if ( hIvasDec->st_ivas->ism_mode == ISM_MASA_MODE_DISC )
        {
            for ( obj = 0; obj < hIvasEditableParameters->num_obj; obj++ )
            {
                hIvasEditableParameters->ism_metadata[obj].azimuth = hIvasDec->st_ivas->hIsmMetaData[obj]->azimuth;
                hIvasEditableParameters->ism_metadata[obj].elevation = hIvasDec->st_ivas->hIsmMetaData[obj]->elevation;
                hIvasEditableParameters->ism_metadata[obj].yaw = hIvasDec->st_ivas->hIsmMetaData[obj]->yaw;
                hIvasEditableParameters->ism_metadata[obj].pitch = hIvasDec->st_ivas->hIsmMetaData[obj]->pitch;
                hIvasEditableParameters->ism_metadata[obj].radius = hIvasDec->st_ivas->hIsmMetaData[obj]->radius;

                /* reset the otherwise unused "gain" field for the object */
                hIvasDec->st_ivas->hIsmMetaData[obj]->edited_gain = 1.0f;
                hIvasEditableParameters->ism_metadata[obj].gain = hIvasDec->st_ivas->hIsmMetaData[obj]->edited_gain;
                hIvasEditableParameters->ism_metadata[obj].non_diegetic_flag = hIvasDec->st_ivas->hIsmMetaData[obj]->non_diegetic_flag;
            }
        }
        else
        {
            /* Handle MONO output */
            if ( hIvasDec->st_ivas->renderer_type != RENDERER_MONO_DOWNMIX )
            {
                dirac_read_idx = hIvasDec->st_ivas->hSpatParamRendCom->render_to_md_map[hIvasDec->st_ivas->hSpatParamRendCom->subframes_rendered];
            }
            else
            {
                dirac_read_idx = 0;
            }

            for ( obj = 0; obj < hIvasEditableParameters->num_obj; obj++ )
            {
                hIvasEditableParameters->ism_metadata[obj].azimuth = hIvasDec->st_ivas->hMasaIsmData->azimuth_ism[obj][dirac_read_idx];
                hIvasEditableParameters->ism_metadata[obj].elevation = hIvasDec->st_ivas->hMasaIsmData->elevation_ism[obj][dirac_read_idx];

                hIvasEditableParameters->ism_metadata[obj].yaw = hIvasDec->st_ivas->hIsmMetaData[obj]->yaw;
                hIvasEditableParameters->ism_metadata[obj].pitch = hIvasDec->st_ivas->hIsmMetaData[obj]->pitch;
                hIvasEditableParameters->ism_metadata[obj].radius = hIvasDec->st_ivas->hIsmMetaData[obj]->radius;

                /* reset the otherwise unused "gain" field for the object */
                hIvasDec->st_ivas->hIsmMetaData[obj]->edited_gain = 1.0f;
                hIvasEditableParameters->ism_metadata[obj].gain = hIvasDec->st_ivas->hIsmMetaData[obj]->edited_gain;
                hIvasEditableParameters->ism_metadata[obj].non_diegetic_flag = hIvasDec->st_ivas->hIsmMetaData[obj]->non_diegetic_flag;
            }
        }
    }
#endif

    return IVAS_ERR_OK;
}
@@ -1362,6 +1473,7 @@ ivas_error IVAS_DEC_SetEditableParameters(
)
{
    int16_t dirac_read_idx, obj;
#ifdef NONBE_1217_INIT_OBJ_EDIT
    Decoder_Struct *st_ivas;
    ISM_MODE ism_mode;

@@ -1577,6 +1689,215 @@ ivas_error IVAS_DEC_SetEditableParameters(
            st_ivas->hMasaIsmData->masa_gain_is_edited = 0u;
        }
    }
#else
    if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL )
    {
        return IVAS_ERR_UNEXPECTED_NULL_POINTER;
    }

    if ( !( hIvasDec->st_ivas->ivas_format == ISM_FORMAT ||
            hIvasDec->st_ivas->ivas_format == SBA_ISM_FORMAT ||
            hIvasDec->st_ivas->ivas_format == MASA_ISM_FORMAT ||
            ( hIvasDec->st_ivas->ivas_format == MASA_FORMAT && hIvasDec->st_ivas->nchan_ism > 0 ) ) )
    {
        return IVAS_ERROR( IVAS_ERR_OBJECTS_EDITING_NOT_SUPPORTED, "Object editing no supported in this operation mode." );
    }

    if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL )
    {
        return IVAS_ERR_UNEXPECTED_NULL_POINTER;
    }

#ifdef DEBUGGING
    assert( hIvasEditableParameters.num_obj == hIvasDec->st_ivas->nchan_ism );
#endif

    if ( hIvasDec->st_ivas->ivas_format == ISM_FORMAT || hIvasDec->st_ivas->ivas_format == SBA_ISM_FORMAT )
    {
        if ( hIvasDec->st_ivas->ism_mode == ISM_MODE_DISC || hIvasDec->st_ivas->ism_mode == ISM_SBA_MODE_DISC )
        {
            for ( obj = 0; obj < hIvasEditableParameters.num_obj; obj++ )
            {
                hIvasDec->st_ivas->hIsmMetaData[obj]->edited_azimuth = hIvasEditableParameters.ism_metadata[obj].azimuth;
                hIvasDec->st_ivas->hIsmMetaData[obj]->edited_elevation = hIvasEditableParameters.ism_metadata[obj].elevation;
                hIvasDec->st_ivas->hIsmMetaData[obj]->edited_radius = hIvasEditableParameters.ism_metadata[obj].radius;

                hIvasDec->st_ivas->hIsmMetaData[obj]->edited_gain = hIvasEditableParameters.ism_metadata[obj].gain;

                hIvasDec->st_ivas->hIsmMetaData[obj]->edited_yaw = hIvasEditableParameters.ism_metadata[obj].yaw;
                hIvasDec->st_ivas->hIsmMetaData[obj]->edited_pitch = hIvasEditableParameters.ism_metadata[obj].pitch;

                hIvasDec->st_ivas->hIsmMetaData[obj]->non_diegetic_flag = hIvasEditableParameters.ism_metadata[obj].non_diegetic_flag;
            }

            if ( hIvasDec->st_ivas->ism_mode == ISM_SBA_MODE_DISC )
            {
                hIvasDec->st_ivas->hSbaIsmData->gain_bed = hIvasEditableParameters.gain_bed;
            }
        }
        else if ( hIvasDec->st_ivas->ism_mode == ISM_MODE_PARAM )
        {
            for ( obj = 0; obj < hIvasEditableParameters.num_obj; obj++ )
            {
                hIvasDec->st_ivas->hParamIsmDec->edited_azimuth_values[obj] = hIvasEditableParameters.ism_metadata[obj].azimuth;
                hIvasDec->st_ivas->hParamIsmDec->edited_elevation_values[obj] = hIvasEditableParameters.ism_metadata[obj].elevation;
                hIvasDec->st_ivas->hMasaIsmData->gain_ism_edited[obj] = hIvasEditableParameters.ism_metadata[obj].gain;

                /* Detect direction editing in Param-ISM mode */
                if ( fabsf( hIvasDec->st_ivas->hParamIsmDec->azimuth_values[obj] - hIvasEditableParameters.ism_metadata[obj].azimuth ) > OMASA_AZI_EDIT_THR ||
                     fabsf( hIvasDec->st_ivas->hParamIsmDec->elevation_values[obj] - hIvasEditableParameters.ism_metadata[obj].elevation ) > OMASA_ELE_EDIT_THR )
                {
                    hIvasDec->st_ivas->hMasaIsmData->ism_dir_is_edited[obj] = 1u;
                }
                else
                {
                    hIvasDec->st_ivas->hMasaIsmData->ism_dir_is_edited[obj] = 0u;
                }

                /* Detect gain editing in Param-ISM mode */
                if ( fabsf( 1.0f - hIvasEditableParameters.ism_metadata[obj].gain ) > OMASA_GAIN_EDIT_THR )
                {
                    hIvasDec->st_ivas->hMasaIsmData->ism_gain_is_edited[obj] = 1u;
                }
                else
                {
                    hIvasDec->st_ivas->hMasaIsmData->ism_gain_is_edited[obj] = 0u;
                }
            }

            /* MASA is not present with the ISM format */
            hIvasDec->st_ivas->hMasaIsmData->masa_gain_is_edited = 0u;
        }
        else if ( hIvasDec->st_ivas->ism_mode == ISM_MODE_NONE )
        {
            if ( hIvasEditableParameters.num_obj != 0 )
            {
                return IVAS_ERR_OBJECTS_EDITING_NOT_SUPPORTED;
            }
        }
        else
        {
            assert( 0 && "This should never happen!" );
        }
    }
    else if ( hIvasDec->st_ivas->ivas_format == MASA_ISM_FORMAT && ( hIvasDec->st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || hIvasDec->st_ivas->ism_mode == ISM_MASA_MODE_DISC ) )
    {
        int16_t id_th;
        float threshold_azi, threshold_ele;

        for ( obj = 0; obj < hIvasEditableParameters.num_obj; obj++ )
        {
            if ( hIvasDec->st_ivas->hMasaIsmData != NULL )
            {
                /* copy relevant fields also to OMASA structs, but only if the value has been changed. original values are in st_ivas->hIsmMetaData */
                /* first, need to convert float values to ints used internally */
                int16_t new_azi, new_ele;
                if ( hIvasEditableParameters.ism_metadata[obj].azimuth > 0.0f )
                {
                    new_azi = (int16_t) ( hIvasEditableParameters.ism_metadata[obj].azimuth + 0.5f );
                }
                else
                {
                    new_azi = (int16_t) ( hIvasEditableParameters.ism_metadata[obj].azimuth - 0.5f );
                }

                if ( hIvasEditableParameters.ism_metadata[obj].elevation > 0.0f )
                {
                    new_ele = (int16_t) ( hIvasEditableParameters.ism_metadata[obj].elevation + 0.5f );
                }
                else
                {
                    new_ele = (int16_t) ( hIvasEditableParameters.ism_metadata[obj].elevation - 0.5f );
                }

                if ( hIvasDec->st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ )
                {
                    /* Handle MONO output */
                    if ( hIvasDec->st_ivas->renderer_type != RENDERER_MONO_DOWNMIX )
                    {
                        dirac_read_idx = hIvasDec->st_ivas->hSpatParamRendCom->render_to_md_map[hIvasDec->st_ivas->hSpatParamRendCom->subframes_rendered];
                    }
                    else
                    {
                        dirac_read_idx = 0;
                    }

                    /* determine thresholds for detecting object metadata edit for direction based on quantization resolution of the spatial direction parameters.
                     * these depend from the number of bits used to transmit the directions,
                     * which in turn depends from the object priority and importance:
                     * importance -> priority -> number of bits -> elevation resolution -> elevation ring index -> azimuth resolution.
                     * leading to elevation_resolution -> elevation threshold and azimuth resolution -> azimuth threshold */
                    id_th = (int16_t) ( fabsf( (float) hIvasDec->st_ivas->hMasaIsmData->elevation_ism[obj][dirac_read_idx] ) / delta_theta_masa[hIvasDec->st_ivas->hMasaIsmData->bits_ism[obj] - 3] + 0.5f );
                    threshold_azi = 360.0f / (float) no_phi_masa[hIvasDec->st_ivas->hMasaIsmData->bits_ism[obj] - 1][id_th];
                    threshold_ele = delta_theta_masa[hIvasDec->st_ivas->hMasaIsmData->bits_ism[obj] - 3];

                    if ( ( (float) abs( new_azi - hIvasDec->st_ivas->hMasaIsmData->azimuth_ism[obj][dirac_read_idx] ) > threshold_azi ) ||
                         ( (float) abs( new_ele - hIvasDec->st_ivas->hMasaIsmData->elevation_ism[obj][dirac_read_idx] ) > threshold_ele ) )
                    {
                        /* at least one of the threshold is exceeded, so use new direction value and set editing detection flag */
                        hIvasDec->st_ivas->hMasaIsmData->azimuth_ism_edited[obj] = new_azi;
                        hIvasDec->st_ivas->hMasaIsmData->elevation_ism_edited[obj] = new_ele;

                        hIvasDec->st_ivas->hMasaIsmData->ism_dir_is_edited[obj] = 1u;
                    }
                    else
                    {
                        hIvasDec->st_ivas->hMasaIsmData->ism_dir_is_edited[obj] = 0u;
                    }
                }
                else
                {
                    /* detect editing in ISM_MASA_MODE_DISC. optionally, add quantization-resolution -based thresholds */
                    if ( fabsf( hIvasDec->st_ivas->hIsmMetaData[obj]->azimuth - hIvasEditableParameters.ism_metadata[obj].azimuth ) > OMASA_AZI_EDIT_THR ||
                         fabsf( hIvasDec->st_ivas->hIsmMetaData[obj]->elevation - hIvasEditableParameters.ism_metadata[obj].elevation ) > OMASA_ELE_EDIT_THR )
                    {
                        hIvasDec->st_ivas->hMasaIsmData->azimuth_ism_edited[obj] = new_azi;
                        hIvasDec->st_ivas->hMasaIsmData->elevation_ism_edited[obj] = new_ele;

                        hIvasDec->st_ivas->hMasaIsmData->ism_dir_is_edited[obj] = 1u;
                    }
                    else
                    {
                        hIvasDec->st_ivas->hMasaIsmData->ism_dir_is_edited[obj] = 0u;
                    }
                }

                /* compare pre-edit gain and the edited one to detect editing */
                if ( fabsf( hIvasDec->st_ivas->hIsmMetaData[obj]->edited_gain - hIvasEditableParameters.ism_metadata[obj].gain ) > OMASA_GAIN_EDIT_THR )
                {
                    hIvasDec->st_ivas->hMasaIsmData->ism_gain_is_edited[obj] = 1u;
                    hIvasDec->st_ivas->hMasaIsmData->gain_ism_edited[obj] = hIvasEditableParameters.ism_metadata[obj].gain;
                }
                else
                {
                    hIvasDec->st_ivas->hMasaIsmData->ism_gain_is_edited[obj] = 0u;
                }
            }

            /* Copy edited values to hIsmMetaData struct */
            if ( hIvasDec->st_ivas->hIsmMetaData[obj] != NULL )
            {
                hIvasDec->st_ivas->hIsmMetaData[obj]->azimuth = hIvasEditableParameters.ism_metadata[obj].azimuth;
                hIvasDec->st_ivas->hIsmMetaData[obj]->elevation = hIvasEditableParameters.ism_metadata[obj].elevation;
                hIvasDec->st_ivas->hIsmMetaData[obj]->yaw = hIvasEditableParameters.ism_metadata[obj].yaw;
                hIvasDec->st_ivas->hIsmMetaData[obj]->pitch = hIvasEditableParameters.ism_metadata[obj].pitch;
                hIvasDec->st_ivas->hIsmMetaData[obj]->radius = hIvasEditableParameters.ism_metadata[obj].radius;
                hIvasDec->st_ivas->hIsmMetaData[obj]->edited_gain = hIvasEditableParameters.ism_metadata[obj].gain;
                hIvasDec->st_ivas->hIsmMetaData[obj]->non_diegetic_flag = hIvasEditableParameters.ism_metadata[obj].non_diegetic_flag;
            }
        }

        if ( fabsf( hIvasEditableParameters.gain_bed - 1.0f ) > OMASA_GAIN_EDIT_THR )
        {
            hIvasDec->st_ivas->hMasaIsmData->gain_masa_edited = hIvasEditableParameters.gain_bed;
            hIvasDec->st_ivas->hMasaIsmData->masa_gain_is_edited = 1u;
        }
        else
        {
            hIvasDec->st_ivas->hMasaIsmData->masa_gain_is_edited = 0u;
        }
    }
#endif

    return IVAS_ERR_OK;
}
+0 −14
Original line number Diff line number Diff line
@@ -1947,17 +1947,3 @@ eid-xor -fer -vbr -bs g192 -ep g192 bit ../scripts/dly_error_profiles/ep_10pct.g
// OSBA 3OA 4ISM at 512 kbps, 48kHz in, 48kHz out, BINAURAL_ROOM_REVERB out
../IVAS_cod -ism_sba 4 3 testv/stvISM1.csv testv/stvISM2.csv testv/stvISM3.csv testv/stvISM4.csv 512000 48 testv/stvOSBA_4ISM_3OA48c.wav bit
../IVAS_dec -render_config testv/rend_config_hospital_patientroom.cfg BINAURAL_ROOM_REVERB 48 bit testv/stvOSBA_4ISM_3OA48c.wav_BINAURAL_ROOM_REVERB_512000_48-48_custom_configuration.tst



// 3 ISM with extended metadata bitrate switching, 48kHz in, 48kHz out, BINAURAL out, object editing
../IVAS_cod -ism +3 testv/stvISM1.csv null testv/stvISM3.csv ../scripts/switchPaths/sw_24k4_256k.bin 48 testv/stv3ISM48s.wav bit
../IVAS_dec -obj_edit BINAURAL 48 bit testv/stv3ISM48s.wav_brate_sw_48-48_BINAURAL_ObjEdit.tst

// OMASA 2Dir2TC 2ISM bitrate switching, 48kHz in, 48kHz out, BINAURAL out, object editing
../IVAS_cod -ism_masa 2 2 testv/stvOMASA_2ISM_2MASA2TC48c_ISM1.csv null testv/stvOMASA_2ISM_2MASA2TC48c.met ../scripts/switchPaths/sw_24k4_256k.bin 48 testv/stvOMASA_2ISM_2MASA2TC48c.wav bit
../IVAS_dec -obj_edit BINAURAL 48 bit testv/stvOMASA_2ISM_2MASA2TC48c.wav_brate_sw_48-48_BINAURAL_ObjEdit.tst

// OSBA FOA 3ISM bitrate switching 48kHz in, 48kHz out, BINAURAL out, object editing
../IVAS_cod -ism_sba 2 1 testv/stvISM1.csv null ../scripts/switchPaths/sw_24k4_256k.bin 48 testv/stvOSBA_2ISM_FOA48c.wav bit
../IVAS_dec -obj_edit BINAURAL 48 bit testv/stvOSBA_2ISM_FOA48c.wav_brate_sw_48-48_BINAURAL_ObjEdit.tst
+0 −13
Original line number Diff line number Diff line
@@ -1946,16 +1946,3 @@ eid-xor -fer -vbr -bs g192 -ep g192 bit ../scripts/dly_error_profiles/ep_10pct.g
../IVAS_cod -ism_sba 4 3 testv/ltvISM1.csv testv/ltvISM2.csv testv/ltvISM3.csv testv/ltvISM4.csv 512000 48 testv/ltv48_OSBA_4ISM_HOA3.wav bit
../IVAS_dec -render_config testv/rend_config_hospital_patientroom.cfg BINAURAL_ROOM_REVERB 48 bit testv/ltv48_OSBA_4ISM_HOA3.wav_BINAURAL_ROOM_REVERB_512000_48-48_custom_configuration.tst


// 3 ISM with extended metadata bitrate switching, 48kHz in, 48kHz out, BINAURAL out, object editing
../IVAS_cod -ism +3 testv/ltvISM1.csv null testv/stvISM3.csv ../scripts/switchPaths/sw_24k4_256k.bin 48 testv/ltv48_3ISM.wav bit
../IVAS_dec -obj_edit BINAURAL 48 bit testv/ltv48_3ISM.wav_brate_sw_48-48_BINAURAL_ObjEdit.tst

// OMASA 2Dir2TC 2ISM bitrate switching, 48kHz in, 48kHz out, BINAURAL out, object editing
../IVAS_cod -ism_masa 2 2 testv/ltv48_OMASA_2ISM_2TC_ISM1.csv null testv/ltv48_OMASA_2ISM_2TC.met ../scripts/switchPaths/sw_24k4_256k.bin 48 testv/ltv48_OMASA_2ISM_2TC.wav bit
../IVAS_dec -obj_edit BINAURAL 48 bit testv/ltv48_OMASA_2ISM_2TC.wav_brate_sw_48-48_BINAURAL_ObjEdit.tst

// OSBA FOA 3ISM bitrate switching 48kHz in, 48kHz out, BINAURAL out, object editing
../IVAS_cod -ism_sba 2 1 testv/ltvISM1.csv null ../scripts/switchPaths/sw_24k4_256k.bin 48 testv/ltv48_OSBA_2ISM_FOA.wav bit
../IVAS_dec -obj_edit BINAURAL 48 bit testv/ltv48_OSBA_2ISM_FOA.wav_brate_sw_48-48_BINAURAL_ObjEdit.tst