From e09b87a31f1cef46ff2017f031c2ce13a2502082 Mon Sep 17 00:00:00 2001 From: Jens Arnold Date: Sat, 19 May 2007 23:31:42 +0000 Subject: 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 --- apps/plugins/wavrecord.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'apps') 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; -- cgit v1.2.3