Commit f0c29e92 authored by bayers's avatar bayers
Browse files

Merge remote-tracking branch 'remotes/origin/main' into 899-variable_speed_decoding-does-not-work

parents d905319d 4aff7de7
Loading
Loading
Loading
Loading
Loading

lib_com/options.h

100644 → 100755
+2 −0
Original line number Diff line number Diff line
@@ -165,6 +165,8 @@
#define NONBE_FIX_871_ACELP_CRASH_IN_OSBA                     /* FhG: isse 871: crash in ACELP core encoder with OSBA */
#define NONBE_FIX_225_MASA_EXT_REND                           /* Nokia: Resolve #225: Complete MASA external renderer implementation */
#define NONBE_FIX_897_USAN_WITH_MASA_RENDERING                /* Nokia: issue #897: USAN null pointer in MASA external renderer to Ambisonics */
#define NONBE_FIX_903_OSBA_TO_STEREO                          /* VA: issue 903: fix OSBA to stereo rendering issue */
#define NONBE_FIX_811_DFT_DOUBLE_TO_FLOAT                     /* FhG: issue 811: change double precision functions to float in DFT Stereo */

/* ##################### End NON-BE switches ########################### */

+14 −0
Original line number Diff line number Diff line
@@ -1186,13 +1186,27 @@ ivas_error ivas_jbm_dec_render(
            {
                *nSamplesRendered = min( st_ivas->hTcBuffer->n_samples_available, nSamplesAskedLocal );

#ifdef NONBE_FIX_903_OSBA_TO_STEREO
                /* shift SBA channels to avoid overwrite by ISM upmix in 1 object case */
                if ( st_ivas->nchan_ism == 1 )
                {
                    mvr2r( p_output[2], p_output[3], *nSamplesRendered );
                    mvr2r( p_output[1], p_output[2], *nSamplesRendered );
                    p_tc[3] = p_output[3];
                }
#endif

                /* render objects */
                ivas_ism_render_sf( st_ivas, p_output, *nSamplesRendered );

                /* add already rendererd SBA part */
                for ( n = 0; n < nchan_out; n++ )
                {
#ifdef NONBE_FIX_903_OSBA_TO_STEREO
                    v_add( p_output[n], p_tc[n + max( nchan_out, st_ivas->nchan_ism )], p_output[n], *nSamplesRendered );
#else
                    v_add( p_output[n], p_tc[n + st_ivas->nchan_ism], p_output[n], *nSamplesRendered );
#endif
                }
            }
            else if ( st_ivas->renderer_type == RENDERER_OSBA_AMBI || st_ivas->renderer_type == RENDERER_OSBA_LS || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM )

lib_dec/ivas_stereo_dft_dec.c

100644 → 100755
+8 −0
Original line number Diff line number Diff line
@@ -135,10 +135,18 @@ static void stereo_dft_dequantize_res_gains_f(

        /* compensate for the offset and extract/remove sign of first index */
        sign = ind1[i] < 15 ? -1 : 1;
#ifdef NONBE_FIX_811_DFT_DOUBLE_TO_FLOAT
        i1 = (int16_t) floorf( ind1[i] < 15 ? 15 - ind1[i] : ind1[i] - 15 );
#else
        i1 = (int16_t) floor( ind1[i] < 15 ? 15 - ind1[i] : ind1[i] - 15 );
#endif
        fi = ( ind1[i] < 15 ? 15 - ind1[i] : ind1[i] - 15 ) - i1;

#ifdef NONBE_FIX_811_DFT_DOUBLE_TO_FLOAT
        j1 = (int16_t) floorf( ind2[i] );
#else
        j1 = (int16_t) floor( ind2[i] );
#endif
        fj = ind2[i] - j1;

        /* choose base indices for interpolation */

lib_enc/ivas_stereo_dft_enc.c

100644 → 100755
+12 −0
Original line number Diff line number Diff line
@@ -2695,7 +2695,11 @@ static void stereo_dft_enc_compute_prm(
            {
                hStereoDft->dot_prod_real_smooth[b2] = 0.5f * hStereoDft->dot_prod_real_smooth[b2] + 0.5f * dot_prod_real2;
                hStereoDft->dot_prod_img_smooth[b2] = 0.5f * hStereoDft->dot_prod_img_smooth[b2] + 0.5f * dot_prod_img2;
#ifdef NONBE_FIX_811_DFT_DOUBLE_TO_FLOAT
                pIpd[b2] = (float) atan2f( hStereoDft->dot_prod_img_smooth[b2], hStereoDft->dot_prod_real_smooth[b2] );
#else
                pIpd[b2] = (float) atan2( hStereoDft->dot_prod_img_smooth[b2], hStereoDft->dot_prod_real_smooth[b2] );
#endif

                ipd_smooth[b2] = stereo_dft_calc_mean_bipd( &pIpd[b2], hStereoDft->ipd_buf[b2] );

@@ -2825,7 +2829,11 @@ static void stereo_dft_enc_compute_prm(
                {
                    conversion_factor = 2.f / 3;
                }
#ifdef NONBE_FIX_811_DFT_DOUBLE_TO_FLOAT
                dItd32 = (int16_t) floorf( conversion_factor * hStereoDft->hItd->deltaItd[k_offset] + 0.5f );
#else
                dItd32 = (int16_t) floor( conversion_factor * hStereoDft->hItd->deltaItd[k_offset] + 0.5f );
#endif

                gain_offset = stereo_dft_gain_offset( c, dItd32 );
                pPredGain[b] = max( 0, pPredGain[b] - gain_offset );
@@ -2861,7 +2869,11 @@ static void stereo_dft_enc_compute_prm(
            hStereoDft->sum_dot_prod_real = ( 1.f - hStereoDft->sfm ) * hStereoDft->sum_dot_prod_real + hStereoDft->sfm * sum_dot_prod_real;
            hStereoDft->sum_dot_prod_img = ( 1.f - hStereoDft->sfm ) * hStereoDft->sum_dot_prod_img + hStereoDft->sfm * sum_dot_prod_img;

#ifdef NONBE_FIX_811_DFT_DOUBLE_TO_FLOAT
            pgIpd[0] = (float) atan2f( hStereoDft->sum_dot_prod_img, hStereoDft->sum_dot_prod_real );
#else
            pgIpd[0] = (float) atan2( hStereoDft->sum_dot_prod_img, hStereoDft->sum_dot_prod_real );
#endif

            stereo_dft_gipd_stabilization( &pgIpd[0], hStereoDft->prev_gipd, ipd_mean_change );
            hStereoDft->prev_gipd = pgIpd[0];
+4 −0
Original line number Diff line number Diff line
@@ -1368,7 +1368,11 @@ void stereo_dft_enc_compute_itd(

        if ( hItd->deltaItd[k_offset - 1] != 0 && itd_max_flip == 0 )
        {
#ifdef NONBE_FIX_811_DFT_DOUBLE_TO_FLOAT
            int16_t tmp_itd = (int16_t) floorf( ( ( hItd->prev_itd ) * ( (float) input_frame / 640 ) ) + 0.5f );
#else
            int16_t tmp_itd = (int16_t) floor( ( ( hItd->prev_itd ) * ( (float) input_frame / 640 ) ) + 0.5f );
#endif
            hItd->deltaItd[k_offset] = -1.0f * tmp_itd - hItd->td_itd[k_offset];
        }
    }
Loading