Commit 569c63df authored by multrus's avatar multrus
Browse files

Merge branch '818-double-precision-arithmetic-in-mdct-core' into 'main'

Resolve "Double precision arithmetic in MDCT core"

See merge request !1104
parents bbaa9850 0e0c6ed2
Loading
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -183,6 +183,8 @@
#define FIX_803_SCE_MD_HANDLE                           /* VA: issue 803: Resolve "MD handle needed only for one SCE" */
#define FIX_812_DOUBLE_PREC_MCT                         /* FhG: Issue 812: Avoid double precision in MCT */
#define FIX_807_VARIABLE_SPEED_DECODING                 /* FhG: Issue 807: Resolve "Variable Speed Decoding broken" */
#define FIX_818_DOUBLE_PREC_KERNEN_SW                   /* FhG: Issue 818: Avoid double precision in kernel switching */


/* #################### End BE switches ################################## */

+8 −0
Original line number Diff line number Diff line
@@ -228,7 +228,11 @@ static void kernel_switch_trafo(

    edxt( inputBuffer, y, l / 2 + m + r / 2, kernelType, FALSE );

#ifdef FIX_818_DOUBLE_PREC_KERNEL_SW
    v_multc( y, sqrtf( (float) NORM_MDCT_FACTOR / ( l / 2 + m + r / 2 ) ), y, l / 2 + m + r / 2 );
#else
    v_multc( y, (float) sqrt( (float) NORM_MDCT_FACTOR / ( l / 2 + m + r / 2 ) ), y, l / 2 + m + r / 2 );
#endif

    return;
}
@@ -277,7 +281,11 @@ static void kernel_switch_update_transforms(

        edxt( windowedTimeSignal, sigR, s, kernelType, FALSE );

#ifdef FIX_818_DOUBLE_PREC_KERNEL_SW
        v_multc( sigR, sqrtf( (float) NORM_MDCT_FACTOR / s ), sigR, s );
#else
        v_multc( sigR, (float) sqrt( (float) NORM_MDCT_FACTOR / s ), sigR, s );
#endif
    }
    else /* 2 TCX5 subframes or 1 TCX10 or 1 transitory TCX20 */
    {