fast dma
[picodrive.git] / Pico / sound / mix.c
1 #define MAXOUT          (+32767)
2 #define MINOUT          (-32768)
3
4 /* limitter */
5 #define Limit(val, max,min) { \
6         if ( val > max )      val = max; \
7         else if ( val < min ) val = min; \
8 }
9
10
11 void mix_32_to_16l_stereo(short *dest, int *src, int count)
12 {
13         int l, r;
14
15         for (; count > 0; count--)
16         {
17                 l = r = *dest;
18                 l += *src++;
19                 r += *src++;
20                 Limit( l, MAXOUT, MINOUT );
21                 Limit( r, MAXOUT, MINOUT );
22                 *dest++ = l;
23                 *dest++ = r;
24         }
25 }
26
27
28 void mix_32_to_16_mono(short *dest, int *src, int count)
29 {
30         int l;
31
32         for (; count > 0; count--)
33         {
34                 l = *dest;
35                 l += *src++;
36                 Limit( l, MAXOUT, MINOUT );
37                 *dest++ = l;
38         }
39 }
40
41
42 /* unimplemented... */
43 void mix_16h_to_32(int *dest_buf, short *mp3_buf, int count)
44 {
45 }
46
47 void mix_16h_to_32_s1(int *dest_buf, short *mp3_buf, int count)
48 {
49 }
50
51 void mix_16h_to_32_s2(int *dest_buf, short *mp3_buf, int count)
52 {
53 }
54