Commit 28a402ce authored by Sandesh Venkatesh's avatar Sandesh Venkatesh
Browse files

Integration of fixed point sub-functions 15

[x] Overflow fix for st->mem_preemp_pre_q_fx
[x] shoebox updates
[x] Making variable Qs from Decoder_State structure common
[x] ivas_dirac_dec_compute_directional_responses intermediate conv removal
[x] stereo_icbwe_dec q alignment
[x] Removes redundant flags/variables from structures
[x] compute t60 coeffs converted to fixed point
[x] SBA path intermediate conversions cleanup
[x] ivas_mct_dec converto fixed point
[x] ivas_dirac_dec_decorrelate_slot and its sub functions converted to fixed point
[x] ivas_lfe_enc converted to fixed point.
parent 317e3d34
Loading
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -127,6 +127,8 @@
#define ONE_IN_Q30                      1073741824
#define ONE_IN_Q31                      0x7fffffff
#define MINUS_ONE_IN_Q31                      -2147483648
#define TWO_IN_Q29                      1073741824
#define FOUR_IN_Q28                     1073741824

#define MAX_WORD16                      32767
#define ONE_IN_Q62                      (Word64)0x4000000000000000
@@ -2991,7 +2993,8 @@ enum
#define SYNC_BAD_FRAME                        (UWord16) 0x6B20         /* synchronization word of a "bad" frame */
#define G192_BIN0                             (UWord16) 0x007F         /* binary "0" according to ITU-T G.192 */
#define G192_BIN1                             (UWord16) 0x0081         /* binary "1" according to ITU-T G.192 */

#define DEGREE_180                            (Word32)(180.0 *ONE_IN_Q23)
#define DEGREE_360                            (Word32)(360.0 *ONE_IN_Q23)
extern const Word16 Idx2Freq_Tbl[];
#if 0 
//TO do add in rom_com
+2 −2
Original line number Diff line number Diff line
@@ -443,7 +443,7 @@ void enhancer_ivas_fx(
    sc = 6;
    move16();

    gain_code_hi = round_fx(L_shl(L_tmp, add(Q_exc, 3))); /* in Q_exc */
    gain_code_hi = extract_h(L_shl_sat(L_tmp, add(Q_exc, 3))); /* in Q_exc */

    /*------------------------------------------------------------*
     * pitch enhancer
@@ -458,7 +458,7 @@ void enhancer_ivas_fx(
        /* Copy(code, exc2, L_SUBFR) */
        FOR(i = 0; i < L_SUBFR; i++)
        {
            pt_exc2[i] = round_fx(L_shl(L_mult(gain_code_hi, code[i]), sc)); /*Q0 */ /* code in Q12 (Q9 for encoder) */
            pt_exc2[i] = extract_h(L_shl_sat(L_mult(gain_code_hi, code[i]), sc)); /*Q0 */ /* code in Q12 (Q9 for encoder) */
        }
    }
    ELSE
+73 −0
Original line number Diff line number Diff line
@@ -1126,7 +1126,80 @@ void SynthesisSTFT_dirac_flt(
    return;
}

