summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJens Arnold <amiconn@rockbox.org>2007-05-19 23:31:42 +0000
committerJens Arnold <amiconn@rockbox.org>2007-05-19 23:31:42 +0000
commite09b87a31f1cef46ff2017f031c2ce13a2502082 (patch)
treeebbd3efcaf4c51ffab5072b72d7c8b8f9f1e8cda
parent0671cee53aeeda51af8d9c07c4630f6ab8a810d3 (diff)
downloadrockbox-e09b87a31f1cef46ff2017f031c2ce13a2502082.tar.gz
rockbox-e09b87a31f1cef46ff2017f031c2ce13a2502082.zip
WAV recording plugin: Fix distortion when feeding a full-range digital signal (most noticeable from S/PDIF), and make it obvious that S/PDIF recording ignores the defined sample rate.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@13435 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/plugins/wavrecord.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/apps/plugins/wavrecord.c b/apps/plugins/wavrecord.c
index 8828c1930e..645a968342 100644
--- a/apps/plugins/wavrecord.c
+++ b/apps/plugins/wavrecord.c
@@ -3524,9 +3524,7 @@ static int record_file(char *filename)
rb->lcd_puts(0, 0, filename);
rb->snprintf(buf, sizeof(buf), "%sHz 16bit %s",
samplerate_str[reccfg.samplerate], channel_str[reccfg.channels]);
- rb->lcd_puts(0, 1, buf);
- rb->lcd_update();
-
+
switch (reccfg.source)
{
case SRC_LINE:
@@ -3545,10 +3543,14 @@ static int record_file(char *filename)
#ifdef HAVE_SPDIF_IN
case SRC_SPDIF:
rb->mas_codec_writereg(0, 0x01);
+ rb->snprintf(buf, sizeof(buf), "16bit %s",
+ channel_str[reccfg.channels]);
break;
#endif
}
-
+ rb->lcd_puts(0, 1, buf);
+ rb->lcd_update();
+
mas = 0x0060 /* no framing, little endian */
| ((reccfg.channels == 0) ? 0x10 : 0) /* mono/stereo */
| sampr[reccfg.samplerate][0];
@@ -3569,6 +3571,10 @@ static int record_file(char *filename)
mas = 0x2125; /* recording, ADC input, validate */
rb->mas_writemem(MAS_BANK_D0, PCM_MAIN_IO_CONTROL, &mas, 1);
+ mas = 0x80001; /* avoid distortion (overflow on full-range input samples) */
+ rb->mas_writemem(MAS_BANK_D0, PCM_VOL_IN_LL, &mas, 1); /* LL */
+ rb->mas_writemem(MAS_BANK_D0, PCM_VOL_IN_RR, &mas, 1); /* RR */
+
hijack_interrupts(true);
rec_tick_enable(true);
recording = true;