diff options
author | diego <diego@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2004-09-24 17:31:36 +0000 |
---|---|---|
committer | diego <diego@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2004-09-24 17:31:36 +0000 |
commit | e1ece5e2eb68c81b1645c9ff989c833c4d67dfd8 (patch) | |
tree | 8553b3a4ef8164d14ff1b4a3f67e57cfa1d8908a /libfaad2/sbr_fbt.c | |
parent | 2887bacbdb6bd320e4840fd230e92a59cc74b9ae (diff) | |
download | mpv-e1ece5e2eb68c81b1645c9ff989c833c4d67dfd8.tar.bz2 mpv-e1ece5e2eb68c81b1645c9ff989c833c4d67dfd8.tar.xz |
Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
patch by adland <adland123 at yahoo dot com>
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@13454 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libfaad2/sbr_fbt.c')
-rw-r--r-- | libfaad2/sbr_fbt.c | 67 |
1 files changed, 44 insertions, 23 deletions
diff --git a/libfaad2/sbr_fbt.c b/libfaad2/sbr_fbt.c index a92a02be2e..798265af7e 100644 --- a/libfaad2/sbr_fbt.c +++ b/libfaad2/sbr_fbt.c @@ -23,7 +23,7 @@ ** For more info contact Ahead Software through Mpeg4AAClicense@nero.com. ** ** Initially modified for use with MPlayer by Arpad Gereöffy on 2003/08/30 -** $Id: sbr_fbt.c,v 1.3 2004/06/02 22:59:03 diego Exp $ +** $Id: sbr_fbt.c,v 1.4 2004/06/23 13:50:51 diego Exp $ ** detailed CVS changelog at http://www.mplayerhq.hu/cgi-bin/cvsweb.cgi/main/ **/ @@ -226,7 +226,7 @@ uint8_t master_frequency_table_fs0(sbr_info *sbr, uint8_t k0, uint8_t k2, if (k2Diff) { incr = (k2Diff > 0) ? -1 : 1; - k = (k2Diff > 0) ? (nrBands-1) : 0; + k = (uint8_t) ((k2Diff > 0) ? (nrBands-1) : 0); while (k2Diff != 0) { @@ -238,10 +238,10 @@ uint8_t master_frequency_table_fs0(sbr_info *sbr, uint8_t k0, uint8_t k2, sbr->f_master[0] = k0; for (k = 1; k <= nrBands; k++) - sbr->f_master[k] = sbr->f_master[k-1] + vDk[k-1]; + sbr->f_master[k] = (uint8_t)(sbr->f_master[k-1] + vDk[k-1]); - sbr->N_master = nrBands; - sbr->N_master = min(sbr->N_master, 64); + sbr->N_master = (uint8_t)nrBands; + sbr->N_master = (min(sbr->N_master, 64)); #if 0 printf("f_master[%d]: ", nrBands); @@ -357,6 +357,9 @@ uint8_t master_frequency_table(sbr_info *sbr, uint8_t k0, uint8_t k2, uint8_t temp1[] = { 6, 5, 4 }; real_t q, qk; int32_t A_1; +#ifdef FIXED_POINT + real_t rk2, rk0; +#endif /* mft only defined for k2 > k0 */ if (k2 <= k0) @@ -368,7 +371,9 @@ uint8_t master_frequency_table(sbr_info *sbr, uint8_t k0, uint8_t k2, bands = temp1[bs_freq_scale-1]; #ifdef FIXED_POINT - if (REAL_CONST(k2) > MUL_R(REAL_CONST(k0),REAL_CONST(2.2449))) + rk0 = (real_t)k0 << REAL_BITS; + rk2 = (real_t)k2 << REAL_BITS; + if (rk2 > MUL_C(rk0, COEF_CONST(2.2449))) #else if ((float)k2/(float)k0 > 2.2449) #endif @@ -380,16 +385,18 @@ uint8_t master_frequency_table(sbr_info *sbr, uint8_t k0, uint8_t k2, k1 = k2; } - nrBand0 = 2 * find_bands(0, bands, k0, k1); + nrBand0 = (uint8_t)(2 * find_bands(0, bands, k0, k1)); nrBand0 = min(nrBand0, 63); if (nrBand0 <= 0) return 1; q = find_initial_power(nrBand0, k0, k1); - qk = REAL_CONST(k0); #ifdef FIXED_POINT - A_1 = (int32_t)((qk + REAL_CONST(0.5)) >> REAL_BITS); + qk = (real_t)k0 << REAL_BITS; + //A_1 = (int32_t)((qk + REAL_CONST(0.5)) >> REAL_BITS); + A_1 = k0; #else + qk = REAL_CONST(k0); A_1 = (int32_t)(qk + .5); #endif for (k = 0; k <= nrBand0; k++) @@ -419,21 +426,23 @@ uint8_t master_frequency_table(sbr_info *sbr, uint8_t k0, uint8_t k2, if (!twoRegions) { for (k = 0; k <= nrBand0; k++) - sbr->f_master[k] = vk0[k]; + sbr->f_master[k] = (uint8_t) vk0[k]; sbr->N_master = nrBand0; sbr->N_master = min(sbr->N_master, 64); return 0; } - nrBand1 = 2 * find_bands(1 /* warped */, bands, k1, k2); + nrBand1 = (uint8_t)(2 * find_bands(1 /* warped */, bands, k1, k2)); nrBand1 = min(nrBand1, 63); q = find_initial_power(nrBand1, k1, k2); - qk = REAL_CONST(k1); #ifdef FIXED_POINT - A_1 = (int32_t)((qk + REAL_CONST(0.5)) >> REAL_BITS); + qk = (real_t)k1 << REAL_BITS; + //A_1 = (int32_t)((qk + REAL_CONST(0.5)) >> REAL_BITS); + A_1 = k1; #else + qk = REAL_CONST(k1); A_1 = (int32_t)(qk + .5); #endif for (k = 0; k <= nrBand1 - 1; k++) @@ -474,11 +483,11 @@ uint8_t master_frequency_table(sbr_info *sbr, uint8_t k0, uint8_t k2, sbr->N_master = min(sbr->N_master, 64); for (k = 0; k <= nrBand0; k++) { - sbr->f_master[k] = vk0[k]; + sbr->f_master[k] = (uint8_t) vk0[k]; } for (k = nrBand0 + 1; k <= sbr->N_master; k++) { - sbr->f_master[k] = vk1[k - nrBand0]; + sbr->f_master[k] = (uint8_t) vk1[k - nrBand0]; } #if 0 @@ -529,11 +538,13 @@ uint8_t derived_frequency_table(sbr_info *sbr, uint8_t bs_xover_band, if (k == 0) i = 0; else - i = 2*k - minus; + i = (uint8_t)(2*k - minus); sbr->f_table_res[LO_RES][k] = sbr->f_table_res[HI_RES][i]; } #if 0 + printf("bs_freq_scale: %d\n", sbr->bs_freq_scale); + printf("bs_limiter_bands: %d\n", sbr->bs_limiter_bands); printf("f_table_res[HI_RES][%d]: ", sbr->N_high); for (k = 0; k <= sbr->N_high; k++) { @@ -558,7 +569,7 @@ uint8_t derived_frequency_table(sbr_info *sbr, uint8_t bs_xover_band, #if 0 sbr->N_Q = max(1, (int32_t)(sbr->bs_noise_bands*(log(k2/(float)sbr->kx)/log(2.0)) + 0.5)); #else - sbr->N_Q = max(1, find_bands(0, sbr->bs_noise_bands, sbr->kx, k2)); + sbr->N_Q = (uint8_t)(max(1, find_bands(0, sbr->bs_noise_bands, sbr->kx, k2))); #endif sbr->N_Q = min(5, sbr->N_Q); } @@ -594,7 +605,7 @@ uint8_t derived_frequency_table(sbr_info *sbr, uint8_t bs_xover_band, printf("f_table_noise[%d]: ", sbr->N_Q); for (k = 0; k <= sbr->N_Q; k++) { - printf("%d ", sbr->f_table_noise[k]); + printf("%d ", sbr->f_table_noise[k] - sbr->kx); } printf("\n"); #endif @@ -613,8 +624,8 @@ void limiter_frequency_table(sbr_info *sbr) static const real_t limiterBandsPerOctave[] = { REAL_CONST(1.2), REAL_CONST(2), REAL_CONST(3) }; #else - static const real_t limiterBandsCompare[] = { REAL_CONST(1.328125), - REAL_CONST(1.1875), REAL_CONST(1.125) }; + static const real_t limiterBandsCompare[] = { REAL_CONST(1.327152), + REAL_CONST(1.185093), REAL_CONST(1.119872) }; #endif uint8_t k, s; int8_t nrLim; @@ -626,6 +637,15 @@ void limiter_frequency_table(sbr_info *sbr) sbr->f_table_lim[0][1] = sbr->f_table_res[LO_RES][sbr->N_low] - sbr->kx; sbr->N_L[0] = 1; +#if 0 + printf("f_table_lim[%d][%d]: ", 0, sbr->N_L[0]); + for (k = 0; k <= sbr->N_L[0]; k++) + { + printf("%d ", sbr->f_table_lim[0][k]); + } + printf("\n"); +#endif + for (s = 1; s < 4; s++) { int32_t limTable[100 /*TODO*/] = {0}; @@ -666,17 +686,18 @@ restart: if (limTable[k-1] != 0) #if 0 nOctaves = REAL_CONST(log((float)limTable[k]/(float)limTable[k-1])/log(2.0)); -#endif +#else #ifdef FIXED_POINT - nOctaves = SBR_DIV(REAL_CONST(limTable[k]),REAL_CONST(limTable[k-1])); + nOctaves = DIV_R((limTable[k]<<REAL_BITS),REAL_CONST(limTable[k-1])); #else nOctaves = (real_t)limTable[k]/(real_t)limTable[k-1]; #endif +#endif else nOctaves = 0; #if 0 - if ((MUL(nOctaves,limBands)) < REAL_CONST(0.49)) + if ((MUL_R(nOctaves,limBands)) < REAL_CONST(0.49)) #else if (nOctaves < limiterBandsCompare[s - 1]) #endif |