Mercurial > sdl-ios-xcode
annotate src/audio/alsa/SDL_alsa_audio.c @ 3819:b225d9820ee3 SDL-ryan-multiple-audio-device
Updated a bunch of audio backends to 1.3 API (Dreamcast, OS/2, ALSA, and
BeOS). None are tested, so anyu could fail to compile.
author | Ryan C. Gordon <icculus@icculus.org> |
---|---|
date | Fri, 06 Oct 2006 20:36:23 +0000 |
parents | 49eadd6e8962 |
children | 25052dd25810 |
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 { |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
93 #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
|
94 *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
|
95 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
|
96 #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
|
97 { |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
98 *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
|
99 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
|
100 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
|
101 } |
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 } |
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 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
|
105 } |
865
92615154bb68
Date: Sun, 29 Feb 2004 15:14:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
106 |
1161
05d4b93b911e
Placate gcc's strict aliasing rules with an extra cast.
Ryan C. Gordon <icculus@icculus.org>
parents:
942
diff
changeset
|
107 /* 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
|
108 #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
|
109 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
|
110 #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
|
111 #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
|
112 #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
|
113 |
49eadd6e8962
Mangled ALSA dynamic loading...static loading will still work if you have the
Ryan C. Gordon <icculus@icculus.org>
parents:
3798
diff
changeset
|
114 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
|
115 { |
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
|
116 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
|
117 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
|
118 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
|
119 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
|
120 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
|
121 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
|
122 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
|
123 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
|
124 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
|
125 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
|
126 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
|
127 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
|
128 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
|
129 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
|
130 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
|
131 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
|
132 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
|
133 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
|
134 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
|
135 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
|
136 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
|
137 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
|
138 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
|
139 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
|
140 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
|
141 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
|
142 } |
865
92615154bb68
Date: Sun, 29 Feb 2004 15:14:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
143 |
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
|
144 #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
|
145 |
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
|
146 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
|
147 |
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
|
148 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
|
149 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
|
150 { |
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
|
151 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
|
152 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
|
153 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
|
154 } |
865
92615154bb68
Date: Sun, 29 Feb 2004 15:14:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
155 } |
92615154bb68
Date: Sun, 29 Feb 2004 15:14:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
156 |
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
|
157 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
|
158 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
|
159 { |
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
|
160 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
|
161 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
|
162 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
|
163 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
|
164 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
|
165 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
|
166 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
|
167 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
|
168 } 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
|
169 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
|
170 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
|
171 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
|
172 } |
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
|
173 } |
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
|
174 } |
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
|
175 return retval; |
865
92615154bb68
Date: Sun, 29 Feb 2004 15:14:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
176 } |
92615154bb68
Date: Sun, 29 Feb 2004 15:14:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
177 |
92615154bb68
Date: Sun, 29 Feb 2004 15:14:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
178 #else |
92615154bb68
Date: Sun, 29 Feb 2004 15:14:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
179 |
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
|
180 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
|
181 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
|
182 { |
865
92615154bb68
Date: Sun, 29 Feb 2004 15:14:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
183 } |
92615154bb68
Date: Sun, 29 Feb 2004 15:14:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
184 |
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
|
185 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
|
186 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
|
187 { |
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
|
188 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
|
189 return 0; |
865
92615154bb68
Date: Sun, 29 Feb 2004 15:14:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
190 } |
92615154bb68
Date: Sun, 29 Feb 2004 15:14:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
191 |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
192 #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
|
193 |
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
|
194 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
|
195 get_audio_device(int channels) |
354
30935e76acb5
Updated ALSA audio support for ALSA 0.9
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
196 { |
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 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
|
198 |
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
|
199 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
|
200 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
|
201 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
|
202 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
|
203 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
|
204 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
|
205 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
|
206 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
|
207 } |
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 return device; |
0 | 209 } |
210 | |
211 | |
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
|
212 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
|
213 ALSA_Available(void) |
0 | 214 { |
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
|
215 int available = 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
|
216 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
|
217 snd_pcm_t *handle; |
0 | 218 |
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
|
219 if (LoadALSALibrary() >= 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
|
220 int status = ALSA_snd_pcm_open(&handle, get_audio_device(2), |
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 SND_PCM_STREAM_PLAYBACK, |
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
|
222 SND_PCM_NONBLOCK); |
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 if (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
|
224 available = 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
|
225 ALSA_snd_pcm_close(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
|
226 } |
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; |
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
|
380 } |
0 | 381 } |
382 | |
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
|
383 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
|
384 ALSA_OpenDevice(_THIS, const char *devname, int iscapture) |
0 | 385 { |
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
|
386 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
|
387 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
|
388 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
|
389 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
|
390 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
|
391 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
|
392 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
|
393 |
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 /* 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
|
395 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
|
396 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
|
397 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
|
398 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
|
399 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
|
400 } |
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 SDL_memset(this->hidden, 0, (sizeof *this->hidden)); |
0 | 402 |
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
|
403 /* 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
|
404 /* 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
|
405 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
|
406 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
|
407 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
|
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 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
|
410 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
|
411 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
|
412 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
|
413 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
|
414 } |
354
30935e76acb5
Updated ALSA audio support for ALSA 0.9
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
415 |
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 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
|
417 |
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
|
418 /* 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
|
419 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
|
420 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
|
421 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
|
422 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
|
423 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
|
424 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
|
425 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
|
426 } |
354
30935e76acb5
Updated ALSA audio support for ALSA 0.9
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
427 |
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
|
428 /* 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
|
429 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
|
430 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
|
431 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
|
432 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
|
433 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
|
434 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
|
435 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
|
436 } |
0 | 437 |
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
|
438 /* 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
|
439 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
|
440 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
|
441 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
|
442 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
|
443 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
|
444 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
|
445 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
|
446 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
|
447 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
|
448 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
|
449 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
|
450 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
|
451 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
|
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_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
|
454 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
|
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_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
|
457 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
|
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_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
|
460 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
|
461 break; |
1995
0ca6ba107642
ALSA backend can handle int32 and float32 data directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
1982
diff
changeset
|
462 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
|
463 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
|
464 break; |
0ca6ba107642
ALSA backend can handle int32 and float32 data directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
1982
diff
changeset
|
465 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
|
466 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
|
467 break; |
0ca6ba107642
ALSA backend can handle int32 and float32 data directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
1982
diff
changeset
|
468 case AUDIO_F32LSB: |
0ca6ba107642
ALSA backend can handle int32 and float32 data directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
1982
diff
changeset
|
469 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
|
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_F32MSB: |
0ca6ba107642
ALSA backend can handle int32 and float32 data directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
1982
diff
changeset
|
472 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
|
473 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
|
474 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
|
475 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
|
476 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
|
477 } |
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
|
478 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
|
479 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
|
480 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
|
481 } |
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 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
|
483 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
|
484 } |
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
|
485 } |
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
|
486 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
|
487 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
|
488 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
|
489 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
|
490 } |
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
|
491 this->spec.format = test_format; |
0 | 492 |
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
|
493 /* 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
|
494 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
|
495 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
|
496 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
|
497 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
|
498 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
|
499 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
|
500 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
|
501 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
|
502 } |
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
|
503 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
|
504 } |
0 | 505 |
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
|
506 /* 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
|
507 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
|
508 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
|
509 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
|
510 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
|
511 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
|
512 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
|
513 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
|
514 } |
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
|
515 this->spec.freq = status; |
0 | 516 |
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
|
517 /* 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
|
518 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
|
519 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
|
520 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
|
521 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
|
522 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
|
523 |
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
|
524 /* "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
|
525 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
|
526 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
|
527 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
|
528 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
|
529 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
|
530 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
|
531 } |
1552 | 532 |
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 #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
|
534 { |
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
|
535 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
|
536 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
|
537 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
|
538 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
|
539 fprintf(stderr,"ALSA: bufsize = %ld, fragments = %d\n",bufsize,fragments); |
1552 | 540 } |
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
|
541 #endif |
1552 | 542 |
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
|
543 /* 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
|
544 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
|
545 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
|
546 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
|
547 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
|
548 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
|
549 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
|
550 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
|
551 } |
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
|
552 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
|
553 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
|
554 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
|
555 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
|
556 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
|
557 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
|
558 } |
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
|
559 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
|
560 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
|
561 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
|
562 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
|
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(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
|
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); |
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
|
568 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
|
569 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
|
570 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
|
571 } |
0 | 572 |
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
|
573 /* 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
|
574 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
|
575 |
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
|
576 /* 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
|
577 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
|
578 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
|
579 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
|
580 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
|
581 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
|
582 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
|
583 } |
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
|
584 SDL_memset(this->hidden->mixbuf, this->spec.silence, this->spec.size); |
0 | 585 |
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
|
586 /* 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
|
587 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
|
588 |
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 /* 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
|
590 ALSA_snd_pcm_nonblock(pcm_handle, 0); |
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 /* 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
|
593 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
|
594 } |
0 | 595 |
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
|
596 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
|
597 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
|
598 { |
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 /* 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
|
600 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
|
601 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
|
602 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
|
603 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
|
604 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
|
605 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
|
606 |
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 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
|
608 } |
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 |
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 |
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 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
|
612 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
|
613 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
|
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 |
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
|
616 /* vi: set ts=4 sw=4 expandtab: */ |