void idct_8(Int32 vec[]) { Int32 tmp0; Int32 tmp1; Int32 tmp2; Int32 tmp3; Int32 tmp4; Int32 tmp5; Int32 tmp6; Int32 tmp7; Int32 tmp8; tmp5 = fxp_mul32_by_16(vec[4] << 1, Qfmt15(0.70710678118655F)); tmp1 = vec[0] + tmp5; tmp5 = vec[0] - tmp5; tmp3 = fxp_mul32_by_16(vec[2] << 1, Qfmt15(0.54119610014620F)); /* (1/(2*cos(2*phi)));*/ tmp7 = fxp_mul32_Q29(vec[6], Qfmt(1.30656296487638F)); /* (1/(2*cos(6*phi)));*/ tmp0 = fxp_mul32_by_16((tmp3 - tmp7) << 1, Qfmt15(0.70710678118655F)); /* (1/(2*cos(2*phi))); */ tmp7 = (tmp3 + tmp7) + tmp0; vec[0] = tmp1 + tmp7; tmp2 = fxp_mul32_by_16(vec[1] << 1, Qfmt15(0.50979557910416F)); /* (1/(2*cos( phi)));*/ vec[1] = tmp5 + tmp0; vec[2] = tmp5 - tmp0; tmp4 = fxp_mul32_by_16(vec[3] << 1, Qfmt15(0.60134488693505F)); /* (1/(2*cos(3*phi)));*/ vec[3] = tmp1 - tmp7; tmp6 = fxp_mul32_by_16(vec[5] << 1, Qfmt15(0.89997622313642F)); /* (1/(2*cos(5*phi)));*/ tmp8 = fxp_mul32_Q29(vec[7], Qfmt(2.56291544774151F)); /* (1/(2*cos(7*phi)));*/ tmp7 = tmp2 + tmp8; tmp5 = fxp_mul32_by_16((tmp2 - tmp8) << 1, Qfmt15(0.54119610014620F)); tmp8 = tmp4 + tmp6; tmp6 = fxp_mul32_Q29((tmp4 - tmp6), Qfmt(1.30656296487638F)); tmp0 = tmp7 + tmp8; tmp2 = fxp_mul32_by_16((tmp7 - tmp8) << 1, Qfmt15(0.70710678118655F)); tmp3 = fxp_mul32_by_16((tmp5 - tmp6) << 1, Qfmt15(0.70710678118655F)); tmp1 = (tmp5 + tmp6) + tmp3; tmp5 = tmp0 + tmp1; tmp6 = tmp1 + tmp2; tmp7 = tmp2 + tmp3; vec[7] = vec[0] - tmp5; vec[0] += tmp5; vec[6] = vec[1] - tmp6; vec[1] += tmp6; vec[5] = vec[2] - tmp7; vec[2] += tmp7; vec[4] = vec[3] - tmp3; vec[3] += tmp3; }
/*---------------------------------------------------------------------------- ; DEFINES ; Include all pre-processor statements here. Include conditional ; compile variables also. ----------------------------------------------------------------------------*/ #define R_SHIFT 28 #define Qfmt(x) (Int32)(x*((Int32)1<<R_SHIFT) + (x>=0?0.5F:-0.5F)) #define Qfmt31(x) (Int32)(x*(0x7FFFFFFF) + (x>=0?0.5F:-0.5F)) const Int32 CosTable_8i[8] = { Qfmt31(0.50241928618816F), Qfmt31(0.52249861493969F), Qfmt31(0.56694403481636F), Qfmt31(0.64682178335999F), Qfmt(0.78815462345125F), Qfmt(1.06067768599035F), Qfmt(1.72244709823833F), Qfmt(5.10114861868916F) }; /*---------------------------------------------------------------------------- ; LOCAL FUNCTION DEFINITIONS ; Function Prototype declaration ----------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------- ; LOCAL STORE/BUFFER/POINTER DEFINITIONS ; Variable declaration - defined here and used outside this module ----------------------------------------------------------------------------*/
; Function Prototype declaration ----------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------- ; LOCAL STORE/BUFFER/POINTER DEFINITIONS ; Variable declaration - defined here and used outside this module ----------------------------------------------------------------------------*/ const int32 CosTable_dct32[16] = { Qfmt_31(0.50060299823520F) , Qfmt_31(0.50547095989754F) , Qfmt_31(0.51544730992262F) , Qfmt_31(0.53104259108978F) , Qfmt_31(0.55310389603444F) , Qfmt_31(0.58293496820613F) , Qfmt_31(0.62250412303566F) , Qfmt_31(0.67480834145501F) , Qfmt_31(0.74453627100230F) , Qfmt_31(0.83934964541553F) , Qfmt(0.97256823786196F) , Qfmt(1.16943993343288F) , Qfmt(1.48416461631417F) , Qfmt(2.05778100995341F) , Qfmt(3.40760841846872F) , Qfmt(10.19000812354803F) }; /*---------------------------------------------------------------------------- ; EXTERNAL FUNCTION REFERENCES ; Declare functions defined elsewhere and referenced in this module ----------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------- ; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES ; Declare variables used in this module but defined elsewhere ----------------------------------------------------------------------------*/
; Declare functions defined elsewhere and referenced in this module ----------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------- ; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES ; Declare variables used in this module but defined elsewhere ----------------------------------------------------------------------------*/ #include "pv_audio_type_defs.h" #include "fxp_mul32.h" #define R_SHIFT 29 #define Qfmt(x) (Int32)(x*((Int32)1<<R_SHIFT) + (x>=0?0.5F:-0.5F)) const Int32 InvFiltFactors[5] = {Qfmt(0.00f), /* OFF_LEVEL */ Qfmt(0.60f), /* TRANSITION_LEVEL */ Qfmt(0.75f), /* LOW_LEVEL */ Qfmt(0.90f), /* MID_LEVEL */ Qfmt(0.98f) }; /* HIGH_LEVEL */ /*---------------------------------------------------------------------------- ; FUNCTION CODE ----------------------------------------------------------------------------*/ void sbr_inv_filt_levelemphasis(INVF_MODE *invFiltMode, INVF_MODE *prevInvFiltMode, Int32 nNfb, Int32 BwVector[MAX_NUM_PATCHES], Int32 BwVectorOld[MAX_NUM_PATCHES])
; Include all pre-processor statements here. Include conditional ; compile variables also. ----------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------- ; LOCAL FUNCTION DEFINITIONS ; Function Prototype declaration ----------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------- ; LOCAL STORE/BUFFER/POINTER DEFINITIONS ; Variable declaration - defined here and used outside this module ----------------------------------------------------------------------------*/ const int32 cosTerms_dct18[9] = { Qfmt(0.50190991877167f), Qfmt(0.51763809020504f), Qfmt(0.55168895948125f), Qfmt(0.61038729438073f), Qfmt(0.70710678118655f), Qfmt(0.87172339781055f), Qfmt(1.18310079157625f), Qfmt(1.93185165257814f), Qfmt(5.73685662283493f) }; const int32 cosTerms_1_ov_cos_phi[18] = { Qfmt1(0.50047634258166f), Qfmt1(0.50431448029008f), Qfmt1(0.51213975715725f), Qfmt1(0.52426456257041f), Qfmt1(0.54119610014620f), Qfmt1(0.56369097343317f), Qfmt1(0.59284452371708f), Qfmt1(0.63023620700513f), Qfmt1(0.67817085245463f), Qfmt2(0.74009361646113f), Qfmt2(0.82133981585229f), Qfmt2(0.93057949835179f), Qfmt2(1.08284028510010f), Qfmt2(1.30656296487638f), Qfmt2(1.66275476171152f), Qfmt2(2.31011315767265f), Qfmt2(3.83064878777019f), Qfmt2(11.46279281302667f)
----------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------- ; DEFINES ; Include all pre-processor statements here. Include conditional ; compile variables also. ----------------------------------------------------------------------------*/ #define R_SHIFT 28 #define Qfmt(x) (Int32)(x*((Int32)1<<R_SHIFT) + (x>=0?0.5F:-0.5F)) const Int32 CosTable_8[8] = { Qfmt(0.50241928618816F), Qfmt(0.52249861493969F), Qfmt(0.56694403481636F), Qfmt(0.64682178335999F), Qfmt(0.78815462345125F), Qfmt(1.06067768599035F), Qfmt(1.72244709823833F), Qfmt(5.10114861868916F) }; /*---------------------------------------------------------------------------- ; LOCAL FUNCTION DEFINITIONS ; Function Prototype declaration ----------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------- ; LOCAL STORE/BUFFER/POINTER DEFINITIONS ; Variable declaration - defined here and used outside this module ----------------------------------------------------------------------------*/
void sbr_envelope_unmapping(SBR_FRAME_DATA * hFrameData1, SBR_FRAME_DATA * hFrameData2) { Int32 i; Int32 tempLeft; Int32 tempRight; Int32 tmp; Int32 *iEnvelopeLeft_man = hFrameData1->iEnvelope_man; Int32 *iEnvelopeLeft_exp = hFrameData1->iEnvelope_exp; Int32 *noiseFloorLeft_man = hFrameData1->sbrNoiseFloorLevel_man; Int32 *noiseFloorLeft_exp = hFrameData1->sbrNoiseFloorLevel_exp; Int32 *iEnvelopeRight_man = hFrameData2->iEnvelope_man; Int32 *iEnvelopeRight_exp = hFrameData2->iEnvelope_exp; Int32 *noiseFloorRight_man = hFrameData2->sbrNoiseFloorLevel_man; Int32 *noiseFloorRight_exp = hFrameData2->sbrNoiseFloorLevel_exp; if (hFrameData2->ampRes) { for (i = 0; i < hFrameData1->nScaleFactors; i++) { tempRight = iEnvelopeRight_man[i]; tempLeft = iEnvelopeLeft_man[i]; /* iEnvelope[i] always positive 6 bits max */ iEnvelopeLeft_exp[i] = tempLeft + 7; iEnvelopeRight_exp[i] = tempRight - 12; iEnvelopeRight_man[i] = Qfmt(1.000F); /* * iEnvelopeRight[i] = tempLeft / (1 + tempRight); * iEnvelopeLeft[i] = tempRight * iEnvelopeRight[i]; * * * iEnvelopeRight[i] = k*2^n/(1+2^m) = k*2^(n-m)/(1 + 2^-m); * where k = 1 or sqrt(2) */ if (iEnvelopeRight_exp[i] >= 0) { if (iEnvelopeRight_exp[i] < 11) { iEnvelopeRight_man[i] = one_over_one_plus_two_to_n[ iEnvelopeRight_exp[i]]; } else /* 1/(1+2^-m) == 1 - 2^-m ; for m >= 10 */ { iEnvelopeRight_man[i] -= (Qfmt(1.000F) >> iEnvelopeRight_exp[i]); } iEnvelopeRight_exp[i] = iEnvelopeLeft_exp[i] - iEnvelopeRight_exp[i]; } else { if (iEnvelopeRight_exp[i] > -11) { iEnvelopeRight_man[i] -= one_over_one_plus_two_to_n[ -iEnvelopeRight_exp[i]]; iEnvelopeRight_exp[i] = iEnvelopeLeft_exp[i] - iEnvelopeRight_exp[i]; } else /* 1/(1+2^m) == 2^-m ; for m >= 10 */ { iEnvelopeRight_exp[i] = iEnvelopeLeft_exp[i]; iEnvelopeLeft_exp[i] = 0; } } iEnvelopeLeft_man[i] = iEnvelopeRight_man[i]; } }
----------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------- ; LOCAL STORE/BUFFER/POINTER DEFINITIONS ; Variable declaration - defined here and used outside this module ----------------------------------------------------------------------------*/ #define R_SHIFT 30 #define Qfmt(x) (Int32)(x*((Int32)1<<R_SHIFT) + (x>=0?0.5F:-0.5F)) /* * 1./(1+2.^-[0:10]) */ const Int32 one_over_one_plus_two_to_n[11] = { Qfmt(0.50000000000000F), Qfmt(0.66666666666667F), Qfmt(0.80000000000000F), Qfmt(0.88888888888889F), Qfmt(0.94117647058824F), Qfmt(0.96969696969697F), Qfmt(0.98461538461538F), Qfmt(0.99224806201550F), Qfmt(0.99610894941634F), Qfmt(0.99805068226121F), Qfmt(0.99902439024390F) }; /* * 1./(1+2.^[0.5:-1:-10.5]) */ const Int32 one_over_one_plus_sq_2_by_two_to_n[12] = { Qfmt(0.41421356237310F), Qfmt(0.58578643762690F), Qfmt(0.73879612503626F), Qfmt(0.84977889517767F), Qfmt(0.91878969685839F), Qfmt(0.95767628767521F), Qfmt(0.97838063800882F), Qfmt(0.98907219289563F), Qfmt(0.99450607818892F), Qfmt(0.99724547251514F), Qfmt(0.99862083678608F), Qfmt(0.99930994254211F) };