Mercurial > sdl-ios-xcode
annotate src/audio/SDL_mixer.c @ 4170:092c0bc69155 SDL-1.2
Fixed bug #618
Description From Tim Angus 2008-08-30 12:23:56 (-) [reply]
As we all know SDL 1.2 doesn't handle dead keys well since one key press
potentially equals two (or more) characters. For example, on many layouts,
keying <backquote>,<space> results in <no character>,<backquote><space>. Since
the unicode member of the SDL_keysym struct only has room for one character,
only one can be returned.
On Linux, the first character is returned. On Windows however, unless the exact
number of characters generated by the keypress is 1, nothing is returned. The
following patch addresses this inconsistency.
Updated patch which includes a further fix to the handling of the numpad when
numlock is on. This further fix is courtesy Amanieu d'Antras.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Mon, 13 Apr 2009 08:42:09 +0000 |
parents | a1b03ba2fcd0 |
children | a8e5b518e194 |
rev | line source |
---|---|
0 | 1 /* |
2 SDL - Simple DirectMedia Layer | |
4159 | 3 Copyright (C) 1997-2009 Sam Lantinga |
0 | 4 |
5 This library is free software; you can redistribute it and/or | |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
6 modify it under the terms of the GNU Lesser General Public |
0 | 7 License as published by the Free Software Foundation; either |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
8 version 2.1 of the License, or (at your option) any later version. |
0 | 9 |
10 This library is distributed in the hope that it will be useful, | |
11 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
13 Lesser General Public License for more details. |
0 | 14 |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
15 You should have received a copy of the GNU Lesser General Public |
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
16 License along with this library; if not, write to the Free Software |
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
0 | 18 |
19 Sam Lantinga | |
252
e8157fcb3114
Updated the source with the correct e-mail address
Sam Lantinga <slouken@libsdl.org>
parents:
1
diff
changeset
|
20 slouken@libsdl.org |
0 | 21 */ |
1402
d910939febfa
Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
22 #include "SDL_config.h" |
0 | 23 |
24 /* This provides the default mixing callback for the SDL audio routines */ | |
25 | |
1358
c71e05b4dc2e
More header massaging... works great on Windows. ;-)
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
26 #include "SDL_cpuinfo.h" |
0 | 27 #include "SDL_timer.h" |
1358
c71e05b4dc2e
More header massaging... works great on Windows. ;-)
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
28 #include "SDL_audio.h" |
0 | 29 #include "SDL_sysaudio.h" |
539
a9e38f3b8e4d
Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
30 #include "SDL_mixer_MMX.h" |
574
64fe373be3dc
Cth converted the MMX audio mixing routines to VC++ syntax
Sam Lantinga <slouken@libsdl.org>
parents:
539
diff
changeset
|
31 #include "SDL_mixer_MMX_VC.h" |
633
873c2598f969
Add m68k assembly mixing routines
Patrice Mandin <patmandin@gmail.com>
parents:
574
diff
changeset
|
32 #include "SDL_mixer_m68k.h" |
0 | 33 |
34 /* This table is used to add two sound values together and pin | |
35 * the value to avoid overflow. (used with permission from ARDI) | |
36 * Changed to use 0xFE instead of 0xFF for better sound quality. | |
37 */ | |
38 static const Uint8 mix8[] = | |
39 { | |
40 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
41 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
42 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
43 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
44 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
45 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
46 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
47 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
48 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
49 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
50 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
51 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, | |
52 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, | |
53 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, | |
54 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, | |
55 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, | |
56 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, | |
57 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, | |
58 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, | |
59 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, | |
60 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, | |
61 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, | |
62 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, | |
63 0x7D, 0x7E, 0x7F, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, | |
64 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, | |
65 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, | |
66 0x9E, 0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, | |
67 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, | |
68 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, | |
69 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, | |
70 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, | |
71 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, | |
72 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, | |
73 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, | |
74 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFE, 0xFE, | |
75 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, | |
76 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, | |
77 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, | |
78 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, | |
79 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, | |
80 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, | |
81 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, | |
82 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, | |
83 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, | |
84 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, | |
85 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, | |
86 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE | |
87 }; | |
88 | |
89 /* The volume ranges from 0 - 128 */ | |
90 #define ADJUST_VOLUME(s, v) (s = (s*v)/SDL_MIX_MAXVOLUME) | |
91 #define ADJUST_VOLUME_U8(s, v) (s = (((s-128)*v)/SDL_MIX_MAXVOLUME)+128) | |
92 | |
1
cf2af46e9e2a
Changes since SDL 1.2.0 release
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
93 void SDL_MixAudio (Uint8 *dst, const Uint8 *src, Uint32 len, int volume) |
0 | 94 { |
95 Uint16 format; | |
96 | |
97 if ( volume == 0 ) { | |
98 return; | |
99 } | |
100 /* Mix the user-level audio format */ | |
101 if ( current_audio ) { | |
102 if ( current_audio->convert.needed ) { | |
103 format = current_audio->convert.src_format; | |
104 } else { | |
105 format = current_audio->spec.format; | |
106 } | |
107 } else { | |
108 /* HACK HACK HACK */ | |
109 format = AUDIO_S16; | |
110 } | |
111 switch (format) { | |
112 | |
113 case AUDIO_U8: { | |
1402
d910939febfa
Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
114 #if defined(__GNUC__) && defined(__M68000__) && defined(SDL_ASSEMBLY_ROUTINES) |
633
873c2598f969
Add m68k assembly mixing routines
Patrice Mandin <patmandin@gmail.com>
parents:
574
diff
changeset
|
115 SDL_MixAudio_m68k_U8((char*)dst,(char*)src,(unsigned long)len,(long)volume,(char *)mix8); |
873c2598f969
Add m68k assembly mixing routines
Patrice Mandin <patmandin@gmail.com>
parents:
574
diff
changeset
|
116 #else |
0 | 117 Uint8 src_sample; |
118 | |
119 while ( len-- ) { | |
120 src_sample = *src; | |
121 ADJUST_VOLUME_U8(src_sample, volume); | |
122 *dst = mix8[*dst+src_sample]; | |
123 ++dst; | |
124 ++src; | |
125 } | |
633
873c2598f969
Add m68k assembly mixing routines
Patrice Mandin <patmandin@gmail.com>
parents:
574
diff
changeset
|
126 #endif |
0 | 127 } |
128 break; | |
129 | |
130 case AUDIO_S8: { | |
1402
d910939febfa
Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
131 #if defined(__GNUC__) && defined(__i386__) && defined(SDL_ASSEMBLY_ROUTINES) |
739
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
633
diff
changeset
|
132 if (SDL_HasMMX()) |
539
a9e38f3b8e4d
Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
133 { |
a9e38f3b8e4d
Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
134 SDL_MixAudio_MMX_S8((char*)dst,(char*)src,(unsigned int)len,(int)volume); |
a9e38f3b8e4d
Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
135 } |
a9e38f3b8e4d
Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
136 else |
1442
e3242177fe4a
Updated OS/2 build, yay!
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
137 #elif ((defined(_MSC_VER) && defined(_M_IX86)) || defined(__WATCOMC__)) && defined(SDL_ASSEMBLY_ROUTINES) |
746
72ef7ce609ef
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
138 if (SDL_HasMMX()) |
574
64fe373be3dc
Cth converted the MMX audio mixing routines to VC++ syntax
Sam Lantinga <slouken@libsdl.org>
parents:
539
diff
changeset
|
139 { |
64fe373be3dc
Cth converted the MMX audio mixing routines to VC++ syntax
Sam Lantinga <slouken@libsdl.org>
parents:
539
diff
changeset
|
140 SDL_MixAudio_MMX_S8_VC((char*)dst,(char*)src,(unsigned int)len,(int)volume); |
64fe373be3dc
Cth converted the MMX audio mixing routines to VC++ syntax
Sam Lantinga <slouken@libsdl.org>
parents:
539
diff
changeset
|
141 } |
64fe373be3dc
Cth converted the MMX audio mixing routines to VC++ syntax
Sam Lantinga <slouken@libsdl.org>
parents:
539
diff
changeset
|
142 else |
64fe373be3dc
Cth converted the MMX audio mixing routines to VC++ syntax
Sam Lantinga <slouken@libsdl.org>
parents:
539
diff
changeset
|
143 #endif |
1402
d910939febfa
Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
144 #if defined(__GNUC__) && defined(__M68000__) && defined(SDL_ASSEMBLY_ROUTINES) |
633
873c2598f969
Add m68k assembly mixing routines
Patrice Mandin <patmandin@gmail.com>
parents:
574
diff
changeset
|
145 SDL_MixAudio_m68k_S8((char*)dst,(char*)src,(unsigned long)len,(long)volume); |
873c2598f969
Add m68k assembly mixing routines
Patrice Mandin <patmandin@gmail.com>
parents:
574
diff
changeset
|
146 #else |
539
a9e38f3b8e4d
Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
147 { |
0 | 148 Sint8 *dst8, *src8; |
149 Sint8 src_sample; | |
150 int dst_sample; | |
151 const int max_audioval = ((1<<(8-1))-1); | |
152 const int min_audioval = -(1<<(8-1)); | |
153 | |
154 src8 = (Sint8 *)src; | |
155 dst8 = (Sint8 *)dst; | |
156 while ( len-- ) { | |
157 src_sample = *src8; | |
158 ADJUST_VOLUME(src_sample, volume); | |
159 dst_sample = *dst8 + src_sample; | |
160 if ( dst_sample > max_audioval ) { | |
161 *dst8 = max_audioval; | |
162 } else | |
163 if ( dst_sample < min_audioval ) { | |
164 *dst8 = min_audioval; | |
165 } else { | |
166 *dst8 = dst_sample; | |
167 } | |
168 ++dst8; | |
169 ++src8; | |
170 } | |
539
a9e38f3b8e4d
Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
171 } |
633
873c2598f969
Add m68k assembly mixing routines
Patrice Mandin <patmandin@gmail.com>
parents:
574
diff
changeset
|
172 #endif |
0 | 173 } |
174 break; | |
175 | |
176 case AUDIO_S16LSB: { | |
1402
d910939febfa
Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
177 #if defined(__GNUC__) && defined(__i386__) && defined(SDL_ASSEMBLY_ROUTINES) |
739
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
633
diff
changeset
|
178 if (SDL_HasMMX()) |
539
a9e38f3b8e4d
Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
179 { |
a9e38f3b8e4d
Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
180 SDL_MixAudio_MMX_S16((char*)dst,(char*)src,(unsigned int)len,(int)volume); |
a9e38f3b8e4d
Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
181 } |
1442
e3242177fe4a
Updated OS/2 build, yay!
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
182 else |
e3242177fe4a
Updated OS/2 build, yay!
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
183 #elif ((defined(_MSC_VER) && defined(_M_IX86)) || defined(__WATCOMC__)) && defined(SDL_ASSEMBLY_ROUTINES) |
746
72ef7ce609ef
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
184 if (SDL_HasMMX()) |
574
64fe373be3dc
Cth converted the MMX audio mixing routines to VC++ syntax
Sam Lantinga <slouken@libsdl.org>
parents:
539
diff
changeset
|
185 { |
64fe373be3dc
Cth converted the MMX audio mixing routines to VC++ syntax
Sam Lantinga <slouken@libsdl.org>
parents:
539
diff
changeset
|
186 SDL_MixAudio_MMX_S16_VC((char*)dst,(char*)src,(unsigned int)len,(int)volume); |
64fe373be3dc
Cth converted the MMX audio mixing routines to VC++ syntax
Sam Lantinga <slouken@libsdl.org>
parents:
539
diff
changeset
|
187 } |
64fe373be3dc
Cth converted the MMX audio mixing routines to VC++ syntax
Sam Lantinga <slouken@libsdl.org>
parents:
539
diff
changeset
|
188 else |
539
a9e38f3b8e4d
Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
189 #endif |
1402
d910939febfa
Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
190 #if defined(__GNUC__) && defined(__M68000__) && defined(SDL_ASSEMBLY_ROUTINES) |
633
873c2598f969
Add m68k assembly mixing routines
Patrice Mandin <patmandin@gmail.com>
parents:
574
diff
changeset
|
191 SDL_MixAudio_m68k_S16LSB((short*)dst,(short*)src,(unsigned long)len,(long)volume); |
873c2598f969
Add m68k assembly mixing routines
Patrice Mandin <patmandin@gmail.com>
parents:
574
diff
changeset
|
192 #else |
539
a9e38f3b8e4d
Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
193 { |
0 | 194 Sint16 src1, src2; |
195 int dst_sample; | |
196 const int max_audioval = ((1<<(16-1))-1); | |
197 const int min_audioval = -(1<<(16-1)); | |
198 | |
199 len /= 2; | |
200 while ( len-- ) { | |
201 src1 = ((src[1])<<8|src[0]); | |
202 ADJUST_VOLUME(src1, volume); | |
203 src2 = ((dst[1])<<8|dst[0]); | |
204 src += 2; | |
205 dst_sample = src1+src2; | |
206 if ( dst_sample > max_audioval ) { | |
207 dst_sample = max_audioval; | |
208 } else | |
209 if ( dst_sample < min_audioval ) { | |
210 dst_sample = min_audioval; | |
211 } | |
212 dst[0] = dst_sample&0xFF; | |
213 dst_sample >>= 8; | |
214 dst[1] = dst_sample&0xFF; | |
215 dst += 2; | |
216 } | |
539
a9e38f3b8e4d
Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
217 } |
633
873c2598f969
Add m68k assembly mixing routines
Patrice Mandin <patmandin@gmail.com>
parents:
574
diff
changeset
|
218 #endif |
0 | 219 } |
220 break; | |
221 | |
222 case AUDIO_S16MSB: { | |
1402
d910939febfa
Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
223 #if defined(__GNUC__) && defined(__M68000__) && defined(SDL_ASSEMBLY_ROUTINES) |
633
873c2598f969
Add m68k assembly mixing routines
Patrice Mandin <patmandin@gmail.com>
parents:
574
diff
changeset
|
224 SDL_MixAudio_m68k_S16MSB((short*)dst,(short*)src,(unsigned long)len,(long)volume); |
873c2598f969
Add m68k assembly mixing routines
Patrice Mandin <patmandin@gmail.com>
parents:
574
diff
changeset
|
225 #else |
0 | 226 Sint16 src1, src2; |
227 int dst_sample; | |
228 const int max_audioval = ((1<<(16-1))-1); | |
229 const int min_audioval = -(1<<(16-1)); | |
230 | |
231 len /= 2; | |
232 while ( len-- ) { | |
233 src1 = ((src[0])<<8|src[1]); | |
234 ADJUST_VOLUME(src1, volume); | |
235 src2 = ((dst[0])<<8|dst[1]); | |
236 src += 2; | |
237 dst_sample = src1+src2; | |
238 if ( dst_sample > max_audioval ) { | |
239 dst_sample = max_audioval; | |
240 } else | |
241 if ( dst_sample < min_audioval ) { | |
242 dst_sample = min_audioval; | |
243 } | |
244 dst[1] = dst_sample&0xFF; | |
245 dst_sample >>= 8; | |
246 dst[0] = dst_sample&0xFF; | |
247 dst += 2; | |
248 } | |
633
873c2598f969
Add m68k assembly mixing routines
Patrice Mandin <patmandin@gmail.com>
parents:
574
diff
changeset
|
249 #endif |
0 | 250 } |
251 break; | |
252 | |
253 default: /* If this happens... FIXME! */ | |
254 SDL_SetError("SDL_MixAudio(): unknown audio format"); | |
255 return; | |
256 } | |
257 } | |
574
64fe373be3dc
Cth converted the MMX audio mixing routines to VC++ syntax
Sam Lantinga <slouken@libsdl.org>
parents:
539
diff
changeset
|
258 |