Mercurial > sdl-ios-xcode
annotate src/audio/alsa/SDL_alsa_audio.c @ 3845:ee5dfa7f7993 SDL-ryan-multiple-audio-device
ALSA's availability test was wrong in multi-device land. If the ALSA libraries
are available, we should use them and report zero available devices instead.
author | Ryan C. Gordon <icculus@icculus.org> |
---|---|
date | Tue, 17 Oct 2006 08:04:51 +0000 |
parents | 25052dd25810 |
children | 66fb40445587 |
rev | line source |
---|---|
0 | 1 /* |
2 SDL - Simple DirectMedia Layer | |
769
b8d311d90021
Updated copyright information for 2004 (Happy New Year!)
Sam Lantinga <slouken@libsdl.org>
parents:
765
diff
changeset
|
3 Copyright (C) 1997-2004 Sam Lantinga |
0 | 4 |
5 This library is free software; you can redistribute it and/or | |
6 modify it under the terms of the GNU Library General Public | |
7 License as published by the Free Software Foundation; either | |
8 version 2 of the License, or (at your option) any later version. | |
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 | |
13 Library General Public License for more details. | |
14 | |
15 You should have received a copy of the GNU Library General Public | |
16 License along with this library; if not, write to the Free | |
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
18 | |
19 Sam Lantinga | |
252
e8157fcb3114
Updated the source with the correct e-mail address
Sam Lantinga <slouken@libsdl.org>
parents:
0
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 <sys/types.h> | |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
27 #include <signal.h> /* For kill() */ |
3818
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
28 #include <dlfcn.h> |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
29 #include <errno.h> |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
30 #include <string.h> |
0 | 31 |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
32 #include "SDL_timer.h" |
0 | 33 #include "SDL_audio.h" |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
34 #include "../SDL_audiomem.h" |
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
35 #include "../SDL_audio_c.h" |
0 | 36 #include "SDL_alsa_audio.h" |
37 | |
865
92615154bb68
Date: Sun, 29 Feb 2004 15:14:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
38 |
0 | 39 /* The tag name used by ALSA audio */ |
40 #define DRIVER_NAME "alsa" | |
41 | |
354
30935e76acb5
Updated ALSA audio support for ALSA 0.9
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
42 /* The default ALSA audio driver */ |
765
4c2ba6161939
Editors Note: The original patch was modified to use SDL_Delay() instead of
Sam Lantinga <slouken@libsdl.org>
parents:
547
diff
changeset
|
43 #define DEFAULT_DEVICE "default" |
0 | 44 |
3818
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
45 static int (*ALSA_snd_pcm_open) |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
46 (snd_pcm_t **, const char *, snd_pcm_stream_t, int); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
47 static int (*ALSA_snd_pcm_close)(snd_pcm_t * pcm); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
48 static snd_pcm_sframes_t(*ALSA_snd_pcm_writei) |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
49 (snd_pcm_t *,const void *, snd_pcm_uframes_t); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
50 static int (*ALSA_snd_pcm_resume)(snd_pcm_t *); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
51 static int (*ALSA_snd_pcm_prepare)(snd_pcm_t *); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
52 static int (*ALSA_snd_pcm_drain)(snd_pcm_t *); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
53 static const char *(*ALSA_snd_strerror)(int); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
54 static size_t(*ALSA_snd_pcm_hw_params_sizeof)(void); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
55 static size_t(*ALSA_snd_pcm_sw_params_sizeof)(void); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
56 static int (*ALSA_snd_pcm_hw_params_any)(snd_pcm_t *, snd_pcm_hw_params_t *); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
57 static int (*ALSA_snd_pcm_hw_params_set_access) |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
58 (snd_pcm_t *, snd_pcm_hw_params_t *, snd_pcm_access_t); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
59 static int (*ALSA_snd_pcm_hw_params_set_format) |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
60 (snd_pcm_t *, snd_pcm_hw_params_t *, snd_pcm_format_t); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
61 static int (*ALSA_snd_pcm_hw_params_set_channels) |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
62 (snd_pcm_t *, snd_pcm_hw_params_t *, unsigned int); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
63 static int (*ALSA_snd_pcm_hw_params_get_channels)(const snd_pcm_hw_params_t *); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
64 static unsigned int (*ALSA_snd_pcm_hw_params_set_rate_near) |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
65 (snd_pcm_t *, snd_pcm_hw_params_t *, unsigned int, int *); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
66 static snd_pcm_uframes_t (*ALSA_snd_pcm_hw_params_set_period_size_near) |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
67 (snd_pcm_t *, snd_pcm_hw_params_t *, snd_pcm_uframes_t, int *); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
68 static snd_pcm_sframes_t (*ALSA_snd_pcm_hw_params_get_period_size) |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
69 (const snd_pcm_hw_params_t *); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
70 static unsigned int (*ALSA_snd_pcm_hw_params_set_periods_near) |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
71 (snd_pcm_t *,snd_pcm_hw_params_t *, unsigned int, int *); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
72 static int (*ALSA_snd_pcm_hw_params_get_periods)(snd_pcm_hw_params_t *); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
73 static int (*ALSA_snd_pcm_hw_params)(snd_pcm_t *, snd_pcm_hw_params_t *); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
74 static int (*ALSA_snd_pcm_sw_params_current)(snd_pcm_t*, snd_pcm_sw_params_t*); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
75 static int (*ALSA_snd_pcm_sw_params_set_start_threshold) |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
76 (snd_pcm_t *, snd_pcm_sw_params_t *, snd_pcm_uframes_t); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
77 static int (*ALSA_snd_pcm_sw_params_set_avail_min) |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
78 (snd_pcm_t *, snd_pcm_sw_params_t *, snd_pcm_uframes_t); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
79 static int (*ALSA_snd_pcm_sw_params)(snd_pcm_t *, snd_pcm_sw_params_t *); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
80 static int (*ALSA_snd_pcm_nonblock)(snd_pcm_t *, int); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
81 #define snd_pcm_hw_params_sizeof ALSA_snd_pcm_hw_params_sizeof |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
82 #define snd_pcm_sw_params_sizeof ALSA_snd_pcm_sw_params_sizeof |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
83 |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
84 |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
85 #ifdef SDL_AUDIO_DRIVER_ALSA_DYNAMIC |
865
92615154bb68
Date: Sun, 29 Feb 2004 15:14:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
86 |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
87 static const char *alsa_library = SDL_AUDIO_DRIVER_ALSA_DYNAMIC; |
865
92615154bb68
Date: Sun, 29 Feb 2004 15:14:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
88 static void *alsa_handle = NULL; |
92615154bb68
Date: Sun, 29 Feb 2004 15:14:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
89 |
3818
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
90 static int |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
91 load_alsa_sym(const char *fn, void **addr) |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
92 { |
3824
25052dd25810
Minor ALSA dynamic loading fix.
Ryan C. Gordon <icculus@icculus.org>
parents:
3819
diff
changeset
|
93 /* |
25052dd25810
Minor ALSA dynamic loading fix.
Ryan C. Gordon <icculus@icculus.org>
parents:
3819
diff
changeset
|
94 * !!! FIXME: |
25052dd25810
Minor ALSA dynamic loading fix.
Ryan C. Gordon <icculus@icculus.org>
parents:
3819
diff
changeset
|
95 * Eventually, this will deal with fallbacks, version changes, and |
25052dd25810
Minor ALSA dynamic loading fix.
Ryan C. Gordon <icculus@icculus.org>
parents:
3819
diff
changeset
|
96 * missing symbols we can workaround. But for now, it doesn't. |
25052dd25810
Minor ALSA dynamic loading fix.
Ryan C. Gordon <icculus@icculus.org>
parents:
3819
diff
changeset
|
97 */ |
25052dd25810
Minor ALSA dynamic loading fix.
Ryan C. Gordon <icculus@icculus.org>
parents:
3819
diff
changeset
|
98 |
3818
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
99 #if HAVE_DLVSYM |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
100 *addr = dlvsym(alsa_handle, fn, "ALSA_0.9"); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
101 if (*addr == NULL) |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
102 #endif |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
103 { |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
104 *addr = dlsym(alsa_handle, fn); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
105 if (*addr == NULL) { |
3824
25052dd25810
Minor ALSA dynamic loading fix.
Ryan C. Gordon <icculus@icculus.org>
parents:
3819
diff
changeset
|
106 SDL_SetError("dlsym('%s') failed: %s", fn, strerror(errno)); |
3818
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
107 return 0; |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
108 } |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
109 } |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
110 |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
111 return 1; |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
112 } |
865
92615154bb68
Date: Sun, 29 Feb 2004 15:14:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
113 |
1161
05d4b93b911e
Placate gcc's strict aliasing rules with an extra cast.
Ryan C. Gordon <icculus@icculus.org>
parents:
942
diff
changeset
|
114 /* cast funcs to char* first, to please GCC's strict aliasing rules. */ |
3818
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
115 #define SDL_ALSA_SYM(x) \ |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
116 if (!load_alsa_sym(#x, (void **) (char *) &ALSA_##x)) return -1 |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
117 #else |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
118 #define SDL_ALSA_SYM(x) ALSA_##x = x |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
119 #endif |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
120 |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
121 static int load_alsa_syms(void) |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
122 { |
3818
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
123 SDL_ALSA_SYM(snd_pcm_open); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
124 SDL_ALSA_SYM(snd_pcm_close); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
125 SDL_ALSA_SYM(snd_pcm_writei); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
126 SDL_ALSA_SYM(snd_pcm_resume); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
127 SDL_ALSA_SYM(snd_pcm_prepare); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
128 SDL_ALSA_SYM(snd_pcm_drain); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
129 SDL_ALSA_SYM(snd_strerror); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
130 SDL_ALSA_SYM(snd_pcm_hw_params_sizeof); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
131 SDL_ALSA_SYM(snd_pcm_sw_params_sizeof); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
132 SDL_ALSA_SYM(snd_pcm_hw_params_any); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
133 SDL_ALSA_SYM(snd_pcm_hw_params_set_access); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
134 SDL_ALSA_SYM(snd_pcm_hw_params_set_format); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
135 SDL_ALSA_SYM(snd_pcm_hw_params_set_channels); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
136 SDL_ALSA_SYM(snd_pcm_hw_params_get_channels); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
137 SDL_ALSA_SYM(snd_pcm_hw_params_set_rate_near); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
138 SDL_ALSA_SYM(snd_pcm_hw_params_set_period_size_near); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
139 SDL_ALSA_SYM(snd_pcm_hw_params_get_period_size); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
140 SDL_ALSA_SYM(snd_pcm_hw_params_set_periods_near); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
141 SDL_ALSA_SYM(snd_pcm_hw_params_get_periods); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
142 SDL_ALSA_SYM(snd_pcm_hw_params); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
143 SDL_ALSA_SYM(snd_pcm_sw_params_current); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
144 SDL_ALSA_SYM(snd_pcm_sw_params_set_start_threshold); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
145 SDL_ALSA_SYM(snd_pcm_sw_params_set_avail_min); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
146 SDL_ALSA_SYM(snd_pcm_sw_params); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
147 SDL_ALSA_SYM(snd_pcm_nonblock); |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
148 return 0; |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
149 } |
3824
25052dd25810
Minor ALSA dynamic loading fix.
Ryan C. Gordon <icculus@icculus.org>
parents:
3819
diff
changeset
|
150 #undef SDL_ALSA_SYM |
865
92615154bb68
Date: Sun, 29 Feb 2004 15:14:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
151 |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
152 #ifdef SDL_AUDIO_DRIVER_ALSA_DYNAMIC |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
153 |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
154 static int library_load_count = 0; |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
155 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
156 static void |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
157 UnloadALSALibrary(void) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
158 { |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
159 if ((alsa_handle != NULL) && (--library_load_count == 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:
1878
diff
changeset
|
160 dlclose(alsa_handle); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
161 alsa_handle = NULL; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
162 } |
865
92615154bb68
Date: Sun, 29 Feb 2004 15:14:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
163 } |
92615154bb68
Date: Sun, 29 Feb 2004 15:14:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
164 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
165 static int |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
166 LoadALSALibrary(void) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
167 { |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
168 int retval = 0; |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
169 if (library_load_count++ == 0) { |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
170 alsa_handle = dlopen(alsa_library, RTLD_NOW); |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
171 if (alsa_handle == NULL) { |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
172 library_load_count--; |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
173 retval = -1; |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
174 SDL_SetError("ALSA: dlopen('%s') failed: %s\n", |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
175 alsa_library, strerror(errno)); |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
176 } else { |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
177 retval = load_alsa_syms(); |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
178 if (retval < 0) { |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
179 UnloadALSALibrary(); |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
180 } |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
181 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
182 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
183 return retval; |
865
92615154bb68
Date: Sun, 29 Feb 2004 15:14:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
184 } |
92615154bb68
Date: Sun, 29 Feb 2004 15:14:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
185 |
92615154bb68
Date: Sun, 29 Feb 2004 15:14:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
186 #else |
92615154bb68
Date: Sun, 29 Feb 2004 15:14:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
187 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
188 static void |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
189 UnloadALSALibrary(void) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
190 { |
865
92615154bb68
Date: Sun, 29 Feb 2004 15:14:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
191 } |
92615154bb68
Date: Sun, 29 Feb 2004 15:14:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
192 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
193 static int |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
194 LoadALSALibrary(void) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
195 { |
3818
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
196 load_alsa_syms(); |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
197 return 0; |
865
92615154bb68
Date: Sun, 29 Feb 2004 15:14:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
198 } |
92615154bb68
Date: Sun, 29 Feb 2004 15:14:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
199 |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
200 #endif /* SDL_AUDIO_DRIVER_ALSA_DYNAMIC */ |
865
92615154bb68
Date: Sun, 29 Feb 2004 15:14:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
201 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
202 static 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:
1878
diff
changeset
|
203 get_audio_device(int channels) |
354
30935e76acb5
Updated ALSA audio support for ALSA 0.9
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
204 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
205 const char *device; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
206 |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
207 device = SDL_getenv("AUDIODEV"); /* Is there a standard variable name? */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
208 if (device == NULL) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
209 if (channels == 6) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
210 device = "surround51"; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
211 else if (channels == 4) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
212 device = "surround40"; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
213 else |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
214 device = DEFAULT_DEVICE; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
215 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
216 return device; |
0 | 217 } |
218 | |
219 | |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
220 static int |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
221 ALSA_Available(void) |
0 | 222 { |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
223 int available = 0; |
0 | 224 |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
225 if (LoadALSALibrary() >= 0) { |
3845
ee5dfa7f7993
ALSA's availability test was wrong in multi-device land. If the ALSA libraries
Ryan C. Gordon <icculus@icculus.org>
parents:
3824
diff
changeset
|
226 available = 1; |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
227 UnloadALSALibrary(); |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
228 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
229 return (available); |
0 | 230 } |
231 | |
232 | |
233 | |
234 /* This function waits until it is possible to write a full sound buffer */ | |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
235 static void |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
236 ALSA_WaitDevice(_THIS) |
0 | 237 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
238 /* Check to see if the thread-parent process is still alive */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
239 { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
240 static int cnt = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
241 /* Note that this only works with thread implementations |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
242 that use a different process id for each thread. |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
243 */ |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
244 /* Check every 10 loops */ |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
245 if (this->hidden->parent && (((++cnt) % 10) == 0)) { |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
246 if (kill(this->hidden->parent, 0) < 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:
1878
diff
changeset
|
247 this->enabled = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
248 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
249 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
250 } |
0 | 251 } |
252 | |
1878
d7c9d7f42881
Swizzle ALSA channels for 5.1 output to match DirectSound and CoreAudio.
Ryan C. Gordon <icculus@icculus.org>
parents:
1553
diff
changeset
|
253 |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
254 /* !!! FIXME: is there a channel swizzler in alsalib instead? */ |
1878
d7c9d7f42881
Swizzle ALSA channels for 5.1 output to match DirectSound and CoreAudio.
Ryan C. Gordon <icculus@icculus.org>
parents:
1553
diff
changeset
|
255 /* |
d7c9d7f42881
Swizzle ALSA channels for 5.1 output to match DirectSound and CoreAudio.
Ryan C. Gordon <icculus@icculus.org>
parents:
1553
diff
changeset
|
256 * http://bugzilla.libsdl.org/show_bug.cgi?id=110 |
d7c9d7f42881
Swizzle ALSA channels for 5.1 output to match DirectSound and CoreAudio.
Ryan C. Gordon <icculus@icculus.org>
parents:
1553
diff
changeset
|
257 * "For Linux ALSA, this is FL-FR-RL-RR-C-LFE |
d7c9d7f42881
Swizzle ALSA channels for 5.1 output to match DirectSound and CoreAudio.
Ryan C. Gordon <icculus@icculus.org>
parents:
1553
diff
changeset
|
258 * and for Windows DirectX [and CoreAudio], this is FL-FR-C-LFE-RL-RR" |
d7c9d7f42881
Swizzle ALSA channels for 5.1 output to match DirectSound and CoreAudio.
Ryan C. Gordon <icculus@icculus.org>
parents:
1553
diff
changeset
|
259 */ |
d7c9d7f42881
Swizzle ALSA channels for 5.1 output to match DirectSound and CoreAudio.
Ryan C. Gordon <icculus@icculus.org>
parents:
1553
diff
changeset
|
260 #define SWIZ6(T) \ |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
261 T *ptr = (T *) this->hidden->mixbuf; \ |
1878
d7c9d7f42881
Swizzle ALSA channels for 5.1 output to match DirectSound and CoreAudio.
Ryan C. Gordon <icculus@icculus.org>
parents:
1553
diff
changeset
|
262 const Uint32 count = (this->spec.samples / 6); \ |
d7c9d7f42881
Swizzle ALSA channels for 5.1 output to match DirectSound and CoreAudio.
Ryan C. Gordon <icculus@icculus.org>
parents:
1553
diff
changeset
|
263 Uint32 i; \ |
d7c9d7f42881
Swizzle ALSA channels for 5.1 output to match DirectSound and CoreAudio.
Ryan C. Gordon <icculus@icculus.org>
parents:
1553
diff
changeset
|
264 for (i = 0; i < count; i++, ptr += 6) { \ |
d7c9d7f42881
Swizzle ALSA channels for 5.1 output to match DirectSound and CoreAudio.
Ryan C. Gordon <icculus@icculus.org>
parents:
1553
diff
changeset
|
265 T tmp; \ |
d7c9d7f42881
Swizzle ALSA channels for 5.1 output to match DirectSound and CoreAudio.
Ryan C. Gordon <icculus@icculus.org>
parents:
1553
diff
changeset
|
266 tmp = ptr[2]; ptr[2] = ptr[4]; ptr[4] = tmp; \ |
d7c9d7f42881
Swizzle ALSA channels for 5.1 output to match DirectSound and CoreAudio.
Ryan C. Gordon <icculus@icculus.org>
parents:
1553
diff
changeset
|
267 tmp = ptr[3]; ptr[3] = ptr[5]; ptr[5] = tmp; \ |
d7c9d7f42881
Swizzle ALSA channels for 5.1 output to match DirectSound and CoreAudio.
Ryan C. Gordon <icculus@icculus.org>
parents:
1553
diff
changeset
|
268 } |
d7c9d7f42881
Swizzle ALSA channels for 5.1 output to match DirectSound and CoreAudio.
Ryan C. Gordon <icculus@icculus.org>
parents:
1553
diff
changeset
|
269 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
270 static __inline__ void |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
271 swizzle_alsa_channels_6_64bit(_THIS) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
272 { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
273 SWIZ6(Uint64); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
274 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
275 static __inline__ void |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
276 swizzle_alsa_channels_6_32bit(_THIS) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
277 { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
278 SWIZ6(Uint32); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
279 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
280 static __inline__ void |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
281 swizzle_alsa_channels_6_16bit(_THIS) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
282 { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
283 SWIZ6(Uint16); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
284 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
285 static __inline__ void |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
286 swizzle_alsa_channels_6_8bit(_THIS) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
287 { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
288 SWIZ6(Uint8); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
289 } |
1878
d7c9d7f42881
Swizzle ALSA channels for 5.1 output to match DirectSound and CoreAudio.
Ryan C. Gordon <icculus@icculus.org>
parents:
1553
diff
changeset
|
290 |
d7c9d7f42881
Swizzle ALSA channels for 5.1 output to match DirectSound and CoreAudio.
Ryan C. Gordon <icculus@icculus.org>
parents:
1553
diff
changeset
|
291 #undef SWIZ6 |
d7c9d7f42881
Swizzle ALSA channels for 5.1 output to match DirectSound and CoreAudio.
Ryan C. Gordon <icculus@icculus.org>
parents:
1553
diff
changeset
|
292 |
d7c9d7f42881
Swizzle ALSA channels for 5.1 output to match DirectSound and CoreAudio.
Ryan C. Gordon <icculus@icculus.org>
parents:
1553
diff
changeset
|
293 |
d7c9d7f42881
Swizzle ALSA channels for 5.1 output to match DirectSound and CoreAudio.
Ryan C. Gordon <icculus@icculus.org>
parents:
1553
diff
changeset
|
294 /* |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
295 * Called right before feeding this->hidden->mixbuf to the hardware. Swizzle |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
296 * channels from Windows/Mac order to the format alsalib will want. |
1878
d7c9d7f42881
Swizzle ALSA channels for 5.1 output to match DirectSound and CoreAudio.
Ryan C. Gordon <icculus@icculus.org>
parents:
1553
diff
changeset
|
297 */ |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
298 static __inline__ void |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
299 swizzle_alsa_channels(_THIS) |
1878
d7c9d7f42881
Swizzle ALSA channels for 5.1 output to match DirectSound and CoreAudio.
Ryan C. Gordon <icculus@icculus.org>
parents:
1553
diff
changeset
|
300 { |
d7c9d7f42881
Swizzle ALSA channels for 5.1 output to match DirectSound and CoreAudio.
Ryan C. Gordon <icculus@icculus.org>
parents:
1553
diff
changeset
|
301 if (this->spec.channels == 6) { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
302 const Uint16 fmtsize = (this->spec.format & 0xFF); /* bits/channel. */ |
1878
d7c9d7f42881
Swizzle ALSA channels for 5.1 output to match DirectSound and CoreAudio.
Ryan C. Gordon <icculus@icculus.org>
parents:
1553
diff
changeset
|
303 if (fmtsize == 16) |
d7c9d7f42881
Swizzle ALSA channels for 5.1 output to match DirectSound and CoreAudio.
Ryan C. Gordon <icculus@icculus.org>
parents:
1553
diff
changeset
|
304 swizzle_alsa_channels_6_16bit(this); |
d7c9d7f42881
Swizzle ALSA channels for 5.1 output to match DirectSound and CoreAudio.
Ryan C. Gordon <icculus@icculus.org>
parents:
1553
diff
changeset
|
305 else if (fmtsize == 8) |
d7c9d7f42881
Swizzle ALSA channels for 5.1 output to match DirectSound and CoreAudio.
Ryan C. Gordon <icculus@icculus.org>
parents:
1553
diff
changeset
|
306 swizzle_alsa_channels_6_8bit(this); |
d7c9d7f42881
Swizzle ALSA channels for 5.1 output to match DirectSound and CoreAudio.
Ryan C. Gordon <icculus@icculus.org>
parents:
1553
diff
changeset
|
307 else if (fmtsize == 32) |
d7c9d7f42881
Swizzle ALSA channels for 5.1 output to match DirectSound and CoreAudio.
Ryan C. Gordon <icculus@icculus.org>
parents:
1553
diff
changeset
|
308 swizzle_alsa_channels_6_32bit(this); |
d7c9d7f42881
Swizzle ALSA channels for 5.1 output to match DirectSound and CoreAudio.
Ryan C. Gordon <icculus@icculus.org>
parents:
1553
diff
changeset
|
309 else if (fmtsize == 64) |
d7c9d7f42881
Swizzle ALSA channels for 5.1 output to match DirectSound and CoreAudio.
Ryan C. Gordon <icculus@icculus.org>
parents:
1553
diff
changeset
|
310 swizzle_alsa_channels_6_64bit(this); |
d7c9d7f42881
Swizzle ALSA channels for 5.1 output to match DirectSound and CoreAudio.
Ryan C. Gordon <icculus@icculus.org>
parents:
1553
diff
changeset
|
311 } |
d7c9d7f42881
Swizzle ALSA channels for 5.1 output to match DirectSound and CoreAudio.
Ryan C. Gordon <icculus@icculus.org>
parents:
1553
diff
changeset
|
312 |
d7c9d7f42881
Swizzle ALSA channels for 5.1 output to match DirectSound and CoreAudio.
Ryan C. Gordon <icculus@icculus.org>
parents:
1553
diff
changeset
|
313 /* !!! FIXME: update this for 7.1 if needed, later. */ |
d7c9d7f42881
Swizzle ALSA channels for 5.1 output to match DirectSound and CoreAudio.
Ryan C. Gordon <icculus@icculus.org>
parents:
1553
diff
changeset
|
314 } |
d7c9d7f42881
Swizzle ALSA channels for 5.1 output to match DirectSound and CoreAudio.
Ryan C. Gordon <icculus@icculus.org>
parents:
1553
diff
changeset
|
315 |
d7c9d7f42881
Swizzle ALSA channels for 5.1 output to match DirectSound and CoreAudio.
Ryan C. Gordon <icculus@icculus.org>
parents:
1553
diff
changeset
|
316 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
317 static void |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
318 ALSA_PlayDevice(_THIS) |
0 | 319 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
320 int status; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
321 int sample_len; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
322 signed short *sample_buf; |
765
4c2ba6161939
Editors Note: The original patch was modified to use SDL_Delay() instead of
Sam Lantinga <slouken@libsdl.org>
parents:
547
diff
changeset
|
323 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
324 swizzle_alsa_channels(this); |
1878
d7c9d7f42881
Swizzle ALSA channels for 5.1 output to match DirectSound and CoreAudio.
Ryan C. Gordon <icculus@icculus.org>
parents:
1553
diff
changeset
|
325 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
326 sample_len = this->spec.samples; |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
327 sample_buf = (signed short *) this->hidden->mixbuf; |
1878
d7c9d7f42881
Swizzle ALSA channels for 5.1 output to match DirectSound and CoreAudio.
Ryan C. Gordon <icculus@icculus.org>
parents:
1553
diff
changeset
|
328 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
329 while (sample_len > 0) { |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
330 status = ALSA_snd_pcm_writei(this->hidden->pcm_handle, |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
331 sample_buf, sample_len); |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
332 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
333 if (status < 0) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
334 if (status == -EAGAIN) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
335 SDL_Delay(1); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
336 continue; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
337 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
338 if (status == -ESTRPIPE) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
339 do { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
340 SDL_Delay(1); |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
341 status = ALSA_snd_pcm_resume(this->hidden->pcm_handle); |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
342 } while (status == -EAGAIN); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
343 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
344 if (status < 0) { |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
345 status = ALSA_snd_pcm_prepare(this->hidden->pcm_handle); |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
346 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
347 if (status < 0) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
348 /* Hmm, not much we can do - abort */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
349 this->enabled = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
350 return; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
351 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
352 continue; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
353 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
354 sample_buf += status * this->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:
1878
diff
changeset
|
355 sample_len -= status; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
356 } |
0 | 357 } |
358 | |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
359 static Uint8 * |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
360 ALSA_GetDeviceBuf(_THIS) |
0 | 361 { |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
362 return (this->hidden->mixbuf); |
0 | 363 } |
364 | |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
365 static void |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
366 ALSA_CloseDevice(_THIS) |
0 | 367 { |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
368 if (this->hidden != NULL) { |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
369 if (this->hidden->mixbuf != NULL) { |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
370 SDL_FreeAudioMem(this->hidden->mixbuf); |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
371 this->hidden->mixbuf = NULL; |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
372 } |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
373 if (this->hidden->pcm_handle) { |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
374 ALSA_snd_pcm_drain(this->hidden->pcm_handle); |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
375 ALSA_snd_pcm_close(this->hidden->pcm_handle); |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
376 this->hidden->pcm_handle = NULL; |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
377 } |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
378 SDL_free(this->hidden); |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
379 this->hidden = NULL; |
3824
25052dd25810
Minor ALSA dynamic loading fix.
Ryan C. Gordon <icculus@icculus.org>
parents:
3819
diff
changeset
|
380 UnloadALSALibrary(); |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
381 } |
0 | 382 } |
383 | |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
384 static int |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
385 ALSA_OpenDevice(_THIS, const char *devname, int iscapture) |
0 | 386 { |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
387 int status = 0; |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
388 snd_pcm_t *pcm_handle = NULL; |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
389 snd_pcm_hw_params_t *hwparams = NULL; |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
390 snd_pcm_sw_params_t *swparams = NULL; |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
391 snd_pcm_format_t format = 0; |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
392 snd_pcm_uframes_t frames = 0; |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
393 SDL_AudioFormat test_format = 0; |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
394 |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
395 /* Initialize all variables that we clean on shutdown */ |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
396 this->hidden = (struct SDL_PrivateAudioData *) |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
397 SDL_malloc((sizeof *this->hidden)); |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
398 if (this->hidden == NULL) { |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
399 SDL_OutOfMemory(); |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
400 return 0; |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
401 } |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
402 SDL_memset(this->hidden, 0, (sizeof *this->hidden)); |
0 | 403 |
3824
25052dd25810
Minor ALSA dynamic loading fix.
Ryan C. Gordon <icculus@icculus.org>
parents:
3819
diff
changeset
|
404 if (LoadALSALibrary() < 0) { |
25052dd25810
Minor ALSA dynamic loading fix.
Ryan C. Gordon <icculus@icculus.org>
parents:
3819
diff
changeset
|
405 ALSA_CloseDevice(this); |
25052dd25810
Minor ALSA dynamic loading fix.
Ryan C. Gordon <icculus@icculus.org>
parents:
3819
diff
changeset
|
406 return 0; |
25052dd25810
Minor ALSA dynamic loading fix.
Ryan C. Gordon <icculus@icculus.org>
parents:
3819
diff
changeset
|
407 } |
25052dd25810
Minor ALSA dynamic loading fix.
Ryan C. Gordon <icculus@icculus.org>
parents:
3819
diff
changeset
|
408 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
409 /* Open the 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:
1878
diff
changeset
|
410 /* Name of device should depend on # channels in spec */ |
3818
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
411 status = ALSA_snd_pcm_open(&pcm_handle, |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
412 get_audio_device(this->spec.channels), |
3818
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
413 SND_PCM_STREAM_PLAYBACK, SND_PCM_NONBLOCK); |
942
41a59de7f2ed
Here are patches for SDL12 and SDL_mixer for 4 or 6 channel
Sam Lantinga <slouken@libsdl.org>
parents:
939
diff
changeset
|
414 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
415 if (status < 0) { |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
416 ALSA_CloseDevice(this); |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
417 SDL_SetError("ALSA: Couldn't open audio device: %s", |
3818
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
418 ALSA_snd_strerror(status)); |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
419 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:
1878
diff
changeset
|
420 } |
354
30935e76acb5
Updated ALSA audio support for ALSA 0.9
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
421 |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
422 this->hidden->pcm_handle = pcm_handle; |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
423 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
424 /* Figure out what the hardware is capable of */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
425 snd_pcm_hw_params_alloca(&hwparams); |
3818
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
426 status = ALSA_snd_pcm_hw_params_any(pcm_handle, hwparams); |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
427 if (status < 0) { |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
428 ALSA_CloseDevice(this); |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
429 SDL_SetError("ALSA: Couldn't get hardware config: %s", |
3818
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
430 ALSA_snd_strerror(status)); |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
431 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:
1878
diff
changeset
|
432 } |
354
30935e76acb5
Updated ALSA audio support for ALSA 0.9
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
433 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
434 /* SDL only uses interleaved sample output */ |
3818
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
435 status = ALSA_snd_pcm_hw_params_set_access(pcm_handle, hwparams, |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
436 SND_PCM_ACCESS_RW_INTERLEAVED); |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
437 if (status < 0) { |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
438 ALSA_CloseDevice(this); |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
439 SDL_SetError("ALSA: Couldn't set interleaved access: %s", |
3818
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
440 ALSA_snd_strerror(status)); |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
441 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:
1878
diff
changeset
|
442 } |
0 | 443 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
444 /* Try for a closest match on audio format */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
445 status = -1; |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
446 for (test_format = SDL_FirstAudioFormat(this->spec.format); |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
447 test_format && (status < 0);) { |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
448 status = 0; /* if we can't support a format, it'll become -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:
1878
diff
changeset
|
449 switch (test_format) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
450 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:
1878
diff
changeset
|
451 format = SND_PCM_FORMAT_U8; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
452 break; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
453 case AUDIO_S8: |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
454 format = SND_PCM_FORMAT_S8; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
455 break; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
456 case AUDIO_S16LSB: |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
457 format = SND_PCM_FORMAT_S16_LE; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
458 break; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
459 case AUDIO_S16MSB: |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
460 format = SND_PCM_FORMAT_S16_BE; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
461 break; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
462 case AUDIO_U16LSB: |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
463 format = SND_PCM_FORMAT_U16_LE; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
464 break; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
465 case AUDIO_U16MSB: |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
466 format = SND_PCM_FORMAT_U16_BE; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
467 break; |
1995
0ca6ba107642
ALSA backend can handle int32 and float32 data directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
1982
diff
changeset
|
468 case AUDIO_S32LSB: |
2010
39897da56f63
Whoops, wrong tokens for int32 support in ALSA driver (specified unsigned
Ryan C. Gordon <icculus@icculus.org>
parents:
2009
diff
changeset
|
469 format = SND_PCM_FORMAT_S32_LE; |
1995
0ca6ba107642
ALSA backend can handle int32 and float32 data directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
1982
diff
changeset
|
470 break; |
0ca6ba107642
ALSA backend can handle int32 and float32 data directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
1982
diff
changeset
|
471 case AUDIO_S32MSB: |
2010
39897da56f63
Whoops, wrong tokens for int32 support in ALSA driver (specified unsigned
Ryan C. Gordon <icculus@icculus.org>
parents:
2009
diff
changeset
|
472 format = SND_PCM_FORMAT_S32_BE; |
1995
0ca6ba107642
ALSA backend can handle int32 and float32 data directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
1982
diff
changeset
|
473 break; |
0ca6ba107642
ALSA backend can handle int32 and float32 data directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
1982
diff
changeset
|
474 case AUDIO_F32LSB: |
0ca6ba107642
ALSA backend can handle int32 and float32 data directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
1982
diff
changeset
|
475 format = SND_PCM_FORMAT_FLOAT_LE; |
0ca6ba107642
ALSA backend can handle int32 and float32 data directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
1982
diff
changeset
|
476 break; |
0ca6ba107642
ALSA backend can handle int32 and float32 data directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
1982
diff
changeset
|
477 case AUDIO_F32MSB: |
0ca6ba107642
ALSA backend can handle int32 and float32 data directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
1982
diff
changeset
|
478 format = SND_PCM_FORMAT_FLOAT_BE; |
0ca6ba107642
ALSA backend can handle int32 and float32 data directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
1982
diff
changeset
|
479 break; |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
480 default: |
2009
f2058fb367e4
ALSA was testing if (format) was set to zero as an error condition, but
Ryan C. Gordon <icculus@icculus.org>
parents:
1995
diff
changeset
|
481 status = -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:
1878
diff
changeset
|
482 break; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
483 } |
2009
f2058fb367e4
ALSA was testing if (format) was set to zero as an error condition, but
Ryan C. Gordon <icculus@icculus.org>
parents:
1995
diff
changeset
|
484 if (status >= 0) { |
3818
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
485 status = ALSA_snd_pcm_hw_params_set_format(pcm_handle, |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
486 hwparams, format); |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
487 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
488 if (status < 0) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
489 test_format = SDL_NextAudioFormat(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
490 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
491 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
492 if (status < 0) { |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
493 ALSA_CloseDevice(this); |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
494 SDL_SetError("ALSA: Couldn't find any hardware audio formats"); |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
495 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:
1878
diff
changeset
|
496 } |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
497 this->spec.format = test_format; |
0 | 498 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
499 /* Set the number of channels */ |
3818
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
500 status = ALSA_snd_pcm_hw_params_set_channels(pcm_handle, hwparams, |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
501 this->spec.channels); |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
502 if (status < 0) { |
3818
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
503 status = ALSA_snd_pcm_hw_params_get_channels(hwparams); |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
504 if ((status <= 0) || (status > 2)) { |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
505 ALSA_CloseDevice(this); |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
506 SDL_SetError("ALSA: Couldn't set audio channels"); |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
507 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:
1878
diff
changeset
|
508 } |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
509 this->spec.channels = status; |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
510 } |
0 | 511 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
512 /* Set the audio rate */ |
3818
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
513 status = ALSA_snd_pcm_hw_params_set_rate_near(pcm_handle, hwparams, |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
514 this->spec.freq, 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:
1878
diff
changeset
|
515 if (status < 0) { |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
516 ALSA_CloseDevice(this); |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
517 SDL_SetError("ALSA: Couldn't set audio frequency: %s", |
3818
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
518 ALSA_snd_strerror(status)); |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
519 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:
1878
diff
changeset
|
520 } |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
521 this->spec.freq = status; |
0 | 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:
1878
diff
changeset
|
523 /* Set the buffer size, in samples */ |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
524 frames = this->spec.samples; |
3818
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
525 frames = ALSA_snd_pcm_hw_params_set_period_size_near(pcm_handle, hwparams, |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
526 frames, NULL); |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
527 this->spec.samples = frames; |
3818
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
528 ALSA_snd_pcm_hw_params_set_periods_near(pcm_handle, hwparams, 2, NULL); |
354
30935e76acb5
Updated ALSA audio support for ALSA 0.9
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
529 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
530 /* "set" the hardware with the desired parameters */ |
3818
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
531 status = ALSA_snd_pcm_hw_params(pcm_handle, hwparams); |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
532 if (status < 0) { |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
533 ALSA_CloseDevice(this); |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
534 SDL_SetError("ALSA: Couldn't set hardware audio parameters: %s", |
3818
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
535 ALSA_snd_strerror(status)); |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
536 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:
1878
diff
changeset
|
537 } |
1552 | 538 |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
539 #if AUDIO_DEBUG |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
540 { |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
541 snd_pcm_sframes_t bufsize; |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
542 int fragments; |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
543 bufsize = ALSA_snd_pcm_hw_params_get_period_size(hwparams); |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
544 fragments = ALSA_snd_pcm_hw_params_get_periods(hwparams); |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
545 fprintf(stderr,"ALSA: bufsize = %ld, fragments = %d\n",bufsize,fragments); |
1552 | 546 } |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
547 #endif |
1552 | 548 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
549 /* Set the software parameters */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
550 snd_pcm_sw_params_alloca(&swparams); |
3818
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
551 status = ALSA_snd_pcm_sw_params_current(pcm_handle, swparams); |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
552 if (status < 0) { |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
553 ALSA_CloseDevice(this); |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
554 SDL_SetError("ALSA: Couldn't get software config: %s", |
3818
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
555 ALSA_snd_strerror(status)); |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
556 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:
1878
diff
changeset
|
557 } |
3818
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
558 status = ALSA_snd_pcm_sw_params_set_start_threshold(pcm_handle,swparams,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:
1878
diff
changeset
|
559 if (status < 0) { |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
560 ALSA_CloseDevice(this); |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
561 SDL_SetError("ALSA: Couldn't set start threshold: %s", |
3818
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
562 ALSA_snd_strerror(status)); |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
563 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:
1878
diff
changeset
|
564 } |
3818
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
565 status = ALSA_snd_pcm_sw_params_set_avail_min(pcm_handle, swparams, frames); |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
566 if (status < 0) { |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
567 ALSA_CloseDevice(this); |
3818
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
568 SDL_SetError("Couldn't set avail min: %s", ALSA_snd_strerror(status)); |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
569 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:
1878
diff
changeset
|
570 } |
3818
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
571 status = ALSA_snd_pcm_sw_params(pcm_handle, swparams); |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
572 if (status < 0) { |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
573 ALSA_CloseDevice(this); |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
574 SDL_SetError("Couldn't set software audio parameters: %s", |
3818
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
575 ALSA_snd_strerror(status)); |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
576 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:
1878
diff
changeset
|
577 } |
0 | 578 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
579 /* Calculate the final parameters for this audio specification */ |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
580 SDL_CalculateAudioSpec(&this->spec); |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
581 |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
582 /* Allocate mixing buffer */ |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
583 this->hidden->mixlen = this->spec.size; |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
584 this->hidden->mixbuf = (Uint8 *) SDL_AllocAudioMem(this->hidden->mixlen); |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
585 if (this->hidden->mixbuf == NULL) { |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
586 ALSA_CloseDevice(this); |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
587 SDL_OutOfMemory(); |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
588 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:
1878
diff
changeset
|
589 } |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
590 SDL_memset(this->hidden->mixbuf, this->spec.silence, this->spec.size); |
0 | 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:
1878
diff
changeset
|
592 /* Get the parent process id (we're the parent of the audio thread) */ |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
593 this->hidden->parent = getpid(); |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
594 |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
595 /* Switch to blocking mode for playback */ |
3818
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
596 ALSA_snd_pcm_nonblock(pcm_handle, 0); |
0 | 597 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
598 /* We're ready to rock and roll. :-) */ |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
599 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:
1878
diff
changeset
|
600 } |
0 | 601 |
3819
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
602 static int |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
603 ALSA_Init(SDL_AudioDriverImpl *impl) |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
604 { |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
605 /* Set the function pointers */ |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
606 impl->OpenDevice = ALSA_OpenDevice; |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
607 impl->WaitDevice = ALSA_WaitDevice; |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
608 impl->GetDeviceBuf = ALSA_GetDeviceBuf; |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
609 impl->PlayDevice = ALSA_PlayDevice; |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
610 impl->CloseDevice = ALSA_CloseDevice; |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
611 impl->OnlyHasDefaultOutputDevice = 1; /* !!! FIXME: Add device enum! */ |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
612 |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
613 return 1; |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
614 } |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
615 |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
616 |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
617 AudioBootStrap ALSA_bootstrap = { |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
618 DRIVER_NAME, "ALSA 0.9 PCM audio", |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
619 ALSA_Available, ALSA_Init, 0 |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
620 }; |
b225d9820ee3
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
Ryan C. Gordon <icculus@icculus.org>
parents:
3818
diff
changeset
|
621 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1878
diff
changeset
|
622 /* vi: set ts=4 sw=4 expandtab: */ |