Commit ac28ce6f authored by Dominik Weckbecker's avatar Dominik Weckbecker 💬
Browse files

sketch experimental heuristic for mono input detection under the disabled...

sketch experimental heuristic for mono input detection under the disabled define FIX_527_MONO_HEURISTICSd
parent 4b76e168
Loading
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -4455,6 +4455,10 @@ ivas_error ivas_spar_md_enc_process(
    const int16_t nchan_inp,
    const int16_t sba_order,                                    /* i  : Ambisonic (SBA) order                   */
    float *prior_mixer[IVAS_MAX_FB_MIXER_OUT_CH][IVAS_MAX_SPAR_FB_MIXER_IN_CH]                                  /* i  : prior mixer_matrix     */
#ifdef FIX_527_MONO_HEURISTICS
    ,
    int16_t *dirac_mono_flag
#endif
);

void ivas_compute_spar_params(
+1 −1
Original line number Diff line number Diff line
@@ -159,7 +159,7 @@


#define FIX_527_SBA_MONO_INPUT                          /* FhG: fix issue 527, artifacts in mono signals coded in SBA mode */

/*#define FIX_527_MONO_HEURISTICS*/

/* ################## End DEVELOPMENT switches ######################### */
/* clang-format on */
+175 −164
Original line number Diff line number Diff line
@@ -518,6 +518,7 @@ static ivas_error ivas_spar_enc_process(
    hodirac_flag = ivas_get_hodirac_flag( ivas_total_brate, st_ivas->sba_analysis_order );

    ivas_dirac_enc( st_ivas->hDirAC, hQMetaData, hMetaData, data_f, ppIn_FR_real, ppIn_FR_imag, input_frame, dtx_vad, hEncoderConfig->ivas_format, hodirac_flag );

#ifdef FIX_527_SBA_MONO_INPUT
    if ( hQMetaData->dirac_mono_flag )
    {
@@ -576,7 +577,12 @@ static ivas_error ivas_spar_enc_process(

    if ( hSpar->hMdEnc->spar_hoa_md_flag == 0 )
    {
        ivas_spar_md_enc_process( hSpar->hMdEnc, hEncoderConfig, cov_real, cov_dtx_real, hMetaData, dtx_vad, nchan_inp, sba_order, hSpar->hFbMixer->prior_mixer );
        ivas_spar_md_enc_process( hSpar->hMdEnc, hEncoderConfig, cov_real, cov_dtx_real, hMetaData, dtx_vad, nchan_inp, sba_order, hSpar->hFbMixer->prior_mixer
#ifdef FIX_527_MONO_HEURISTICS
                                  ,
                                  &hQMetaData->dirac_mono_flag
#endif
		);
    }

    if ( hSpar->hMdEnc->spar_hoa_dirac2spar_md_flag )
@@ -624,7 +630,12 @@ static ivas_error ivas_spar_enc_process(

    if ( hSpar->hMdEnc->spar_hoa_md_flag )
    {
        ivas_spar_md_enc_process( hSpar->hMdEnc, hEncoderConfig, cov_real, cov_dtx_real, hMetaData, dtx_vad, nchan_inp, sba_order, hSpar->hFbMixer->prior_mixer );
        ivas_spar_md_enc_process( hSpar->hMdEnc, hEncoderConfig, cov_real, cov_dtx_real, hMetaData, dtx_vad, nchan_inp, sba_order, hSpar->hFbMixer->prior_mixer 
#ifdef FIX_527_MONO_HEURISTICS
                                  ,
                                  &hQMetaData->dirac_mono_flag
#endif
		);
    }

#ifdef DEBUG_LBR_SBA
+44 −2
Original line number Diff line number Diff line
@@ -566,6 +566,10 @@ ivas_error ivas_spar_md_enc_process(
    const int16_t nchan_inp,
    const int16_t sba_order,                                                   /* i  : Ambisonic (SBA) order       */
    float *prior_mixer[IVAS_MAX_FB_MIXER_OUT_CH][IVAS_MAX_SPAR_FB_MIXER_IN_CH] /* i  : prior mixer_matrix     */
#ifdef FIX_527_MONO_HEURISTICS
    ,
    int16_t *dirac_mono_flag
#endif
)
{
    float pred_coeffs_re[IVAS_SPAR_MAX_CH - 1][IVAS_MAX_NUM_BANDS];
@@ -1005,6 +1009,44 @@ ivas_error ivas_spar_md_enc_process(
        }
    }

#ifdef FIX_527_MONO_HEURISTICS
    {
        *dirac_mono_flag = 1;
        for ( b = 0; b < SPAR_DIRAC_SPLIT_START_BAND; b++ )
        {
            ndm = hMdEnc->spar_md_cfg.num_dmx_chans_per_band[b * bands_bw];
            ndec = hMdEnc->spar_md_cfg.num_decorr_per_band[b * bands_bw];

            for ( i = 0; i < DIRAC_TO_SPAR_HBR_PRED_CHS; i++ )
            {
                if ( hMdEnc->spar_md.band_coeffs[b].pred_quant_re[i] != 0.0f )
                {
                    *dirac_mono_flag = 0;
                }
            }

            for ( i = 0; i < num_ch - ndm; i++ )
            {
                for ( j = 0; j < ndm - 1; j++ )
                {
                    if ( hMdEnc->spar_md.band_coeffs[0].C_quant_re[i][j] != 0.f )
                    {
                        *dirac_mono_flag = 0;
                    }
                }
            }

            for ( i = ndm; i < num_ch; i++ )
            {
                if ( hMdEnc->spar_md.band_coeffs[0].P_re[i] != 0.f )
                {
                    *dirac_mono_flag = 0;
                }
            }
        }
    }
#endif

#ifdef DEBUGGING
    if ( dtx_vad == 1 )
    {