1
0
Fork 0
forked from len0rd/rockbox

Further libfaad cleanup. Make libfaad compilable for floating point. Floating point cannot be used as reference though, as errorous noise is the result.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@28071 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Andree Buschmann 2010-09-14 06:03:39 +00:00
parent f24e130017
commit cba9d259b0
3 changed files with 42 additions and 86 deletions

View file

@ -95,11 +95,6 @@ extern struct codec_api* ci;
/* Use if target platform has address generators with autoincrement */
//#define PREFER_POINTERS
#ifdef _WIN32_WCE
#define FIXED_POINT
#endif
#define ERROR_RESILIENCE
@ -328,7 +323,7 @@ char *strchr(), *strrchr();
*y2 = MUL_F(x2, c1) - MUL_F(x1, c2);
}
/* rockbox: must be commented to build for non-FP
#if defined(_WIN32) && !defined(__MINGW32__)
#define HAS_LRINTF
static INLINE int lrintf(float f)
@ -355,7 +350,7 @@ char *strchr(), *strrchr();
return i;
}
#endif
*/
#ifdef __ICL /* only Intel C compiler has fmath ??? */

View file

@ -146,23 +146,15 @@ void hf_generation(sbr_info *sbr, qmf_t Xlow[MAX_NTSRHFG][64],
#endif
#ifdef SBR_LOW_POWER
QMF_RE(Xhigh[l + offset][k]) =
temp3_r
+(MUL_R(a0_r, temp2_r) +
MUL_R(a1_r, temp1_r));
QMF_RE(Xhigh[l + offset][k]) = temp3_r +
(MUL_R(a0_r, temp2_r) + MUL_R(a1_r, temp1_r));
#else
QMF_RE(Xhigh[l + offset][k]) =
temp3_r
+(MUL_R(a0_r, temp2_r) -
MUL_R(a0_i, temp2_i) +
MUL_R(a1_r, temp1_r) -
MUL_R(a1_i, temp1_i));
QMF_IM(Xhigh[l + offset][k]) =
temp3_i
+(MUL_R(a0_i, temp2_r) +
MUL_R(a0_r, temp2_i) +
MUL_R(a1_i, temp1_r) +
MUL_R(a1_r, temp1_i));
QMF_RE(Xhigh[l + offset][k]) = temp3_r +
(MUL_R(a0_r, temp2_r) - MUL_R(a0_i, temp2_i) +
MUL_R(a1_r, temp1_r) - MUL_R(a1_i, temp1_i));
QMF_IM(Xhigh[l + offset][k]) = temp3_i +
(MUL_R(a0_i, temp2_r) + MUL_R(a0_r, temp2_i) +
MUL_R(a1_i, temp1_r) + MUL_R(a1_r, temp1_i));
#endif
}
} else {
@ -199,6 +191,7 @@ static void auto_correlation(sbr_info *sbr, acorr_coef *ac,
uint8_t bd, uint8_t len)
{
real_t r01 = 0, r02 = 0, r11 = 0;
real_t tmp1, tmp2;
int8_t j;
uint8_t offset = sbr->tHFAdj;
#ifdef FIXED_POINT
@ -233,12 +226,13 @@ static void auto_correlation(sbr_info *sbr, acorr_coef *ac,
r02 += MUL_R(buf_j , buf_j_2);
r11 += MUL_R(buf_j_1, buf_j_1);
}
RE(ac->r12) = r01 -
MUL_R(((QMF_RE(buffer[len+offset-1][bd]))>>exp), ((QMF_RE(buffer[len+offset-2][bd]))>>exp)) +
MUL_R(((QMF_RE(buffer[ offset-1][bd]))>>exp), ((QMF_RE(buffer[ offset-2][bd]))>>exp));
RE(ac->r22) = r11 -
MUL_R(((QMF_RE(buffer[len+offset-2][bd]))>>exp), ((QMF_RE(buffer[len+offset-2][bd]))>>exp)) +
MUL_R(((QMF_RE(buffer[ offset-2][bd]))>>exp), ((QMF_RE(buffer[ offset-2][bd]))>>exp));
tmp1 = (QMF_RE(buffer[len+offset-1][bd]))>>exp;
tmp2 = (QMF_RE(buffer[ offset-1][bd]))>>exp;
RE(ac->r12) = r01 - MUL_R(tmp1, tmp1) + MUL_R(tmp2, tmp2);
tmp1 = (QMF_RE(buffer[len+offset-2][bd]))>>exp;
tmp2 = (QMF_RE(buffer[ offset-2][bd]))>>exp;
RE(ac->r22) = r11 - MUL_R(tmp1, tmp1) + MUL_R(tmp2, tmp2);
#else
for (j = offset; j < len + offset; j++)
{
@ -246,12 +240,13 @@ static void auto_correlation(sbr_info *sbr, acorr_coef *ac,
r02 += QMF_RE(buffer[j ][bd]) * QMF_RE(buffer[j-2][bd]);
r11 += QMF_RE(buffer[j-1][bd]) * QMF_RE(buffer[j-1][bd]);
}
RE(ac->r12) = r01 -
QMF_RE(buffer[len+offset-1][bd]) * QMF_RE(buffer[len+offset-2][bd]) +
QMF_RE(buffer[ offset-1][bd]) * QMF_RE(buffer[ offset-2][bd]);
RE(ac->r22) = r11 -
QMF_RE(buffer[len+offset-2][bd]) * QMF_RE(buffer[len+offset-2][bd]) +
QMF_RE(buffer[ offset-2][bd]) * QMF_RE(buffer[ offset-2][bd]);
tmp1 = (QMF_RE(buffer[len+offset-1][bd]));
tmp2 = (QMF_RE(buffer[ offset-1][bd]));
RE(ac->r12) = r01 - tmp1*tmp1 + tmp2*tmp2;
tmp1 = (QMF_RE(buffer[len+offset-2][bd]));
tmp2 = (QMF_RE(buffer[ offset-2][bd]));
RE(ac->r22) = r11 - tmp1*tmp1 + tmp2*tmp2;
#endif
RE(ac->r01) = r01;
RE(ac->r02) = r02;
@ -313,30 +308,13 @@ static void auto_correlation(sbr_info *sbr, acorr_coef *ac, qmf_t buffer[MAX_NTS
r11r += MUL_R(temp2_r, temp2_r) + MUL_R(temp2_i, temp2_i);
}
// These are actual values in temporary variable at this point
// temp1_r = (QMF_RE(buffer[len+offset-1-2][bd] + (1<<(exp-1))) >> exp;
// temp1_i = (QMF_IM(buffer[len+offset-1-2][bd] + (1<<(exp-1))) >> exp;
// temp2_r = (QMF_RE(buffer[len+offset-1-1][bd] + (1<<(exp-1))) >> exp;
// temp2_i = (QMF_IM(buffer[len+offset-1-1][bd] + (1<<(exp-1))) >> exp;
// temp3_r = (QMF_RE(buffer[len+offset-1][bd]) + (1<<(exp-1))) >> exp;
// temp3_i = (QMF_IM(buffer[len+offset-1][bd]) + (1<<(exp-1))) >> exp;
// temp4_r = (QMF_RE(buffer[offset-2][bd]) + (1<<(exp-1))) >> exp;
// temp4_i = (QMF_IM(buffer[offset-2][bd]) + (1<<(exp-1))) >> exp;
// temp5_r = (QMF_RE(buffer[offset-1][bd]) + (1<<(exp-1))) >> exp;
// temp5_i = (QMF_IM(buffer[offset-1][bd]) + (1<<(exp-1))) >> exp;
RE(ac->r12) = r01r -
(MUL_R(temp3_r, temp2_r) + MUL_R(temp3_i, temp2_i)) +
(MUL_R(temp5_r, temp4_r) + MUL_R(temp5_i, temp4_i));
IM(ac->r12) = r01i -
(MUL_R(temp3_i, temp2_r) - MUL_R(temp3_r, temp2_i)) +
(MUL_R(temp5_i, temp4_r) - MUL_R(temp5_r, temp4_i));
RE(ac->r22) = r11r -
(MUL_R(temp2_r, temp2_r) + MUL_R(temp2_i, temp2_i)) +
(MUL_R(temp4_r, temp4_r) + MUL_R(temp4_i, temp4_i));
RE(ac->r12) = r01r - (MUL_R(temp3_r, temp2_r) + MUL_R(temp3_i, temp2_i)) +
(MUL_R(temp5_r, temp4_r) + MUL_R(temp5_i, temp4_i));
IM(ac->r12) = r01i - (MUL_R(temp3_i, temp2_r) - MUL_R(temp3_r, temp2_i)) +
(MUL_R(temp5_i, temp4_r) - MUL_R(temp5_r, temp4_i));
RE(ac->r22) = r11r - (MUL_R(temp2_r, temp2_r) + MUL_R(temp2_i, temp2_i)) +
(MUL_R(temp4_r, temp4_r) + MUL_R(temp4_i, temp4_i));
#else
temp2_r = QMF_RE(buffer[offset-2][bd]);
temp2_i = QMF_IM(buffer[offset-2][bd]);
temp3_r = QMF_RE(buffer[offset-1][bd]);
@ -349,10 +327,10 @@ static void auto_correlation(sbr_info *sbr, acorr_coef *ac, qmf_t buffer[MAX_NTS
for (j = offset; j < len + offset; j++)
{
temp1_r = temp2_r; // temp1_r = QMF_RE(buffer[j-2][bd];
temp1_i = temp2_i; // temp1_i = QMF_IM(buffer[j-2][bd];
temp2_r = temp3_r; // temp2_r = QMF_RE(buffer[j-1][bd];
temp2_i = temp3_i; // temp2_i = QMF_IM(buffer[j-1][bd];
temp1_r = temp2_r;
temp1_i = temp2_i;
temp2_r = temp3_r;
temp2_i = temp3_i;
temp3_r = QMF_RE(buffer[j][bd]);
temp3_i = QMF_IM(buffer[j][bd]);
r01r += temp3_r * temp2_r + temp3_i * temp2_i;
@ -362,30 +340,13 @@ static void auto_correlation(sbr_info *sbr, acorr_coef *ac, qmf_t buffer[MAX_NTS
r11r += temp2_r * temp2_r + temp2_i * temp2_i;
}
// These are actual values in temporary variable at this point
// temp1_r = QMF_RE(buffer[len+offset-1-2][bd];
// temp1_i = QMF_IM(buffer[len+offset-1-2][bd];
// temp2_r = QMF_RE(buffer[len+offset-1-1][bd];
// temp2_i = QMF_IM(buffer[len+offset-1-1][bd];
// temp3_r = QMF_RE(buffer[len+offset-1][bd]);
// temp3_i = QMF_IM(buffer[len+offset-1][bd]);
// temp4_r = QMF_RE(buffer[offset-2][bd]);
// temp4_i = QMF_IM(buffer[offset-2][bd]);
// temp5_r = QMF_RE(buffer[offset-1][bd]);
// temp5_i = QMF_IM(buffer[offset-1][bd]);
RE(ac->r12) = r01r -
(temp3_r * temp2_r + temp3_i * temp2_i) +
(temp5_r * temp4_r + temp5_i * temp4_i);
IM(ac->r12) = r01i -
(temp3_i * temp2_r - temp3_r * temp2_i) +
(temp5_i * temp4_r - temp5_r * temp4_i);
RE(ac->r22) = r11r -
(temp2_r * temp2_r + temp2_i * temp2_i) +
(temp4_r * temp4_r + temp4_i * temp4_i);
RE(ac->r12) = r01r - (temp3_r * temp2_r + temp3_i * temp2_i) +
(temp5_r * temp4_r + temp5_i * temp4_i);
IM(ac->r12) = r01i - (temp3_i * temp2_r - temp3_r * temp2_i) +
(temp5_i * temp4_r - temp5_r * temp4_i);
RE(ac->r22) = r11r - (temp2_r * temp2_r + temp2_i * temp2_i) +
(temp4_r * temp4_r + temp4_i * temp4_i);
#endif
RE(ac->r01) = r01r;
IM(ac->r01) = r01i;
RE(ac->r02) = r02r;

View file

@ -44,7 +44,7 @@
#define FAAD_ANALYSIS_SCALE2(X) ((X))
#define FAAD_ANALYSIS_SCALE3(X) ((X))
#else
#define FAAD_ANALYSIS_SCALE1(X) ((X)*scale)
#define FAAD_SYNTHESIS_SCALE(X) ((X)*scale)
#define FAAD_ANALYSIS_SCALE1(X) ((X))
#define FAAD_ANALYSIS_SCALE2(X) (2.*(X))
#define FAAD_ANALYSIS_SCALE3(X) ((X)/32.0)