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.tar.gz
rockbox-62d666df6f0e35b0619a7c0c04ec61609709e41a.zip
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 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)
337} 337}
338#endif /* CONFIG_CPU == AS3525 */ 338#endif /* CONFIG_CPU == AS3525 */
339 339
340#if CONFIG_CPU == AS3525v2
341/* scale microphone audio by 2 bits due to 14 bit ADC */
342static inline void scalevolume(int16_t *end, int size)
343{
344 if(audio_channels != 1) /* only for microphone */
345 return;
346
347 /* load pointer in a register and avoid updating it in each loop */
348 register int16_t *samples = end;
349
350 do {
351 *samples++ <<=2;
352
353 } while(samples != end+size);
354
355}
356#endif /* CONFIG_CPU == AS3525v2 */
357
340static void rec_dma_callback(void) 358static void rec_dma_callback(void)
341{ 359{
342 if(rec_dma_transfer_size) 360 if(rec_dma_transfer_size)
343 { 361 {
362
363#if CONFIG_CPU == AS3525v2
364 scalevolume(AS3525_UNCACHED_ADDR((int16_t*)rec_dma_start_addr), rec_dma_transfer_size);
365#endif
344 rec_dma_size -= rec_dma_transfer_size; 366 rec_dma_size -= rec_dma_transfer_size;
345 rec_dma_start_addr += rec_dma_transfer_size; 367 rec_dma_start_addr += rec_dma_transfer_size;
346 368