From 62d666df6f0e35b0619a7c0c04ec61609709e41a Mon Sep 17 00:00:00 2001 From: Michael Giacomelli Date: Mon, 25 Jul 2011 01:00:15 +0000 Subject: Convert AMSv2 microphone samples from 14 to 16 bit before storing them. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30209 a1c6a512-1295-4272-9138-f99709370657 --- firmware/target/arm/as3525/pcm-as3525.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'firmware') diff --git a/firmware/target/arm/as3525/pcm-as3525.c b/firmware/target/arm/as3525/pcm-as3525.c index 1b22d48f7f..a89a47d400 100644 --- a/firmware/target/arm/as3525/pcm-as3525.c +++ b/firmware/target/arm/as3525/pcm-as3525.c @@ -337,10 +337,32 @@ static inline void mono2stereo(int16_t *end) } #endif /* CONFIG_CPU == AS3525 */ +#if CONFIG_CPU == AS3525v2 +/* scale microphone audio by 2 bits due to 14 bit ADC */ +static inline void scalevolume(int16_t *end, int size) +{ + if(audio_channels != 1) /* only for microphone */ + return; + + /* load pointer in a register and avoid updating it in each loop */ + register int16_t *samples = end; + + do { + *samples++ <<=2; + + } while(samples != end+size); + +} +#endif /* CONFIG_CPU == AS3525v2 */ + static void rec_dma_callback(void) { if(rec_dma_transfer_size) { + +#if CONFIG_CPU == AS3525v2 + scalevolume(AS3525_UNCACHED_ADDR((int16_t*)rec_dma_start_addr), rec_dma_transfer_size); +#endif rec_dma_size -= rec_dma_transfer_size; rec_dma_start_addr += rec_dma_transfer_size; -- cgit v1.2.3