summaryrefslogtreecommitdiffstats
path: root/apps/codecs
diff options
context:
space:
mode:
authorAndree Buschmann <AndreeBuschmann@t-online.de>2008-06-28 12:55:34 +0000
committerAndree Buschmann <AndreeBuschmann@t-online.de>2008-06-28 12:55:34 +0000
commit25ffa8b198a313757541d0591b20594abdccc5aa (patch)
treefba5f7cdd4b23a3bcd369500786c986076de521b /apps/codecs
parent3d0c81db957f0c80e0420a2cf8476829f2ce811b (diff)
downloadrockbox-25ffa8b198a313757541d0591b20594abdccc5aa.tar.gz
rockbox-25ffa8b198a313757541d0591b20594abdccc5aa.zip
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
Diffstat (limited to 'apps/codecs')
-rw-r--r--apps/codecs/libmusepack/decoder.h8
-rw-r--r--apps/codecs/libmusepack/mpc_decoder.c6
2 files changed, 11 insertions, 3 deletions
diff --git a/apps/codecs/libmusepack/decoder.h b/apps/codecs/libmusepack/decoder.h
index 499cd53137..9031bf29e7 100644
--- a/apps/codecs/libmusepack/decoder.h
+++ b/apps/codecs/libmusepack/decoder.h
@@ -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 {
diff --git a/apps/codecs/libmusepack/mpc_decoder.c b/apps/codecs/libmusepack/mpc_decoder.c
index e63d1efaec..d211980782 100644
--- a/apps/codecs/libmusepack/mpc_decoder.c
+++ b/apps/codecs/libmusepack/mpc_decoder.c
@@ -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 );