Commit 69f3add6 authored by vaclav's avatar vaclav
Browse files

fixes to DiscISM DTX - first ~working version (tested 4ISMs with MD)

parent 0d881481
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -427,7 +427,7 @@ static ivas_error ivas_read_format(
                break;
            case SID_ISM:
                st_ivas->ivas_format = ISM_FORMAT;
#ifndef DISCRETE_ISM_DTX
#ifndef DISCRETE_ISM_DTX_CNG
#ifdef PARAM_ISM_DTX_CNG
                if ( st_ivas->ism_mode == ISM_MODE_DISC )
                {
+4 −0
Original line number Diff line number Diff line
@@ -443,7 +443,11 @@ ivas_error ivas_init_encoder(
        }

#ifdef PARAM_ISM_DTX_CNG
#ifdef DISCRETE_ISM_DTX_CNG
        if ( st_ivas->hEncoderConfig->Opt_DTX_ON )
#else
        if ( st_ivas->hEncoderConfig->Opt_DTX_ON && st_ivas->ism_mode == ISM_MODE_PARAM )
#endif
        {
            if ( ( error = ivas_ism_dtx_open( st_ivas ) ) != IVAS_ERR_OK )
            {
+4 −0
Original line number Diff line number Diff line
@@ -486,7 +486,11 @@ void ivas_ism_coh_estim_dtx_enc(
{
    Encoder_State *st, *st_id0;
    int16_t sce_id, i;
#ifdef DISCRETE_ISM_DTX_CNG
    float acorr_ene[MAX_NUM_OBJECTS], xcorr_ene;
#else
    float acorr_ene[PARAM_ISM_MAX_DMX], xcorr_ene;
#endif

    if ( nchan_transport == 1 )
    {
+12 −3
Original line number Diff line number Diff line
@@ -88,7 +88,7 @@ ivas_error ivas_ism_enc(
    int16_t i, nBits;
#ifdef PARAM_ISM_DTX_CNG
#ifdef DISCRETE_ISM_DTX_CNG
    int16_t num_obj, dtx_flag, sid_flag;
    int16_t num_obj, dtx_flag, sid_flag, flag_noisy_speech;
    int16_t md_diff_flag[MAX_NUM_OBJECTS];
#else
    int16_t dtx_flag, sid_flag;
@@ -107,6 +107,7 @@ ivas_error ivas_ism_enc(
#ifdef PARAM_ISM_DTX_CNG
    dtx_flag = 0;
    sid_flag = 0;
    flag_noisy_speech = 0;

#ifdef DISCRETE_ISM_DTX_CNG
    if ( st_ivas->ism_mode == ISM_MODE_PARAM )
@@ -228,6 +229,7 @@ ivas_error ivas_ism_enc(
        }

#ifdef DEBUG_MODE_PARAM_ISM
        if ( st_ivas->hDirAC != NULL )
            dbgwrite( &( st_ivas->hDirAC->hParamIsm->flag_noisy_speech ), sizeof( int16_t ), 1, 1, "./res/ParamISM_noisy_speech_flag_enc.dat" );
        dbgwrite( &( st_ivas->hISMDTX->dtx_flag ), sizeof( int16_t ), 1, 1, "./res/ParamISM_DTX_CNG_flag_enc.dat" );
#endif
@@ -243,6 +245,9 @@ ivas_error ivas_ism_enc(
    if ( st_ivas->ism_mode == ISM_MODE_PARAM )
    {
        ivas_param_ism_compute_noisy_speech_flag( st_ivas );
#ifdef DISCRETE_ISM_DTX_CNG
        flag_noisy_speech = st_ivas->hDirAC->hParamIsm->flag_noisy_speech;
#endif
    }

    if ( dtx_flag )
@@ -250,7 +255,7 @@ ivas_error ivas_ism_enc(
#ifdef DISCRETE_ISM_DTX_CNG
        if ( st_ivas->ism_mode != ISM_MODE_PARAM )
        {
            ivas_ism_metadata_sid_enc( st_ivas->hISMDTX, st_ivas->hDirAC->hParamIsm->flag_noisy_speech, num_obj, 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, num_obj, 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 );
        }
        else
#endif
@@ -311,7 +316,11 @@ ivas_error ivas_ism_enc(

    st = st_ivas->hSCE[0]->hCoreCoder[0];

#ifdef DISCRETE_ISM_DTX_CNG
    if ( st->core_brate == SID_2k40 || sid_flag ) // VE!!!!! to be simplified
#else
    if ( st->core_brate == SID_2k40 )
#endif
    {
        ivas_write_format_sid( st_ivas->hEncoderConfig->ivas_format, IVAS_SCE, st->hBstr );

+11 −6
Original line number Diff line number Diff line
@@ -875,8 +875,11 @@ static ivas_error configureEncoder(

#ifdef PARAM_ISM_DTX_CNG
    if ( hEncoderConfig->Opt_DTX_ON && hEncoderConfig->ivas_format != MONO_FORMAT &&
         ( ( hEncoderConfig->ivas_format == ISM_FORMAT && hEncoderConfig->nchan_inp == 2 ) ||                                                                                                 // ToDo: see Issue 113
         (
#ifndef DISCRETE_ISM_DTX_CNG
             ( hEncoderConfig->ivas_format == ISM_FORMAT && hEncoderConfig->nchan_inp == 2 ) ||                                                                                                 // ToDo: see Issue 113
             ( hEncoderConfig->ivas_format == ISM_FORMAT && hEncoderConfig->nchan_inp > 2 && hEncoderConfig->ivas_total_brate != IVAS_24k4 && hEncoderConfig->ivas_total_brate != IVAS_32k ) || // ParamISM
#endif
             ( hEncoderConfig->ivas_format == MASA_FORMAT && hEncoderConfig->ivas_total_brate > IVAS_128k ) ||                   // ToDo: remove the bitrate limitation
             ( hEncoderConfig->ivas_format == SBA_FORMAT && ivas_get_sba_num_TCs( hEncoderConfig->ivas_total_brate, 1 ) > 2 ) || // ToDo: support for 3+ TCs to be done
             hEncoderConfig->ivas_format == MC_FORMAT                                                                            // ToDo: TBD
@@ -919,11 +922,13 @@ static ivas_error configureEncoder(
        return error;
    }

#ifndef DISCRETE_ISM_DTX_CNG
#ifdef PARAM_ISM_DTX_CNG
    if ( hEncoderConfig->Opt_DTX_ON && ( hEncoderConfig->ivas_format == ISM_FORMAT ) && !( st_ivas->ism_mode == ISM_MODE_DISC && hEncoderConfig->nchan_inp == 1 ) && !( st_ivas->ism_mode == ISM_MODE_PARAM && ( hEncoderConfig->nchan_inp == 3 || hEncoderConfig->nchan_inp == 4 ) ) )
    {
        return IVAS_ERROR( IVAS_ERR_UNKNOWN, "DTX is not supported in this IVAS format and element mode." );
    }
#endif
#endif

    if ( hEncoderConfig->ivas_format == MONO_FORMAT )