Mercurial > sdl-ios-xcode
annotate src/audio/SDL_audio.c @ 4593:3892fe2f6537
Fixed so many things. See the changelog listed below.
1. Use SDL_X11_HAVE_XRENDER to check for RENDER at runtime.
2. Added lots of comments.
3. Added checks and lots of calls to SDL_SetError().
4. Fixed X11_CreateTexture() so that the pixmap and image created
are for the format specified by the user and not the window
format. This is only for the RENDER case.
5. The above change required that functions to convert SDL
pixel format enums to Visuals and XRenderPictFormats be added.
6. Fixed lots of 'style' issues.
author | Sunny Sachanandani <sunnysachanandani@gmail.com> |
---|---|
date | Sat, 17 Jul 2010 15:38:24 +0530 |
parents | 4160ba33b597 |
children | 791b3256fb22 79aa6c61f33b |
rev | line source |
---|---|
0 | 1 /* |
2 SDL - Simple DirectMedia Layer | |
3697 | 3 Copyright (C) 1997-2010 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:
1204
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:
1204
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:
1204
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:
1204
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:
1204
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:
1204
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:
148
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:
1379
diff
changeset
|
22 #include "SDL_config.h" |
0 | 23 |
24 /* Allow access to a raw mixing buffer */ | |
25 | |
26 #include "SDL.h" | |
2984
0b160c970b7e
Fixed some dependency issues with SDL_revision.h
Sam Lantinga <slouken@libsdl.org>
parents:
2979
diff
changeset
|
27 #include "SDL_audio.h" |
0 | 28 #include "SDL_audio_c.h" |
29 #include "SDL_audiomem.h" | |
30 #include "SDL_sysaudio.h" | |
31 | |
2979 | 32 #define _THIS SDL_AudioDevice *this |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
33 |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
34 static SDL_AudioDriver current_audio; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
35 static SDL_AudioDevice *open_devices[16]; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
36 |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
37 /* !!! FIXME: These are wordy and unlocalized... */ |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
38 #define DEFAULT_OUTPUT_DEVNAME "System audio output device" |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
39 #define DEFAULT_INPUT_DEVNAME "System audio capture device" |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
40 |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
41 |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
42 /* |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
43 * Not all of these will be compiled and linked in, but it's convenient |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
44 * to have a complete list here and saves yet-another block of #ifdefs... |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
45 * Please see bootstrap[], below, for the actual #ifdef mess. |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
46 */ |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
47 extern AudioBootStrap BSD_AUDIO_bootstrap; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
48 extern AudioBootStrap DSP_bootstrap; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
49 extern AudioBootStrap DMA_bootstrap; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
50 extern AudioBootStrap ALSA_bootstrap; |
2271
60b4c52a7906
Ported PulseAudio target from 1.2 to 1.3 interfaces, and added it to the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2147
diff
changeset
|
51 extern AudioBootStrap PULSEAUDIO_bootstrap; |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3096
diff
changeset
|
52 extern AudioBootStrap QSAAUDIO_bootstrap; |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
53 extern AudioBootStrap SUNAUDIO_bootstrap; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
54 extern AudioBootStrap DMEDIA_bootstrap; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
55 extern AudioBootStrap ARTS_bootstrap; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
56 extern AudioBootStrap ESD_bootstrap; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
57 extern AudioBootStrap NAS_bootstrap; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
58 extern AudioBootStrap DSOUND_bootstrap; |
2070
dbfa1ebd73b0
Fixed building of Windows waveout audio.
Ryan C. Gordon <icculus@icculus.org>
parents:
2060
diff
changeset
|
59 extern AudioBootStrap WINWAVEOUT_bootstrap; |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
60 extern AudioBootStrap PAUDIO_bootstrap; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
61 extern AudioBootStrap BEOSAUDIO_bootstrap; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
62 extern AudioBootStrap COREAUDIO_bootstrap; |
2765
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2735
diff
changeset
|
63 extern AudioBootStrap COREAUDIOIPHONE_bootstrap; |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
64 extern AudioBootStrap SNDMGR_bootstrap; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
65 extern AudioBootStrap DISKAUD_bootstrap; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
66 extern AudioBootStrap DUMMYAUD_bootstrap; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
67 extern AudioBootStrap DCAUD_bootstrap; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
68 extern AudioBootStrap MMEAUDIO_bootstrap; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
69 extern AudioBootStrap DART_bootstrap; |
2735
204be4fc2726
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2728
diff
changeset
|
70 extern AudioBootStrap NDSAUD_bootstrap; |
2947
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2942
diff
changeset
|
71 extern AudioBootStrap FUSIONSOUND_bootstrap; |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
72 |
1190 | 73 |
0 | 74 /* Available audio drivers */ |
3162 | 75 static const AudioBootStrap *const bootstrap[] = { |
1567
12b6d331d82a
Good idea, renaming OpenBSD audio to BSD audio.
Sam Lantinga <slouken@libsdl.org>
parents:
1562
diff
changeset
|
76 #if SDL_AUDIO_DRIVER_BSD |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
77 &BSD_AUDIO_bootstrap, |
94
ae6e6b73333f
Cleaned up the OpenBSD port, thanks to Peter Valchev
Sam Lantinga <slouken@lokigames.com>
parents:
68
diff
changeset
|
78 #endif |
2939
084e5b4fc5be
Audio driver priority: favor PulseAudio and ALSA over OSS.
Ryan C. Gordon <icculus@icculus.org>
parents:
2938
diff
changeset
|
79 #if SDL_AUDIO_DRIVER_PULSEAUDIO |
084e5b4fc5be
Audio driver priority: favor PulseAudio and ALSA over OSS.
Ryan C. Gordon <icculus@icculus.org>
parents:
2938
diff
changeset
|
80 &PULSEAUDIO_bootstrap, |
0 | 81 #endif |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
82 #if SDL_AUDIO_DRIVER_ALSA |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
83 &ALSA_bootstrap, |
0 | 84 #endif |
2939
084e5b4fc5be
Audio driver priority: favor PulseAudio and ALSA over OSS.
Ryan C. Gordon <icculus@icculus.org>
parents:
2938
diff
changeset
|
85 #if SDL_AUDIO_DRIVER_OSS |
084e5b4fc5be
Audio driver priority: favor PulseAudio and ALSA over OSS.
Ryan C. Gordon <icculus@icculus.org>
parents:
2938
diff
changeset
|
86 &DSP_bootstrap, |
084e5b4fc5be
Audio driver priority: favor PulseAudio and ALSA over OSS.
Ryan C. Gordon <icculus@icculus.org>
parents:
2938
diff
changeset
|
87 &DMA_bootstrap, |
2271
60b4c52a7906
Ported PulseAudio target from 1.2 to 1.3 interfaces, and added it to the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2147
diff
changeset
|
88 #endif |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3096
diff
changeset
|
89 #if SDL_AUDIO_DRIVER_QSA |
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3096
diff
changeset
|
90 &QSAAUDIO_bootstrap, |
663
8bedd6d61642
Date: Sat, 2 Aug 2003 16:22:51 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
654
diff
changeset
|
91 #endif |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
92 #if SDL_AUDIO_DRIVER_SUNAUDIO |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
93 &SUNAUDIO_bootstrap, |
148
8758b8d42cd9
Audio subsystem no longer assumes sun audio API on UNIX systems
Sam Lantinga <slouken@libsdl.org>
parents:
121
diff
changeset
|
94 #endif |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
95 #if SDL_AUDIO_DRIVER_DMEDIA |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
96 &DMEDIA_bootstrap, |
35
d3bc792e136d
Added detection of Open Sound System on Solaris x86
Sam Lantinga <slouken@lokigames.com>
parents:
21
diff
changeset
|
97 #endif |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
98 #if SDL_AUDIO_DRIVER_ARTS |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
99 &ARTS_bootstrap, |
0 | 100 #endif |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
101 #if SDL_AUDIO_DRIVER_ESD |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
102 &ESD_bootstrap, |
0 | 103 #endif |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
104 #if SDL_AUDIO_DRIVER_NAS |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
105 &NAS_bootstrap, |
0 | 106 #endif |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
107 #if SDL_AUDIO_DRIVER_DSOUND |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
108 &DSOUND_bootstrap, |
0 | 109 #endif |
2070
dbfa1ebd73b0
Fixed building of Windows waveout audio.
Ryan C. Gordon <icculus@icculus.org>
parents:
2060
diff
changeset
|
110 #if SDL_AUDIO_DRIVER_WINWAVEOUT |
dbfa1ebd73b0
Fixed building of Windows waveout audio.
Ryan C. Gordon <icculus@icculus.org>
parents:
2060
diff
changeset
|
111 &WINWAVEOUT_bootstrap, |
0 | 112 #endif |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
113 #if SDL_AUDIO_DRIVER_PAUDIO |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
114 &PAUDIO_bootstrap, |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
115 #endif |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
116 #if SDL_AUDIO_DRIVER_BEOSAUDIO |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
117 &BEOSAUDIO_bootstrap, |
0 | 118 #endif |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
119 #if SDL_AUDIO_DRIVER_COREAUDIO |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
120 &COREAUDIO_bootstrap, |
935
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
808
diff
changeset
|
121 #endif |
2765
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2735
diff
changeset
|
122 #if SDL_AUDIO_DRIVER_COREAUDIOIPHONE |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2735
diff
changeset
|
123 &COREAUDIOIPHONE_bootstrap, |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2735
diff
changeset
|
124 #endif |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
125 #if SDL_AUDIO_DRIVER_DISK |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
126 &DISKAUD_bootstrap, |
68
ac6645260d31
Added an audio driver that writes to disk (thanks Ryan!)
Sam Lantinga <slouken@lokigames.com>
parents:
38
diff
changeset
|
127 #endif |
1532
30f189cdd82b
Implemented dummy audio driver.
Ryan C. Gordon <icculus@icculus.org>
parents:
1487
diff
changeset
|
128 #if SDL_AUDIO_DRIVER_DUMMY |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
129 &DUMMYAUD_bootstrap, |
1532
30f189cdd82b
Implemented dummy audio driver.
Ryan C. Gordon <icculus@icculus.org>
parents:
1487
diff
changeset
|
130 #endif |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
131 #if SDL_AUDIO_DRIVER_MMEAUDIO |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
132 &MMEAUDIO_bootstrap, |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
133 #endif |
2735
204be4fc2726
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2728
diff
changeset
|
134 #if SDL_AUDIO_DRIVER_NDS |
204be4fc2726
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2728
diff
changeset
|
135 &NDSAUD_bootstrap, |
204be4fc2726
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2728
diff
changeset
|
136 #endif |
2947
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2942
diff
changeset
|
137 #if SDL_AUDIO_DRIVER_FUSIONSOUND |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2942
diff
changeset
|
138 &FUSIONSOUND_bootstrap, |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2942
diff
changeset
|
139 #endif |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
140 NULL |
0 | 141 }; |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
142 |
2060 | 143 static SDL_AudioDevice * |
144 get_audio_device(SDL_AudioDeviceID id) | |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
145 { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
146 id--; |
2060 | 147 if ((id >= SDL_arraysize(open_devices)) || (open_devices[id] == NULL)) { |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
148 SDL_SetError("Invalid audio device ID"); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
149 return NULL; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
150 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
151 |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
152 return open_devices[id]; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
153 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
154 |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
155 |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
156 /* stubs for audio drivers that don't need a specific entry point... */ |
2060 | 157 static int |
158 SDL_AudioDetectDevices_Default(int iscapture) | |
159 { | |
160 return -1; | |
161 } | |
2735
204be4fc2726
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2728
diff
changeset
|
162 |
2060 | 163 static void |
164 SDL_AudioThreadInit_Default(_THIS) | |
165 { /* no-op. */ | |
166 } | |
2735
204be4fc2726
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2728
diff
changeset
|
167 |
2060 | 168 static void |
169 SDL_AudioWaitDevice_Default(_THIS) | |
170 { /* no-op. */ | |
171 } | |
2735
204be4fc2726
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2728
diff
changeset
|
172 |
2060 | 173 static void |
174 SDL_AudioPlayDevice_Default(_THIS) | |
175 { /* no-op. */ | |
176 } | |
2735
204be4fc2726
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2728
diff
changeset
|
177 |
2060 | 178 static Uint8 * |
179 SDL_AudioGetDeviceBuf_Default(_THIS) | |
180 { | |
181 return NULL; | |
182 } | |
2735
204be4fc2726
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2728
diff
changeset
|
183 |
2060 | 184 static void |
185 SDL_AudioWaitDone_Default(_THIS) | |
186 { /* no-op. */ | |
187 } | |
2735
204be4fc2726
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2728
diff
changeset
|
188 |
2060 | 189 static void |
190 SDL_AudioCloseDevice_Default(_THIS) | |
191 { /* no-op. */ | |
192 } | |
2735
204be4fc2726
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2728
diff
changeset
|
193 |
2060 | 194 static void |
195 SDL_AudioDeinitialize_Default(void) | |
196 { /* no-op. */ | |
197 } | |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
198 |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
199 static int |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
200 SDL_AudioOpenDevice_Default(_THIS, const char *devname, int iscapture) |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
201 { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
202 return 0; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
203 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
204 |
2060 | 205 static const char * |
206 SDL_AudioGetDeviceName_Default(int index, int iscapture) | |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
207 { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
208 SDL_SetError("No such device"); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
209 return NULL; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
210 } |
0 | 211 |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
212 static void |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
213 SDL_AudioLockDevice_Default(SDL_AudioDevice * device) |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
214 { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
215 if (device->thread && (SDL_ThreadID() == device->threadid)) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
216 return; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
217 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
218 SDL_mutexP(device->mixer_lock); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
219 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
220 |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
221 static void |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
222 SDL_AudioUnlockDevice_Default(SDL_AudioDevice * device) |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
223 { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
224 if (device->thread && (SDL_ThreadID() == device->threadid)) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
225 return; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
226 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
227 SDL_mutexV(device->mixer_lock); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
228 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
229 |
0 | 230 |
2060 | 231 static void |
232 finalize_audio_entry_points(void) | |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
233 { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
234 /* |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
235 * Fill in stub functions for unused driver entry points. This lets us |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
236 * blindly call them without having to check for validity first. |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
237 */ |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
238 |
2060 | 239 #define FILL_STUB(x) \ |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
240 if (current_audio.impl.x == NULL) { \ |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
241 current_audio.impl.x = SDL_Audio##x##_Default; \ |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
242 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
243 FILL_STUB(DetectDevices); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
244 FILL_STUB(GetDeviceName); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
245 FILL_STUB(OpenDevice); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
246 FILL_STUB(ThreadInit); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
247 FILL_STUB(WaitDevice); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
248 FILL_STUB(PlayDevice); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
249 FILL_STUB(GetDeviceBuf); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
250 FILL_STUB(WaitDone); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
251 FILL_STUB(CloseDevice); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
252 FILL_STUB(LockDevice); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
253 FILL_STUB(UnlockDevice); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
254 FILL_STUB(Deinitialize); |
2060 | 255 #undef FILL_STUB |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
256 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
257 |
2716
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
258 /* Streaming functions (for when the input and output buffer sizes are different) */ |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
259 /* Write [length] bytes from buf into the streamer */ |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
260 void |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
261 SDL_StreamWrite(SDL_AudioStreamer * stream, Uint8 * buf, int length) |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
262 { |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
263 int i; |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
264 |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
265 for (i = 0; i < length; ++i) { |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
266 stream->buffer[stream->write_pos] = buf[i]; |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
267 ++stream->write_pos; |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
268 } |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
269 } |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
270 |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
271 /* Read [length] bytes out of the streamer into buf */ |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
272 void |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
273 SDL_StreamRead(SDL_AudioStreamer * stream, Uint8 * buf, int length) |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
274 { |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
275 int i; |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
276 |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
277 for (i = 0; i < length; ++i) { |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
278 buf[i] = stream->buffer[stream->read_pos]; |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
279 ++stream->read_pos; |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
280 } |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
281 } |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
282 |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
283 int |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
284 SDL_StreamLength(SDL_AudioStreamer * stream) |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
285 { |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
286 return (stream->write_pos - stream->read_pos) % stream->max_len; |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
287 } |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
288 |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
289 /* Initialize the stream by allocating the buffer and setting the read/write heads to the beginning */ |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
290 int |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
291 SDL_StreamInit(SDL_AudioStreamer * stream, int max_len, Uint8 silence) |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
292 { |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
293 /* First try to allocate the buffer */ |
2728
2768bd7281e0
Fixed Visual Studio compilation problems
Sam Lantinga <slouken@libsdl.org>
parents:
2716
diff
changeset
|
294 stream->buffer = (Uint8 *) SDL_malloc(max_len); |
2716
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
295 if (stream->buffer == NULL) { |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
296 return -1; |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
297 } |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
298 |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
299 stream->max_len = max_len; |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
300 stream->read_pos = 0; |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
301 stream->write_pos = 0; |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
302 |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
303 /* Zero out the buffer */ |
2728
2768bd7281e0
Fixed Visual Studio compilation problems
Sam Lantinga <slouken@libsdl.org>
parents:
2716
diff
changeset
|
304 SDL_memset(stream->buffer, silence, max_len); |
2768bd7281e0
Fixed Visual Studio compilation problems
Sam Lantinga <slouken@libsdl.org>
parents:
2716
diff
changeset
|
305 |
2768bd7281e0
Fixed Visual Studio compilation problems
Sam Lantinga <slouken@libsdl.org>
parents:
2716
diff
changeset
|
306 return 0; |
2716
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
307 } |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
308 |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
309 /* Deinitialize the stream simply by freeing the buffer */ |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
310 void |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
311 SDL_StreamDeinit(SDL_AudioStreamer * stream) |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
312 { |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
313 if (stream->buffer != NULL) { |
2728
2768bd7281e0
Fixed Visual Studio compilation problems
Sam Lantinga <slouken@libsdl.org>
parents:
2716
diff
changeset
|
314 SDL_free(stream->buffer); |
2716
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
315 } |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
316 } |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
317 |
0 | 318 |
319 /* The general mixing thread function */ | |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
320 int SDLCALL |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
321 SDL_RunAudio(void *devicep) |
0 | 322 { |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
323 SDL_AudioDevice *device = (SDL_AudioDevice *) devicep; |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
324 Uint8 *stream; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
325 int stream_len; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
326 void *udata; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
327 void (SDLCALL * fill) (void *userdata, Uint8 * stream, int len); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
328 int silence; |
3336
00fab0ebfe54
Fixed a bug where when the audio starts paused all the DirectSound buffers
Sam Lantinga <slouken@libsdl.org>
parents:
3283
diff
changeset
|
329 Uint32 delay; |
2716
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
330 |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
331 /* For streaming when the buffer sizes don't match up */ |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
332 Uint8 *istream; |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
333 int istream_len; |
0 | 334 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
335 /* Perform any thread setup */ |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
336 device->threadid = SDL_ThreadID(); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
337 current_audio.impl.ThreadInit(device); |
0 | 338 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
339 /* Set up the mixing function */ |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
340 fill = device->spec.callback; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
341 udata = device->spec.userdata; |
21
75a95f82bc1f
Updated the Amiga OS port of SDL (thanks Gabriele)
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
342 |
2716
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
343 /* By default do not stream */ |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
344 device->use_streamer = 0; |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
345 |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
346 if (device->convert.needed) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
347 if (device->convert.src_format == AUDIO_U8) { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
348 silence = 0x80; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
349 } else { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
350 silence = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
351 } |
2716
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
352 |
3040 | 353 #if 0 /* !!! FIXME: I took len_div out of the structure. Use rate_incr instead? */ |
2716
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
354 /* If the result of the conversion alters the length, i.e. resampling is being used, use the streamer */ |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
355 if (device->convert.len_mult != 1 || device->convert.len_div != 1) { |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
356 /* The streamer's maximum length should be twice whichever is larger: spec.size or len_cvt */ |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
357 stream_max_len = 2 * device->spec.size; |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
358 if (device->convert.len_mult > device->convert.len_div) { |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
359 stream_max_len *= device->convert.len_mult; |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
360 stream_max_len /= device->convert.len_div; |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
361 } |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
362 if (SDL_StreamInit(&device->streamer, stream_max_len, silence) < |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
363 0) |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
364 return -1; |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
365 device->use_streamer = 1; |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
366 |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
367 /* istream_len should be the length of what we grab from the callback and feed to conversion, |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
368 so that we get close to spec_size. I.e. we want device.spec_size = istream_len * u / d |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
369 */ |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
370 istream_len = |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
371 device->spec.size * device->convert.len_div / |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
372 device->convert.len_mult; |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
373 } |
3021
f3dcf04412cf
First shot at new audio resampling code.
Ryan C. Gordon <icculus@icculus.org>
parents:
2984
diff
changeset
|
374 #endif |
2716
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
375 |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
376 /* stream_len = device->convert.len; */ |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
377 stream_len = device->spec.size; |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
378 } else { |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
379 silence = device->spec.silence; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
380 stream_len = device->spec.size; |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
381 } |
1561
c724c4a99759
Try to fill the hardware audio buffer immediately.
Ryan C. Gordon <icculus@icculus.org>
parents:
1532
diff
changeset
|
382 |
3336
00fab0ebfe54
Fixed a bug where when the audio starts paused all the DirectSound buffers
Sam Lantinga <slouken@libsdl.org>
parents:
3283
diff
changeset
|
383 /* Calculate the delay while paused */ |
00fab0ebfe54
Fixed a bug where when the audio starts paused all the DirectSound buffers
Sam Lantinga <slouken@libsdl.org>
parents:
3283
diff
changeset
|
384 delay = ((device->spec.samples * 1000) / device->spec.freq); |
00fab0ebfe54
Fixed a bug where when the audio starts paused all the DirectSound buffers
Sam Lantinga <slouken@libsdl.org>
parents:
3283
diff
changeset
|
385 |
2716
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
386 /* Determine if the streamer is necessary here */ |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
387 if (device->use_streamer == 1) { |
3336
00fab0ebfe54
Fixed a bug where when the audio starts paused all the DirectSound buffers
Sam Lantinga <slouken@libsdl.org>
parents:
3283
diff
changeset
|
388 /* This code is almost the same as the old code. The difference is, instead of reading |
2716
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
389 directly from the callback into "stream", then converting and sending the audio off, |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
390 we go: callback -> "istream" -> (conversion) -> streamer -> stream -> device. |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
391 However, reading and writing with streamer are done separately: |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
392 - We only call the callback and write to the streamer when the streamer does not |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
393 contain enough samples to output to the device. |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
394 - We only read from the streamer and tell the device to play when the streamer |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
395 does have enough samples to output. |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
396 This allows us to perform resampling in the conversion step, where the output of the |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
397 resampling process can be any number. We will have to see what a good size for the |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
398 stream's maximum length is, but I suspect 2*max(len_cvt, stream_len) is a good figure. |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
399 */ |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
400 while (device->enabled) { |
3336
00fab0ebfe54
Fixed a bug where when the audio starts paused all the DirectSound buffers
Sam Lantinga <slouken@libsdl.org>
parents:
3283
diff
changeset
|
401 |
00fab0ebfe54
Fixed a bug where when the audio starts paused all the DirectSound buffers
Sam Lantinga <slouken@libsdl.org>
parents:
3283
diff
changeset
|
402 if (device->paused) { |
00fab0ebfe54
Fixed a bug where when the audio starts paused all the DirectSound buffers
Sam Lantinga <slouken@libsdl.org>
parents:
3283
diff
changeset
|
403 SDL_Delay(delay); |
00fab0ebfe54
Fixed a bug where when the audio starts paused all the DirectSound buffers
Sam Lantinga <slouken@libsdl.org>
parents:
3283
diff
changeset
|
404 continue; |
00fab0ebfe54
Fixed a bug where when the audio starts paused all the DirectSound buffers
Sam Lantinga <slouken@libsdl.org>
parents:
3283
diff
changeset
|
405 } |
00fab0ebfe54
Fixed a bug where when the audio starts paused all the DirectSound buffers
Sam Lantinga <slouken@libsdl.org>
parents:
3283
diff
changeset
|
406 |
2716
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
407 /* Only read in audio if the streamer doesn't have enough already (if it does not have enough samples to output) */ |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
408 if (SDL_StreamLength(&device->streamer) < stream_len) { |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
409 /* Set up istream */ |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
410 if (device->convert.needed) { |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
411 if (device->convert.buf) { |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
412 istream = device->convert.buf; |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
413 } else { |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
414 continue; |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
415 } |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
416 } else { |
3336
00fab0ebfe54
Fixed a bug where when the audio starts paused all the DirectSound buffers
Sam Lantinga <slouken@libsdl.org>
parents:
3283
diff
changeset
|
417 /* FIXME: Ryan, this is probably wrong. I imagine we don't want to get |
00fab0ebfe54
Fixed a bug where when the audio starts paused all the DirectSound buffers
Sam Lantinga <slouken@libsdl.org>
parents:
3283
diff
changeset
|
418 * a device buffer both here and below in the stream output. |
00fab0ebfe54
Fixed a bug where when the audio starts paused all the DirectSound buffers
Sam Lantinga <slouken@libsdl.org>
parents:
3283
diff
changeset
|
419 */ |
2716
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
420 istream = current_audio.impl.GetDeviceBuf(device); |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
421 if (istream == NULL) { |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
422 istream = device->fake_stream; |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
423 } |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
424 } |
0 | 425 |
2716
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
426 /* Read from the callback into the _input_ stream */ |
3336
00fab0ebfe54
Fixed a bug where when the audio starts paused all the DirectSound buffers
Sam Lantinga <slouken@libsdl.org>
parents:
3283
diff
changeset
|
427 SDL_mutexP(device->mixer_lock); |
00fab0ebfe54
Fixed a bug where when the audio starts paused all the DirectSound buffers
Sam Lantinga <slouken@libsdl.org>
parents:
3283
diff
changeset
|
428 (*fill) (udata, istream, istream_len); |
00fab0ebfe54
Fixed a bug where when the audio starts paused all the DirectSound buffers
Sam Lantinga <slouken@libsdl.org>
parents:
3283
diff
changeset
|
429 SDL_mutexV(device->mixer_lock); |
2716
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
430 |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
431 /* Convert the audio if necessary and write to the streamer */ |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
432 if (device->convert.needed) { |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
433 SDL_ConvertAudio(&device->convert); |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
434 if (istream == NULL) { |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
435 istream = device->fake_stream; |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
436 } |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
437 /*SDL_memcpy(istream, device->convert.buf, device->convert.len_cvt); */ |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
438 SDL_StreamWrite(&device->streamer, device->convert.buf, |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
439 device->convert.len_cvt); |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
440 } else { |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
441 SDL_StreamWrite(&device->streamer, istream, istream_len); |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
442 } |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
443 } |
2716
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
444 |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
445 /* Only output audio if the streamer has enough to output */ |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
446 if (SDL_StreamLength(&device->streamer) >= stream_len) { |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
447 /* Set up the output stream */ |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
448 if (device->convert.needed) { |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
449 if (device->convert.buf) { |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
450 stream = device->convert.buf; |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
451 } else { |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
452 continue; |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
453 } |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
454 } else { |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
455 stream = current_audio.impl.GetDeviceBuf(device); |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
456 if (stream == NULL) { |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
457 stream = device->fake_stream; |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
458 } |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
459 } |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
460 |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
461 /* Now read from the streamer */ |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
462 SDL_StreamRead(&device->streamer, stream, stream_len); |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
463 |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
464 /* Ready current buffer for play and change current buffer */ |
3336
00fab0ebfe54
Fixed a bug where when the audio starts paused all the DirectSound buffers
Sam Lantinga <slouken@libsdl.org>
parents:
3283
diff
changeset
|
465 if (stream != device->fake_stream) { |
2716
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
466 current_audio.impl.PlayDevice(device); |
3096
ae4e80dbe330
Date: Tue, 17 Feb 2009 14:00:25 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
3040
diff
changeset
|
467 /* Wait for an audio buffer to become available */ |
ae4e80dbe330
Date: Tue, 17 Feb 2009 14:00:25 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
3040
diff
changeset
|
468 current_audio.impl.WaitDevice(device); |
2716
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
469 } else { |
3336
00fab0ebfe54
Fixed a bug where when the audio starts paused all the DirectSound buffers
Sam Lantinga <slouken@libsdl.org>
parents:
3283
diff
changeset
|
470 SDL_Delay(delay); |
2716
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
471 } |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
472 } |
0 | 473 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
474 } |
2716
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
475 } else { |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
476 /* Otherwise, do not use the streamer. This is the old code. */ |
0 | 477 |
2716
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
478 /* Loop, filling the audio buffers */ |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
479 while (device->enabled) { |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
480 |
3336
00fab0ebfe54
Fixed a bug where when the audio starts paused all the DirectSound buffers
Sam Lantinga <slouken@libsdl.org>
parents:
3283
diff
changeset
|
481 if (device->paused) { |
00fab0ebfe54
Fixed a bug where when the audio starts paused all the DirectSound buffers
Sam Lantinga <slouken@libsdl.org>
parents:
3283
diff
changeset
|
482 SDL_Delay(delay); |
00fab0ebfe54
Fixed a bug where when the audio starts paused all the DirectSound buffers
Sam Lantinga <slouken@libsdl.org>
parents:
3283
diff
changeset
|
483 continue; |
00fab0ebfe54
Fixed a bug where when the audio starts paused all the DirectSound buffers
Sam Lantinga <slouken@libsdl.org>
parents:
3283
diff
changeset
|
484 } |
00fab0ebfe54
Fixed a bug where when the audio starts paused all the DirectSound buffers
Sam Lantinga <slouken@libsdl.org>
parents:
3283
diff
changeset
|
485 |
2716
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
486 /* Fill the current buffer with sound */ |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
487 if (device->convert.needed) { |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
488 if (device->convert.buf) { |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
489 stream = device->convert.buf; |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
490 } else { |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
491 continue; |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
492 } |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
493 } else { |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
494 stream = current_audio.impl.GetDeviceBuf(device); |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
495 if (stream == NULL) { |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
496 stream = device->fake_stream; |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
497 } |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
498 } |
0 | 499 |
3336
00fab0ebfe54
Fixed a bug where when the audio starts paused all the DirectSound buffers
Sam Lantinga <slouken@libsdl.org>
parents:
3283
diff
changeset
|
500 SDL_mutexP(device->mixer_lock); |
00fab0ebfe54
Fixed a bug where when the audio starts paused all the DirectSound buffers
Sam Lantinga <slouken@libsdl.org>
parents:
3283
diff
changeset
|
501 (*fill) (udata, stream, stream_len); |
00fab0ebfe54
Fixed a bug where when the audio starts paused all the DirectSound buffers
Sam Lantinga <slouken@libsdl.org>
parents:
3283
diff
changeset
|
502 SDL_mutexV(device->mixer_lock); |
1562 | 503 |
2716
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
504 /* Convert the audio if necessary */ |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
505 if (device->convert.needed) { |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
506 SDL_ConvertAudio(&device->convert); |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
507 stream = current_audio.impl.GetDeviceBuf(device); |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
508 if (stream == NULL) { |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
509 stream = device->fake_stream; |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
510 } |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
511 SDL_memcpy(stream, device->convert.buf, |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
512 device->convert.len_cvt); |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
513 } |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
514 |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
515 /* Ready current buffer for play and change current buffer */ |
3336
00fab0ebfe54
Fixed a bug where when the audio starts paused all the DirectSound buffers
Sam Lantinga <slouken@libsdl.org>
parents:
3283
diff
changeset
|
516 if (stream != device->fake_stream) { |
2716
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
517 current_audio.impl.PlayDevice(device); |
3096
ae4e80dbe330
Date: Tue, 17 Feb 2009 14:00:25 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
3040
diff
changeset
|
518 /* Wait for an audio buffer to become available */ |
ae4e80dbe330
Date: Tue, 17 Feb 2009 14:00:25 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
3040
diff
changeset
|
519 current_audio.impl.WaitDevice(device); |
2716
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
520 } else { |
3336
00fab0ebfe54
Fixed a bug where when the audio starts paused all the DirectSound buffers
Sam Lantinga <slouken@libsdl.org>
parents:
3283
diff
changeset
|
521 SDL_Delay(delay); |
2716
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
522 } |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
523 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
524 } |
1562 | 525 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
526 /* Wait for the audio to drain.. */ |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
527 current_audio.impl.WaitDone(device); |
21
75a95f82bc1f
Updated the Amiga OS port of SDL (thanks Gabriele)
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
528 |
2716
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
529 /* If necessary, deinit the streamer */ |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
530 if (device->use_streamer == 1) |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
531 SDL_StreamDeinit(&device->streamer); |
f8f68f47285a
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2274
diff
changeset
|
532 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
533 return (0); |
0 | 534 } |
535 | |
322
fd93a09655e3
The audio lock and unlock functions are now a part of the driver.
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
536 |
1982
3b4ce57c6215
First shot at new audio data types (int32 and float32).
Ryan C. Gordon <icculus@icculus.org>
parents:
1978
diff
changeset
|
537 static SDL_AudioFormat |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
538 SDL_ParseAudioFormat(const char *string) |
1794 | 539 { |
2076
939420dee849
Use SDL_strcmp(), not strcmp().
Ryan C. Gordon <icculus@icculus.org>
parents:
2070
diff
changeset
|
540 #define CHECK_FMT_STRING(x) if (SDL_strcmp(string, #x) == 0) return AUDIO_##x |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
541 CHECK_FMT_STRING(U8); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
542 CHECK_FMT_STRING(S8); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
543 CHECK_FMT_STRING(U16LSB); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
544 CHECK_FMT_STRING(S16LSB); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
545 CHECK_FMT_STRING(U16MSB); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
546 CHECK_FMT_STRING(S16MSB); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
547 CHECK_FMT_STRING(U16SYS); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
548 CHECK_FMT_STRING(S16SYS); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
549 CHECK_FMT_STRING(U16); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
550 CHECK_FMT_STRING(S16); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
551 CHECK_FMT_STRING(S32LSB); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
552 CHECK_FMT_STRING(S32MSB); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
553 CHECK_FMT_STRING(S32SYS); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
554 CHECK_FMT_STRING(S32); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
555 CHECK_FMT_STRING(F32LSB); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
556 CHECK_FMT_STRING(F32MSB); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
557 CHECK_FMT_STRING(F32SYS); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
558 CHECK_FMT_STRING(F32); |
2060 | 559 #undef CHECK_FMT_STRING |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
560 return 0; |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
561 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
562 |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
563 int |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
564 SDL_GetNumAudioDrivers(void) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
565 { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
566 return (SDL_arraysize(bootstrap) - 1); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
567 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
568 |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
569 const char * |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
570 SDL_GetAudioDriver(int index) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
571 { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
572 if (index >= 0 && index < SDL_GetNumAudioDrivers()) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
573 return (bootstrap[index]->name); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
574 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
575 return (NULL); |
1794 | 576 } |
577 | |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
578 int |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
579 SDL_AudioInit(const char *driver_name) |
0 | 580 { |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
581 int i = 0; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
582 int initialized = 0; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
583 int tried_to_init = 0; |
0 | 584 |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
585 if (SDL_WasInit(SDL_INIT_AUDIO)) { |
2060 | 586 SDL_AudioQuit(); /* shutdown driver if already running. */ |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
587 } |
0 | 588 |
2060 | 589 SDL_memset(¤t_audio, '\0', sizeof(current_audio)); |
590 SDL_memset(open_devices, '\0', sizeof(open_devices)); | |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
591 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
592 /* Select the proper audio driver */ |
1909
8f1ab2f7c722
Look at environment variables in SDL_VideoInit() and SDL_AudioInit()
Sam Lantinga <slouken@libsdl.org>
parents:
1903
diff
changeset
|
593 if (driver_name == NULL) { |
8f1ab2f7c722
Look at environment variables in SDL_VideoInit() and SDL_AudioInit()
Sam Lantinga <slouken@libsdl.org>
parents:
1903
diff
changeset
|
594 driver_name = SDL_getenv("SDL_AUDIODRIVER"); |
8f1ab2f7c722
Look at environment variables in SDL_VideoInit() and SDL_AudioInit()
Sam Lantinga <slouken@libsdl.org>
parents:
1903
diff
changeset
|
595 } |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
596 |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
597 for (i = 0; (!initialized) && (bootstrap[i]); ++i) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
598 /* make sure we should even try this driver before doing so... */ |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
599 const AudioBootStrap *backend = bootstrap[i]; |
2060 | 600 if (((driver_name) && (SDL_strcasecmp(backend->name, driver_name))) || |
601 ((!driver_name) && (backend->demand_only))) { | |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
602 continue; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
603 } |
0 | 604 |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
605 tried_to_init = 1; |
2060 | 606 SDL_memset(¤t_audio, 0, sizeof(current_audio)); |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
607 current_audio.name = backend->name; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
608 current_audio.desc = backend->desc; |
3699
4160ba33b597
Removed test for "driver is valid, but doesn't see any audio devices."
Ryan C. Gordon <icculus@icculus.org>
parents:
3697
diff
changeset
|
609 initialized = backend->init(¤t_audio.impl); |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
610 } |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
611 |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
612 if (!initialized) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
613 /* specific drivers will set the error message if they fail... */ |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
614 if (!tried_to_init) { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
615 if (driver_name) { |
3699
4160ba33b597
Removed test for "driver is valid, but doesn't see any audio devices."
Ryan C. Gordon <icculus@icculus.org>
parents:
3697
diff
changeset
|
616 SDL_SetError("Audio target '%s' not available", driver_name); |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
617 } else { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
618 SDL_SetError("No available audio device"); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
619 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
620 } |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
621 |
2060 | 622 SDL_memset(¤t_audio, 0, sizeof(current_audio)); |
623 return (-1); /* No driver was available, so fail. */ | |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
624 } |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
625 |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
626 finalize_audio_entry_points(); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
627 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
628 return (0); |
0 | 629 } |
630 | |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
631 /* |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
632 * Get the current audio driver name |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
633 */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
634 const char * |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
635 SDL_GetCurrentAudioDriver() |
0 | 636 { |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
637 return current_audio.name; |
0 | 638 } |
639 | |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
640 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
641 int |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
642 SDL_GetNumAudioDevices(int iscapture) |
0 | 643 { |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
644 if (!SDL_WasInit(SDL_INIT_AUDIO)) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
645 return -1; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
646 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
647 if ((iscapture) && (!current_audio.impl.HasCaptureSupport)) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
648 return 0; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
649 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
650 |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
651 if ((iscapture) && (current_audio.impl.OnlyHasDefaultInputDevice)) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
652 return 1; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
653 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
654 |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
655 if ((!iscapture) && (current_audio.impl.OnlyHasDefaultOutputDevice)) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
656 return 1; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
657 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
658 |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
659 return current_audio.impl.DetectDevices(iscapture); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
660 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
661 |
0 | 662 |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
663 const char * |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
664 SDL_GetAudioDeviceName(int index, int iscapture) |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
665 { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
666 if (!SDL_WasInit(SDL_INIT_AUDIO)) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
667 SDL_SetError("Audio subsystem is not initialized"); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
668 return NULL; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
669 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
670 |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
671 if ((iscapture) && (!current_audio.impl.HasCaptureSupport)) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
672 SDL_SetError("No capture support"); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
673 return NULL; |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
674 } |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
675 |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
676 if (index < 0) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
677 SDL_SetError("No such device"); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
678 return NULL; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
679 } |
0 | 680 |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
681 if ((iscapture) && (current_audio.impl.OnlyHasDefaultInputDevice)) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
682 return DEFAULT_INPUT_DEVNAME; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
683 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
684 |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
685 if ((!iscapture) && (current_audio.impl.OnlyHasDefaultOutputDevice)) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
686 return DEFAULT_OUTPUT_DEVNAME; |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
687 } |
262
ba5363e21df8
Don't allow multiple audio opens to succeed (until SDL 1.3)
Sam Lantinga <slouken@libsdl.org>
parents:
252
diff
changeset
|
688 |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
689 return current_audio.impl.GetDeviceName(index, iscapture); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
690 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
691 |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
692 |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
693 static void |
2060 | 694 close_audio_device(SDL_AudioDevice * device) |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
695 { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
696 device->enabled = 0; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
697 if (device->thread != NULL) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
698 SDL_WaitThread(device->thread, NULL); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
699 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
700 if (device->mixer_lock != NULL) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
701 SDL_DestroyMutex(device->mixer_lock); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
702 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
703 if (device->fake_stream != NULL) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
704 SDL_FreeAudioMem(device->fake_stream); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
705 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
706 if (device->convert.needed) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
707 SDL_FreeAudioMem(device->convert.buf); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
708 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
709 if (device->opened) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
710 current_audio.impl.CloseDevice(device); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
711 device->opened = 0; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
712 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
713 SDL_FreeAudioMem(device); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
714 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
715 |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
716 |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
717 /* |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
718 * Sanity check desired AudioSpec for SDL_OpenAudio() in (orig). |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
719 * Fills in a sanitized copy in (prepared). |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
720 * Returns non-zero if okay, zero on fatal parameters in (orig). |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
721 */ |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
722 static int |
2060 | 723 prepare_audiospec(const SDL_AudioSpec * orig, SDL_AudioSpec * prepared) |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
724 { |
2060 | 725 SDL_memcpy(prepared, orig, sizeof(SDL_AudioSpec)); |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
726 |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
727 if (orig->callback == NULL) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
728 SDL_SetError("SDL_OpenAudio() passed a NULL callback"); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
729 return 0; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
730 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
731 |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
732 if (orig->freq == 0) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
733 const char *env = SDL_getenv("SDL_AUDIO_FREQUENCY"); |
2060 | 734 if ((!env) || ((prepared->freq = SDL_atoi(env)) == 0)) { |
735 prepared->freq = 22050; /* a reasonable default */ | |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
736 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
737 } |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
738 |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
739 if (orig->format == 0) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
740 const char *env = SDL_getenv("SDL_AUDIO_FORMAT"); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
741 if ((!env) || ((prepared->format = SDL_ParseAudioFormat(env)) == 0)) { |
2060 | 742 prepared->format = AUDIO_S16; /* a reasonable default */ |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
743 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
744 } |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
745 |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
746 switch (orig->channels) { |
2060 | 747 case 0:{ |
748 const char *env = SDL_getenv("SDL_AUDIO_CHANNELS"); | |
2141 | 749 if ((!env) || ((prepared->channels = (Uint8) SDL_atoi(env)) == 0)) { |
2060 | 750 prepared->channels = 2; /* a reasonable default */ |
751 } | |
752 break; | |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
753 } |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
754 case 1: /* Mono */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
755 case 2: /* Stereo */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
756 case 4: /* surround */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
757 case 6: /* surround with center and lfe */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
758 break; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
759 default: |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
760 SDL_SetError("Unsupported number of audio channels."); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
761 return 0; |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
762 } |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
763 |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
764 if (orig->samples == 0) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
765 const char *env = SDL_getenv("SDL_AUDIO_SAMPLES"); |
2060 | 766 if ((!env) || ((prepared->samples = (Uint16) SDL_atoi(env)) == 0)) { |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
767 /* Pick a default of ~46 ms at desired frequency */ |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
768 /* !!! FIXME: remove this when the non-Po2 resampling is in. */ |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
769 const int samples = (prepared->freq / 1000) * 46; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
770 int power2 = 1; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
771 while (power2 < samples) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
772 power2 *= 2; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
773 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
774 prepared->samples = power2; |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
775 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
776 } |
0 | 777 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
778 /* Calculate the silence and size of the audio specification */ |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
779 SDL_CalculateAudioSpec(prepared); |
21
75a95f82bc1f
Updated the Amiga OS port of SDL (thanks Gabriele)
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
780 |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
781 return 1; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
782 } |
1408
ceb5c2fec4f1
Fixed some preprocessor mangling
Sam Lantinga <slouken@libsdl.org>
parents:
1406
diff
changeset
|
783 |
21
75a95f82bc1f
Updated the Amiga OS port of SDL (thanks Gabriele)
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
784 |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
785 static SDL_AudioDeviceID |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
786 open_audio_device(const char *devname, int iscapture, |
2866
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
787 const SDL_AudioSpec * desired, SDL_AudioSpec * obtained, |
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
788 int allowed_changes, int min_id) |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
789 { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
790 SDL_AudioDeviceID id = 0; |
2866
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
791 SDL_AudioSpec _obtained; |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
792 SDL_AudioDevice *device; |
2866
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
793 SDL_bool build_cvt; |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
794 int i = 0; |
21
75a95f82bc1f
Updated the Amiga OS port of SDL (thanks Gabriele)
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
795 |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
796 if (!SDL_WasInit(SDL_INIT_AUDIO)) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
797 SDL_SetError("Audio subsystem is not initialized"); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
798 return 0; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
799 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
800 |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
801 if ((iscapture) && (!current_audio.impl.HasCaptureSupport)) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
802 SDL_SetError("No capture support"); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
803 return 0; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
804 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
805 |
2866
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
806 if (!obtained) { |
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
807 obtained = &_obtained; |
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
808 } |
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
809 if (!prepare_audiospec(desired, obtained)) { |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
810 return 0; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
811 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
812 |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
813 /* If app doesn't care about a specific device, let the user override. */ |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
814 if (devname == NULL) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
815 devname = SDL_getenv("SDL_AUDIO_DEVICE_NAME"); |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
816 } |
21
75a95f82bc1f
Updated the Amiga OS port of SDL (thanks Gabriele)
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
817 |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
818 /* |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
819 * Catch device names at the high level for the simple case... |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
820 * This lets us have a basic "device enumeration" for systems that |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
821 * don't have multiple devices, but makes sure the device name is |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
822 * always NULL when it hits the low level. |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
823 * |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
824 * Also make sure that the simple case prevents multiple simultaneous |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
825 * opens of the default system device. |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
826 */ |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
827 |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
828 if ((iscapture) && (current_audio.impl.OnlyHasDefaultInputDevice)) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
829 if ((devname) && (SDL_strcmp(devname, DEFAULT_INPUT_DEVNAME) != 0)) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
830 SDL_SetError("No such device"); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
831 return 0; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
832 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
833 devname = NULL; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
834 |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
835 for (i = 0; i < SDL_arraysize(open_devices); i++) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
836 if ((open_devices[i]) && (open_devices[i]->iscapture)) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
837 SDL_SetError("Audio device already open"); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
838 return 0; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
839 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
840 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
841 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
842 |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
843 if ((!iscapture) && (current_audio.impl.OnlyHasDefaultOutputDevice)) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
844 if ((devname) && (SDL_strcmp(devname, DEFAULT_OUTPUT_DEVNAME) != 0)) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
845 SDL_SetError("No such device"); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
846 return 0; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
847 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
848 devname = NULL; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
849 |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
850 for (i = 0; i < SDL_arraysize(open_devices); i++) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
851 if ((open_devices[i]) && (!open_devices[i]->iscapture)) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
852 SDL_SetError("Audio device already open"); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
853 return 0; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
854 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
855 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
856 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
857 |
2060 | 858 device = (SDL_AudioDevice *) SDL_AllocAudioMem(sizeof(SDL_AudioDevice)); |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
859 if (device == NULL) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
860 SDL_OutOfMemory(); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
861 return 0; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
862 } |
2060 | 863 SDL_memset(device, '\0', sizeof(SDL_AudioDevice)); |
2866
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
864 device->spec = *obtained; |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
865 device->enabled = 1; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
866 device->paused = 1; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
867 device->iscapture = iscapture; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
868 |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
869 /* Create a semaphore for locking the sound buffers */ |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
870 if (!current_audio.impl.SkipMixerLock) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
871 device->mixer_lock = SDL_CreateMutex(); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
872 if (device->mixer_lock == NULL) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
873 close_audio_device(device); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
874 SDL_SetError("Couldn't create mixer lock"); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
875 return 0; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
876 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
877 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
878 |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
879 if (!current_audio.impl.OpenDevice(device, devname, iscapture)) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
880 close_audio_device(device); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
881 return 0; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
882 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
883 device->opened = 1; |
0 | 884 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
885 /* Allocate a fake audio memory buffer */ |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
886 device->fake_stream = SDL_AllocAudioMem(device->spec.size); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
887 if (device->fake_stream == NULL) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
888 close_audio_device(device); |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
889 SDL_OutOfMemory(); |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
890 return 0; |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
891 } |
0 | 892 |
2866
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
893 /* If the audio driver changes the buffer size, accept it */ |
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
894 if (device->spec.samples != obtained->samples) { |
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
895 obtained->samples = device->spec.samples; |
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
896 SDL_CalculateAudioSpec(obtained); |
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
897 } |
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
898 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
899 /* See if we need to do any conversion */ |
2866
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
900 build_cvt = SDL_FALSE; |
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
901 if (obtained->freq != device->spec.freq) { |
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
902 if (allowed_changes & SDL_AUDIO_ALLOW_FREQUENCY_CHANGE) { |
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
903 obtained->freq = device->spec.freq; |
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
904 } else { |
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
905 build_cvt = SDL_TRUE; |
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
906 } |
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
907 } |
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
908 if (obtained->format != device->spec.format) { |
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
909 if (allowed_changes & SDL_AUDIO_ALLOW_FORMAT_CHANGE) { |
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
910 obtained->format = device->spec.format; |
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
911 } else { |
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
912 build_cvt = SDL_TRUE; |
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
913 } |
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
914 } |
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
915 if (obtained->channels != device->spec.channels) { |
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
916 if (allowed_changes & SDL_AUDIO_ALLOW_CHANNELS_CHANGE) { |
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
917 obtained->channels = device->spec.channels; |
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
918 } else { |
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
919 build_cvt = SDL_TRUE; |
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
920 } |
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
921 } |
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
922 if (build_cvt) { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
923 /* Build an audio conversion block */ |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
924 if (SDL_BuildAudioCVT(&device->convert, |
2866
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
925 obtained->format, obtained->channels, |
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
926 obtained->freq, |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
927 device->spec.format, device->spec.channels, |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
928 device->spec.freq) < 0) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
929 close_audio_device(device); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
930 return 0; |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
931 } |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
932 if (device->convert.needed) { |
2866
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
933 device->convert.len = (int) (((double) obtained->size) / |
2060 | 934 device->convert.len_ratio); |
2053
716cf90f24a0
1.3 branch version of revision 2878.
Ryan C. Gordon <icculus@icculus.org>
parents:
2049
diff
changeset
|
935 |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
936 device->convert.buf = |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
937 (Uint8 *) SDL_AllocAudioMem(device->convert.len * |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
938 device->convert.len_mult); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
939 if (device->convert.buf == NULL) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
940 close_audio_device(device); |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
941 SDL_OutOfMemory(); |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
942 return 0; |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
943 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
944 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
945 } |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
946 |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
947 /* Find an available device ID and store the structure... */ |
2060 | 948 for (id = min_id - 1; id < SDL_arraysize(open_devices); id++) { |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
949 if (open_devices[id] == NULL) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
950 open_devices[id] = device; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
951 break; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
952 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
953 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
954 |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
955 if (id == SDL_arraysize(open_devices)) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
956 SDL_SetError("Too many open audio devices"); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
957 close_audio_device(device); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
958 return 0; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
959 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
960 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
961 /* Start the audio thread if necessary */ |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
962 if (!current_audio.impl.ProvidesOwnCallbackThread) { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
963 /* Start the audio thread */ |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
964 /* !!! FIXME: this is nasty. */ |
1402
d910939febfa
Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents:
1379
diff
changeset
|
965 #if (defined(__WIN32__) && !defined(_WIN32_WCE)) && !defined(HAVE_LIBC) |
1330
450721ad5436
It's now possible to build SDL without any C runtime at all on Windows,
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
966 #undef SDL_CreateThread |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
967 device->thread = SDL_CreateThread(SDL_RunAudio, device, NULL, NULL); |
1330
450721ad5436
It's now possible to build SDL without any C runtime at all on Windows,
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
968 #else |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
969 device->thread = SDL_CreateThread(SDL_RunAudio, device); |
1330
450721ad5436
It's now possible to build SDL without any C runtime at all on Windows,
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
970 #endif |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
971 if (device->thread == NULL) { |
2060 | 972 SDL_CloseAudioDevice(id + 1); |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
973 SDL_SetError("Couldn't create audio thread"); |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
974 return 0; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
975 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
976 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
977 |
2060 | 978 return id + 1; |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
979 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
980 |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
981 |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
982 int |
2866
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
983 SDL_OpenAudio(SDL_AudioSpec * desired, SDL_AudioSpec * obtained) |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
984 { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
985 SDL_AudioDeviceID id = 0; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
986 |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
987 /* Start up the audio driver, if necessary. This is legacy behaviour! */ |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
988 if (!SDL_WasInit(SDL_INIT_AUDIO)) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
989 if (SDL_InitSubSystem(SDL_INIT_AUDIO) < 0) { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
990 return (-1); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
991 } |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
992 } |
0 | 993 |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
994 /* SDL_OpenAudio() is legacy and can only act on Device ID #1. */ |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
995 if (open_devices[0] != NULL) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
996 SDL_SetError("Audio device is already opened"); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
997 return (-1); |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
998 } |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
999 |
2866
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
1000 if (obtained) { |
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
1001 id = open_audio_device(NULL, 0, desired, obtained, |
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
1002 SDL_AUDIO_ALLOW_ANY_CHANGE, 1); |
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
1003 } else { |
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
1004 id = open_audio_device(NULL, 0, desired, desired, 0, 1); |
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
1005 } |
2060 | 1006 if (id > 1) { /* this should never happen in theory... */ |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1007 SDL_CloseAudioDevice(id); |
2060 | 1008 SDL_SetError("Internal error"); /* MUST be Device ID #1! */ |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1009 return (-1); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1010 } |
21
75a95f82bc1f
Updated the Amiga OS port of SDL (thanks Gabriele)
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
1011 |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1012 return ((id == 0) ? -1 : 0); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1013 } |
21
75a95f82bc1f
Updated the Amiga OS port of SDL (thanks Gabriele)
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
1014 |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1015 SDL_AudioDeviceID |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1016 SDL_OpenAudioDevice(const char *device, int iscapture, |
2866
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
1017 const SDL_AudioSpec * desired, SDL_AudioSpec * obtained, |
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
1018 int allowed_changes) |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1019 { |
2866
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
1020 return open_audio_device(device, iscapture, desired, obtained, |
e532417a6977
Fixed SDL 1.2 compatibility problem.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
1021 allowed_changes, 2); |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1022 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1023 |
3537
e897a4a9f578
Switch to mixed case for consistency with other enumerations
Sam Lantinga <slouken@libsdl.org>
parents:
3336
diff
changeset
|
1024 SDL_AudioStatus |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1025 SDL_GetAudioDeviceStatus(SDL_AudioDeviceID devid) |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1026 { |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1027 SDL_AudioDevice *device = get_audio_device(devid); |
3537
e897a4a9f578
Switch to mixed case for consistency with other enumerations
Sam Lantinga <slouken@libsdl.org>
parents:
3336
diff
changeset
|
1028 SDL_AudioStatus status = SDL_AUDIO_STOPPED; |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1029 if (device && device->enabled) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1030 if (device->paused) { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1031 status = SDL_AUDIO_PAUSED; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1032 } else { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1033 status = SDL_AUDIO_PLAYING; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1034 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1035 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1036 return (status); |
0 | 1037 } |
1038 | |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1039 |
3537
e897a4a9f578
Switch to mixed case for consistency with other enumerations
Sam Lantinga <slouken@libsdl.org>
parents:
3336
diff
changeset
|
1040 SDL_AudioStatus |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1041 SDL_GetAudioStatus(void) |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1042 { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1043 return SDL_GetAudioDeviceStatus(1); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1044 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1045 |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1046 void |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1047 SDL_PauseAudioDevice(SDL_AudioDeviceID devid, int pause_on) |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1048 { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1049 SDL_AudioDevice *device = get_audio_device(devid); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1050 if (device) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1051 device->paused = pause_on; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1052 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1053 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1054 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1055 void |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1056 SDL_PauseAudio(int pause_on) |
0 | 1057 { |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1058 SDL_PauseAudioDevice(1, pause_on); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1059 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1060 |
0 | 1061 |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1062 void |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1063 SDL_LockAudioDevice(SDL_AudioDeviceID devid) |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1064 { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1065 /* Obtain a lock on the mixing buffers */ |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1066 SDL_AudioDevice *device = get_audio_device(devid); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1067 if (device) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1068 current_audio.impl.LockDevice(device); |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1069 } |
0 | 1070 } |
1071 | |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1072 void |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1073 SDL_LockAudio(void) |
0 | 1074 { |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1075 SDL_LockAudioDevice(1); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1076 } |
0 | 1077 |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1078 void |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1079 SDL_UnlockAudioDevice(SDL_AudioDeviceID devid) |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1080 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1081 /* Obtain a lock on the mixing buffers */ |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1082 SDL_AudioDevice *device = get_audio_device(devid); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1083 if (device) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1084 current_audio.impl.UnlockDevice(device); |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1085 } |
0 | 1086 } |
1087 | |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1088 void |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1089 SDL_UnlockAudio(void) |
0 | 1090 { |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1091 SDL_UnlockAudioDevice(1); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1092 } |
0 | 1093 |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1094 void |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1095 SDL_CloseAudioDevice(SDL_AudioDeviceID devid) |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1096 { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1097 SDL_AudioDevice *device = get_audio_device(devid); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1098 if (device) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1099 close_audio_device(device); |
2060 | 1100 open_devices[devid - 1] = NULL; |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1101 } |
0 | 1102 } |
1103 | |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1104 void |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1105 SDL_CloseAudio(void) |
0 | 1106 { |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1107 SDL_CloseAudioDevice(1); |
0 | 1108 } |
1109 | |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1110 void |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1111 SDL_AudioQuit(void) |
0 | 1112 { |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1113 SDL_AudioDeviceID i; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1114 for (i = 0; i < SDL_arraysize(open_devices); i++) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1115 SDL_CloseAudioDevice(i); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1116 } |
0 | 1117 |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1118 /* Free the driver data */ |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1119 current_audio.impl.Deinitialize(); |
2060 | 1120 SDL_memset(¤t_audio, '\0', sizeof(current_audio)); |
1121 SDL_memset(open_devices, '\0', sizeof(open_devices)); | |
0 | 1122 } |
1123 | |
1982
3b4ce57c6215
First shot at new audio data types (int32 and float32).
Ryan C. Gordon <icculus@icculus.org>
parents:
1978
diff
changeset
|
1124 #define NUM_FORMATS 10 |
0 | 1125 static int format_idx; |
1126 static int format_idx_sub; | |
1982
3b4ce57c6215
First shot at new audio data types (int32 and float32).
Ryan C. Gordon <icculus@icculus.org>
parents:
1978
diff
changeset
|
1127 static SDL_AudioFormat format_list[NUM_FORMATS][NUM_FORMATS] = { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1128 {AUDIO_U8, AUDIO_S8, AUDIO_S16LSB, AUDIO_S16MSB, AUDIO_U16LSB, |
1982
3b4ce57c6215
First shot at new audio data types (int32 and float32).
Ryan C. Gordon <icculus@icculus.org>
parents:
1978
diff
changeset
|
1129 AUDIO_U16MSB, AUDIO_S32LSB, AUDIO_S32MSB, AUDIO_F32LSB, AUDIO_F32MSB}, |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1130 {AUDIO_S8, AUDIO_U8, AUDIO_S16LSB, AUDIO_S16MSB, AUDIO_U16LSB, |
1982
3b4ce57c6215
First shot at new audio data types (int32 and float32).
Ryan C. Gordon <icculus@icculus.org>
parents:
1978
diff
changeset
|
1131 AUDIO_U16MSB, AUDIO_S32LSB, AUDIO_S32MSB, AUDIO_F32LSB, AUDIO_F32MSB}, |
3b4ce57c6215
First shot at new audio data types (int32 and float32).
Ryan C. Gordon <icculus@icculus.org>
parents:
1978
diff
changeset
|
1132 {AUDIO_S16LSB, AUDIO_S16MSB, AUDIO_U16LSB, AUDIO_U16MSB, AUDIO_S32LSB, |
3b4ce57c6215
First shot at new audio data types (int32 and float32).
Ryan C. Gordon <icculus@icculus.org>
parents:
1978
diff
changeset
|
1133 AUDIO_S32MSB, AUDIO_F32LSB, AUDIO_F32MSB, AUDIO_U8, AUDIO_S8}, |
3b4ce57c6215
First shot at new audio data types (int32 and float32).
Ryan C. Gordon <icculus@icculus.org>
parents:
1978
diff
changeset
|
1134 {AUDIO_S16MSB, AUDIO_S16LSB, AUDIO_U16MSB, AUDIO_U16LSB, AUDIO_S32MSB, |
3b4ce57c6215
First shot at new audio data types (int32 and float32).
Ryan C. Gordon <icculus@icculus.org>
parents:
1978
diff
changeset
|
1135 AUDIO_S32LSB, AUDIO_F32MSB, AUDIO_F32LSB, AUDIO_U8, AUDIO_S8}, |
3b4ce57c6215
First shot at new audio data types (int32 and float32).
Ryan C. Gordon <icculus@icculus.org>
parents:
1978
diff
changeset
|
1136 {AUDIO_U16LSB, AUDIO_U16MSB, AUDIO_S16LSB, AUDIO_S16MSB, AUDIO_S32LSB, |
3b4ce57c6215
First shot at new audio data types (int32 and float32).
Ryan C. Gordon <icculus@icculus.org>
parents:
1978
diff
changeset
|
1137 AUDIO_S32MSB, AUDIO_F32LSB, AUDIO_F32MSB, AUDIO_U8, AUDIO_S8}, |
3b4ce57c6215
First shot at new audio data types (int32 and float32).
Ryan C. Gordon <icculus@icculus.org>
parents:
1978
diff
changeset
|
1138 {AUDIO_U16MSB, AUDIO_U16LSB, AUDIO_S16MSB, AUDIO_S16LSB, AUDIO_S32MSB, |
3b4ce57c6215
First shot at new audio data types (int32 and float32).
Ryan C. Gordon <icculus@icculus.org>
parents:
1978
diff
changeset
|
1139 AUDIO_S32LSB, AUDIO_F32MSB, AUDIO_F32LSB, AUDIO_U8, AUDIO_S8}, |
1993
7a3889fc9e5d
Reordered the favored audio format list a little.
Ryan C. Gordon <icculus@icculus.org>
parents:
1982
diff
changeset
|
1140 {AUDIO_S32LSB, AUDIO_S32MSB, AUDIO_F32LSB, AUDIO_F32MSB, AUDIO_S16LSB, |
7a3889fc9e5d
Reordered the favored audio format list a little.
Ryan C. Gordon <icculus@icculus.org>
parents:
1982
diff
changeset
|
1141 AUDIO_S16MSB, AUDIO_U16LSB, AUDIO_U16MSB, AUDIO_U8, AUDIO_S8}, |
7a3889fc9e5d
Reordered the favored audio format list a little.
Ryan C. Gordon <icculus@icculus.org>
parents:
1982
diff
changeset
|
1142 {AUDIO_S32MSB, AUDIO_S32LSB, AUDIO_F32MSB, AUDIO_F32LSB, AUDIO_S16MSB, |
7a3889fc9e5d
Reordered the favored audio format list a little.
Ryan C. Gordon <icculus@icculus.org>
parents:
1982
diff
changeset
|
1143 AUDIO_S16LSB, AUDIO_U16MSB, AUDIO_U16LSB, AUDIO_U8, AUDIO_S8}, |
7a3889fc9e5d
Reordered the favored audio format list a little.
Ryan C. Gordon <icculus@icculus.org>
parents:
1982
diff
changeset
|
1144 {AUDIO_F32LSB, AUDIO_F32MSB, AUDIO_S32LSB, AUDIO_S32MSB, AUDIO_S16LSB, |
7a3889fc9e5d
Reordered the favored audio format list a little.
Ryan C. Gordon <icculus@icculus.org>
parents:
1982
diff
changeset
|
1145 AUDIO_S16MSB, AUDIO_U16LSB, AUDIO_U16MSB, AUDIO_U8, AUDIO_S8}, |
7a3889fc9e5d
Reordered the favored audio format list a little.
Ryan C. Gordon <icculus@icculus.org>
parents:
1982
diff
changeset
|
1146 {AUDIO_F32MSB, AUDIO_F32LSB, AUDIO_S32MSB, AUDIO_S32LSB, AUDIO_S16MSB, |
7a3889fc9e5d
Reordered the favored audio format list a little.
Ryan C. Gordon <icculus@icculus.org>
parents:
1982
diff
changeset
|
1147 AUDIO_S16LSB, AUDIO_U16MSB, AUDIO_U16LSB, AUDIO_U8, AUDIO_S8}, |
0 | 1148 }; |
1149 | |
1982
3b4ce57c6215
First shot at new audio data types (int32 and float32).
Ryan C. Gordon <icculus@icculus.org>
parents:
1978
diff
changeset
|
1150 SDL_AudioFormat |
3b4ce57c6215
First shot at new audio data types (int32 and float32).
Ryan C. Gordon <icculus@icculus.org>
parents:
1978
diff
changeset
|
1151 SDL_FirstAudioFormat(SDL_AudioFormat format) |
0 | 1152 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1153 for (format_idx = 0; format_idx < NUM_FORMATS; ++format_idx) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1154 if (format_list[format_idx][0] == format) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1155 break; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1156 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1157 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1158 format_idx_sub = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1159 return (SDL_NextAudioFormat()); |
0 | 1160 } |
1161 | |
1982
3b4ce57c6215
First shot at new audio data types (int32 and float32).
Ryan C. Gordon <icculus@icculus.org>
parents:
1978
diff
changeset
|
1162 SDL_AudioFormat |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1163 SDL_NextAudioFormat(void) |
0 | 1164 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1165 if ((format_idx == NUM_FORMATS) || (format_idx_sub == NUM_FORMATS)) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1166 return (0); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1167 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1168 return (format_list[format_idx][format_idx_sub++]); |
0 | 1169 } |
1170 | |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1171 void |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1172 SDL_CalculateAudioSpec(SDL_AudioSpec * spec) |
0 | 1173 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1174 switch (spec->format) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1175 case AUDIO_U8: |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1176 spec->silence = 0x80; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1177 break; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1178 default: |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1179 spec->silence = 0x00; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1180 break; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1181 } |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1182 spec->size = SDL_AUDIO_BITSIZE(spec->format) / 8; |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1183 spec->size *= spec->channels; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1184 spec->size *= spec->samples; |
0 | 1185 } |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1186 |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1187 |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1188 /* |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1189 * Moved here from SDL_mixer.c, since it relies on internals of an opened |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1190 * audio device (and is deprecated, by the way!). |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1191 */ |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1192 void |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1193 SDL_MixAudio(Uint8 * dst, const Uint8 * src, Uint32 len, int volume) |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1194 { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1195 /* Mix the user-level audio format */ |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1196 SDL_AudioDevice *device = get_audio_device(1); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1197 if (device != NULL) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1198 SDL_AudioFormat format; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1199 if (device->convert.needed) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1200 format = device->convert.src_format; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1201 } else { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1202 format = device->spec.format; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1203 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1204 SDL_MixAudioFormat(dst, src, format, len, volume); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1205 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1206 } |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2045
diff
changeset
|
1207 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1794
diff
changeset
|
1208 /* vi: set ts=4 sw=4 expandtab: */ |