#ifdef IVAS_FLOAT_FIXED
void SynthesisSTFT_dirac_fx(
    Word32 *fftBuffer, /* i  : FFT bins */
    Word32 *timeDomainOutput,
    Word32 *olapBuffer,
    const Word16 *olapWin,
    const Word16 samples_out,
    HANDLE_FD_CNG_COM hFdCngCom /* i/o: FD_CNG structure containing all buffers and variables */
)
{
    Word16 i;
    Word32 buf[M + 1 + 320], tmp;

    /* Perform IFFT */
    RFFTN_fx( fftBuffer, hFdCngCom->fftSineTab_fx, hFdCngCom->fftlen, 1 );

    /* Handle overlap in P/S domain for stereo */
    Copy32( olapBuffer + hFdCngCom->frameSize, olapBuffer, hFdCngCom->frameSize );
    set32_fx( olapBuffer + hFdCngCom->frameSize, 0, hFdCngCom->frameSize ); /*olapBuffer, fftBuffer, olapWin*/

    FOR ( i = shr(hFdCngCom->frameSize, 2); i < i_mult(3, shr(hFdCngCom->frameSize, 2)); i++ )
    {
        olapBuffer[i] = L_add(olapBuffer[i], Mpy_32_16_1(fftBuffer[i], olapWin[i - hFdCngCom->frameSize / 4]));
    }
    FOR ( ; i < i_mult(5, shr(hFdCngCom->frameSize, 2)); i++ )
    {
        olapBuffer[i] = fftBuffer[i]; move32();
    }

    FOR ( ; i < i_mult(7, shr(hFdCngCom->frameSize, 2)); i++ )
    {
        olapBuffer[i] = fftBuffer[i]; move32();
    }

    FOR ( ; i < hFdCngCom->fftlen; i++ )
    {
      olapBuffer[i] = 0; move32();
    }

    Word32 fftScale = 0; move32();
    SWITCH(hFdCngCom->fftlen)
    {
        case 640:
          fftScale = FFT_SCALING_640; move32();
          break;
        case 512:
          fftScale = FFT_SCALING_512; move32();
          break;
        default:
          assert(!"Not supported FFT length!");
    }

    /* Get time-domain signal */
    v_multc_fixed(olapBuffer + hFdCngCom->frameSize / 4, fftScale, timeDomainOutput, samples_out); // Q_in - 9

    /* Get excitation */
    v_multc_fixed(olapBuffer + (hFdCngCom->frameSize / 4) - (M + 1), fftScale, buf, M + 1 + hFdCngCom->frameSize);
    tmp = buf[0];
    preemph_ivas_fx( buf + 1, PREEMPH_FAC, M + hFdCngCom->frameSize, &tmp );
    residu_ivas_fx( hFdCngCom->A_cng, Q13, M, buf + 1 + M, hFdCngCom->exc_cng_32fx, hFdCngCom->frameSize );

    /* update and window olapBuf if we have a output frame that is shorter than the default frame size...*/
    IF ( LT_16(samples_out, hFdCngCom->frameSize ))
    {
        Copy32( olapBuffer + samples_out, olapBuffer + hFdCngCom->frameSize, i_mult(3, shr(hFdCngCom->frameSize, 2)));
    }
    FOR ( i = i_mult(5, shr(hFdCngCom->frameSize, 2)); i < i_mult(7, shr(hFdCngCom->frameSize, 2)); i++ )
    {
        olapBuffer[i] = Mpy_32_16_1(olapBuffer[i], olapWin[i - 3 * hFdCngCom->frameSize / 4]);
    }

    return;
}
#endif
/*-------------------------------------------------------------------
 * mhvals_flt()
 *
+35 −381

File changed.

Preview size limit exceeded, changes collapsed.

+14 −0
Original line number Diff line number Diff line
@@ -50,9 +50,11 @@
#define _180_OVER_PI_Q25                         1922527233
#define _180_OVER_PI_FX                          (Word32) (( 180.0f / EVS_PI ) *ONE_IN_Q10)
#define PI_OVER_4_Q29                            421657440
#define _180_OVER_PI_Q9                          ( 29335 )
#define PI_OVER_Q29                              1686629760
#define Q31_0_99                                 2126008811
#define Q31_0_01                                 21474836
#define PI_OVER_180_FX                           (Word32) (( EVS_PI / 180.0f ) * ONE_IN_Q31)
#endif
#define PI_OVER_4_Q29                            421657440
#define PI_OVER_Q29                              1686629760
@@ -983,6 +985,12 @@ typedef enum
#define DIRAC_ONSET_ALPHA                       0.95f
#define DIRAC_ONSET_BETA                        0.995f
#define DIRAC_ONSET_GAIN                        4.0f
#ifdef IVAS_FLOAT_FIXED
#define DIRAC_ONSET_ALPHA_FX                    31129//Q15
#define DIRAC_ONSET_BETA_FX                     32604 //Q15
#define ONE_DIRAC_ONSET_BETA_FX                 163 //Q15   
#define DIRAC_ONSET_GAIN_FX                     16384 //Q12
#endif

#define DELAY_DIRAC_ENC_CMP_NS                  9500000L                    /* Delay to be compensated on DirAC encoder */
#define DELAY_DIRAC_SPAR_ENC_CMP_NS             500000L                    /* here we may set the 24 samples (at 48 kHz) additional delay to something else, leave as is for now*/       
@@ -1501,6 +1509,12 @@ typedef enum
#define IVAS_LFE_SHIFT_BITS                     5
#define IVAS_LFE_BITRATE_5000                   5000
#define IVAS_LFE_ABS_SUM_FLT_THR                (0.000001f)

#ifdef IVAS_FLOAT_FIXED
#define IVAS_LFE_ABS_SUM_FLT_THR_Q42                4398047
#endif // IVAS_FLOAT_FIXED


#define IVAS_ZERO_PAD_LEN_MULT_FAC              (0.5f)

#define IVAS_ZERO_PAD_LEN_MULT_FAC_fx             16384       //0.5*Q15
Loading