Mercurial > sdl-ios-xcode
annotate src/audio/SDL_mixer.c @ 4167:a6f635e5eaa6 SDL-1.2
Fixed bug #611
From Tim Angus 2008-08-12 11:18:06
I'm one of the maintainers of ioquake3.org, an updated version of the
Quake 3 engine. Relatively recently, we moved ioq3 to use SDL as a
replacement for 95% of the platform specific code that was there. On the
whole it's doing a great job but unfortunately since the move we've been
getting complaints about the quality of the mouse input on the Windows
platform to the point where for many the game is unplayable. Put in
other terms, the current stable SDL 1.2 is basically not fit for purpose
if you need high quality mouse input as you do in a first person shooter.
Over the weekend I decided to pull my finger out and actually figure out
what's going on. There are basically two major problems. Firstly, when
using the "windib" driver, mouse input is gathered via the WM_MOUSEMOVE
message. Googling for this indicates that often this is known to result
in "spurious" and/or "missing" mouse movement events; this is the
primary cause of the poor mouse input. The second problem is that the
"directx" driver does not work at all in combination with OpenGL meaning
that you can't use DirectInput if your application also uses OpenGL. In
other words you're locked into using the "windib" driver and its poor
mouse input.
In order to address these problems I've done the following:
* Remove WM_MOUSEMOVE based motion event generation and replace with
calls to GetCursorPos which seems much more reliable. In order to
achieve this I've moved mouse motion out into a separate function that
is called once per DIB_PumpEvents.
* Remove the restriction on the "directx" driver being inoperable in
combination with OpenGL. There is a bug for this issues that I've
hijacked to a certain extent
(http://bugzilla.libsdl.org/show_bug.cgi?id=265). I'm the first to admit
I don't really understand why this restriction is there in the first
place. The commit message for the bug fix that introduced this
restriction (r581) isn't very elaborate and I couldn't see any other bug
tracking the issue. If anyone has more information on the bug that was
avoided by r581 it would be helpful as I/someone could then look into
addressing the problem without disabling the "directx" driver.
* I've also removed the restriction on not being allowed to use
DirectInput in windowed mode. I couldn't see any reason for this, at
least not from our perspective. I have my suspicions that it'll be
something like matching up the cursor with the mouse coordinates...
* I bumped up the DirectInput API used to version 7 in order to get
access to mouse buttons 4-7. I've had to inject a little bit of the DX7
headers into SDL there as the MinGW ones aren't up to date in this respect.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Thu, 02 Apr 2009 04:43:36 +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 |