summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Giacomelli <giac2000@hotmail.com>2011-07-25 01:00:15 +0000
committerMichael Giacomelli <giac2000@hotmail.com>2011-07-25 01:00:15 +0000
commit62d666df6f0e35b0619a7c0c04ec61609709e41a (patch)
treece422d069cf6dfcd71d6f9199c4f2d872827432f
parentc27ea297a35b555b93a5e2be66297c1ba6cdbed4 (diff)
downloadrockbox-62d666df6f0e35b0619a7c0c04ec61609709e41a.zip
rockbox-62d666df6f0e35b0619a7c0c04ec61609709e41a.tar.gz
rockbox-62d666df6f0e35b0619a7c0c04ec61609709e41a.tar.bz2
rockbox-62d666df6f0e35b0619a7c0c04ec61609709e41a.tar.xz
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
-rw-r--r--firmware/target/arm/as3525/pcm-as3525.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/firmware/target/arm/as3525/pcm-as3525.c b/firmware/target/arm/as3525/pcm-as3525.c
index 1b22d48..a89a47d 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;