diff options
| author | Andree Buschmann <AndreeBuschmann@t-online.de> | 2008-06-22 09:11:06 +0000 |
|---|---|---|
| committer | Andree Buschmann <AndreeBuschmann@t-online.de> | 2008-06-22 09:11:06 +0000 |
| commit | f0087f06aad7c35d5c95421e661f0852814cf90a (patch) | |
| tree | c4716ed123f9aa0d622294976a8e20adbada3cd3 /apps/codecs/libmusepack | |
| parent | 5acfae2a3c42bc9c585b80d60a4842037c0a8048 (diff) | |
| download | rockbox-f0087f06aad7c35d5c95421e661f0852814cf90a.zip rockbox-f0087f06aad7c35d5c95421e661f0852814cf90a.tar.gz rockbox-f0087f06aad7c35d5c95421e661f0852814cf90a.tar.bz2 rockbox-f0087f06aad7c35d5c95421e661f0852814cf90a.tar.xz | |
Small correction to avoid overflow within calculate_V()-function. Re-enable full precision for ARM as speed-optimized version is not that much faster anymore.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@17750 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/codecs/libmusepack')
| -rwxr-xr-x | apps/codecs/libmusepack/mpc_config.h | 2 | ||||
| -rw-r--r-- | apps/codecs/libmusepack/synth_filter.c | 6 |
2 files changed, 5 insertions, 3 deletions
diff --git a/apps/codecs/libmusepack/mpc_config.h b/apps/codecs/libmusepack/mpc_config.h index 6993775..fa78a46 100755 --- a/apps/codecs/libmusepack/mpc_config.h +++ b/apps/codecs/libmusepack/mpc_config.h @@ -37,7 +37,7 @@ #if defined(CPU_COLDFIRE)
// do nothing
#elif defined(CPU_ARM)
- #define OPTIMIZE_FOR_SPEED
+ //#define OPTIMIZE_FOR_SPEED
#else
#define OPTIMIZE_FOR_SPEED
#endif
diff --git a/apps/codecs/libmusepack/synth_filter.c b/apps/codecs/libmusepack/synth_filter.c index 7d83c75..fb956fb 100644 --- a/apps/codecs/libmusepack/synth_filter.c +++ b/apps/codecs/libmusepack/synth_filter.c @@ -115,8 +115,8 @@ static const MPC_SAMPLE_FORMAT Di_opt [512] ICONST_ATTR = { #undef D -// needed to prevent from internal overflow in calculate_V -#define OVERFLOW_FIX 1 +// needed to prevent from internal overflow in calculate_V (see below) +#define OVERFLOW_FIX 2 // V-coefficients were expanded (<<) by V_COEFFICIENT_EXPAND #define V_COEFFICIENT_EXPAND 27 @@ -128,6 +128,7 @@ static const MPC_SAMPLE_FORMAT Di_opt [512] ICONST_ATTR = { #define MPC_MULTIPLY_V(sample, vcoef) ( MPC_SHR_RND(sample, 12) * vcoef ) // pre- and postscale are used to avoid internal overflow in synthesis calculation + // samples are s15.0, v-coefs are 4.12 -> internal format is s19.12 #define MPC_MULTIPLY_V_PRESCALE(sample, vcoef) ( MPC_SHR_RND(sample, (12+OVERFLOW_FIX)) * vcoef ) #define MPC_MULTIPLY_V_POSTSCALE(sample, vcoef) ( MPC_SHR_RND(sample, (12-OVERFLOW_FIX)) * vcoef ) #define MPC_V_POSTSCALE(sample) (sample<<OVERFLOW_FIX) @@ -141,6 +142,7 @@ static const MPC_SAMPLE_FORMAT Di_opt [512] ICONST_ATTR = { #define MPC_MULTIPLY_V(sample, vcoef) ( (MPC_MULTIPLY_FRACT(sample, vcoef)) << (32-V_COEFFICIENT_EXPAND) ) // pre- and postscale are used to avoid internal overflow in synthesis calculation + // samples are s15.14, v-coefs are 4.27 -> internal format is s19.12 #define MPC_MULTIPLY_V_PRESCALE(sample, vcoef) ( (MPC_MULTIPLY_FRACT(sample, vcoef)) << (32-V_COEFFICIENT_EXPAND-OVERFLOW_FIX) ) #define MPC_MULTIPLY_V_POSTSCALE(sample, vcoef) ( (MPC_MULTIPLY_FRACT(sample, vcoef)) << (32-V_COEFFICIENT_EXPAND+OVERFLOW_FIX) ) #define MPC_V_POSTSCALE(sample) (sample<<OVERFLOW_FIX) |