Solve possible glitch after seeking in mpc files. Documented the special treatment after seek.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@17829 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Andree Buschmann 2008-06-28 12:55:34 +00:00
parent 3d0c81db95
commit 25ffa8b198
2 changed files with 11 additions and 3 deletions

View file

@ -43,7 +43,15 @@
#include "reader.h"
#include "streaminfo.h"
// define this to enable/disable support for streamversion SV4-6
//#define MPC_SUPPORT_SV456
// SCF_HACK is used to avoid possible distortion after seeking with mpc files
// background: scf's are coded differential in time domain. if you seek to the
// desired postion it might happen that the baseline is missed and the resulting
// scf is much too high (hissing noise). this hack uses the lowest scaling until
// a non-differential scf could be decoded after seek. through this hack subbands
// are faded out until there was at least a single non-differential scf found.
#define SCF_HACK
enum {

View file

@ -65,7 +65,7 @@ extern const HuffmanTyp mpc_table_Region_C [ 4];
#endif
#ifdef SCF_HACK
#define SCF_DIFF(SCF, D) (SCF == -128 ? -128 : SCF + D)
#define SCF_DIFF(SCF, D) (SCF == 127 ? 127 : SCF + D)
#else
#define SCF_DIFF(SCF, D) SCF + D
#endif
@ -1565,8 +1565,8 @@ void mpc_decoder_reset_state(mpc_decoder *d) {
memset(d->Y_L , 0, sizeof Y_L );
memset(d->Y_R , 0, sizeof Y_R );
#ifdef SCF_HACK
memset(d->SCF_Index_L , -128, sizeof d->SCF_Index_L );
memset(d->SCF_Index_R , -128, sizeof d->SCF_Index_R );
memset(d->SCF_Index_L , 127, sizeof d->SCF_Index_L );
memset(d->SCF_Index_R , 127, sizeof d->SCF_Index_R );
#else
memset(d->SCF_Index_L , 0, sizeof d->SCF_Index_L );
memset(d->SCF_Index_R , 0, sizeof d->SCF_Index_R );