Mercurial > sdl-ios-xcode
annotate src/audio/pulse/SDL_pulseaudio.c @ 4361:991e4bcfc7a8 SDL-1.2
Added an error message for when ALSA audio fails
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Mon, 19 Oct 2009 05:15:21 +0000 |
parents | 14f95e514408 |
children | f5d3f7fa071d |
rev | line source |
---|---|
3939
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
1 /* |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
2 SDL - Simple DirectMedia Layer |
4159 | 3 Copyright (C) 1997-2009 Sam Lantinga |
3939
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
4 |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
5 This library is free software; you can redistribute it and/or |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
6 modify it under the terms of the GNU Lesser General Public |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
7 License as published by the Free Software Foundation; either |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
8 version 2.1 of the License, or (at your option) any later version. |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
9 |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
10 This library is distributed in the hope that it will be useful, |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
11 but WITHOUT ANY WARRANTY; without even the implied warranty of |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
13 Lesser General Public License for more details. |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
14 |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
15 You should have received a copy of the GNU Lesser General Public |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
16 License along with this library; if not, write to the Free Software |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
18 |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
19 Stéphan Kochen |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
20 stephan@kochen.nl |
4211 | 21 |
3939
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
22 Based on parts of the ALSA and ESounD output drivers. |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
23 */ |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
24 #include "SDL_config.h" |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
25 |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
26 /* Allow access to an PulseAudio network stream mixing buffer */ |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
27 |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
28 #include <sys/types.h> |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
29 #include <unistd.h> |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
30 #include <signal.h> |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
31 #include <errno.h> |
4216 | 32 #include <pulse/pulseaudio.h> |
3939
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
33 #include <pulse/simple.h> |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
34 |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
35 #include "SDL_timer.h" |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
36 #include "SDL_audio.h" |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
37 #include "../SDL_audiomem.h" |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
38 #include "../SDL_audio_c.h" |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
39 #include "../SDL_audiodev_c.h" |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
40 #include "SDL_pulseaudio.h" |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
41 |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
42 #ifdef SDL_AUDIO_DRIVER_PULSE_DYNAMIC |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
43 #include "SDL_name.h" |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
44 #include "SDL_loadso.h" |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
45 #else |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
46 #define SDL_NAME(X) X |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
47 #endif |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
48 |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
49 /* The tag name used by the driver */ |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
50 #define PULSE_DRIVER_NAME "pulse" |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
51 |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
52 /* Audio driver functions */ |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
53 static int PULSE_OpenAudio(_THIS, SDL_AudioSpec *spec); |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
54 static void PULSE_WaitAudio(_THIS); |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
55 static void PULSE_PlayAudio(_THIS); |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
56 static Uint8 *PULSE_GetAudioBuf(_THIS); |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
57 static void PULSE_CloseAudio(_THIS); |
4216 | 58 static void PULSE_WaitDone(_THIS); |
3939
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
59 |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
60 #ifdef SDL_AUDIO_DRIVER_PULSE_DYNAMIC |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
61 |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
62 static const char *pulse_library = SDL_AUDIO_DRIVER_PULSE_DYNAMIC; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
63 static void *pulse_handle = NULL; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
64 static int pulse_loaded = 0; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
65 |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
66 static pa_simple* (*SDL_NAME(pa_simple_new))( |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
67 const char *server, |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
68 const char *name, |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
69 pa_stream_direction_t dir, |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
70 const char *dev, |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
71 const char *stream_name, |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
72 const pa_sample_spec *ss, |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
73 const pa_channel_map *map, |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
74 const pa_buffer_attr *attr, |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
75 int *error |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
76 ); |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
77 static void (*SDL_NAME(pa_simple_free))(pa_simple *s); |
4216 | 78 |
3939
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
79 static pa_channel_map* (*SDL_NAME(pa_channel_map_init_auto))( |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
80 pa_channel_map *m, |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
81 unsigned channels, |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
82 pa_channel_map_def_t def |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
83 ); |
4211 | 84 |
4216 | 85 pa_mainloop * (*SDL_NAME(pa_mainloop_new))(void); |
86 pa_mainloop_api * (*SDL_NAME(pa_mainloop_get_api))(pa_mainloop *m); | |
87 int (*SDL_NAME(pa_mainloop_iterate))(pa_mainloop *m, int block, int *retval); | |
88 void (*SDL_NAME(pa_mainloop_free))(pa_mainloop *m); | |
89 | |
90 pa_operation_state_t (*SDL_NAME(pa_operation_get_state))(pa_operation *o); | |
91 void (*SDL_NAME(pa_operation_cancel))(pa_operation *o); | |
92 void (*SDL_NAME(pa_operation_unref))(pa_operation *o); | |
93 | |
94 pa_context * (*SDL_NAME(pa_context_new))( | |
95 pa_mainloop_api *m, const char *name); | |
96 int (*SDL_NAME(pa_context_connect))( | |
97 pa_context *c, const char *server, | |
98 pa_context_flags_t flags, const pa_spawn_api *api); | |
99 pa_context_state_t (*SDL_NAME(pa_context_get_state))(pa_context *c); | |
100 void (*SDL_NAME(pa_context_disconnect))(pa_context *c); | |
101 void (*SDL_NAME(pa_context_unref))(pa_context *c); | |
102 | |
103 pa_stream * (*SDL_NAME(pa_stream_new))(pa_context *c, | |
104 const char *name, const pa_sample_spec *ss, const pa_channel_map *map); | |
105 int (*SDL_NAME(pa_stream_connect_playback))(pa_stream *s, const char *dev, | |
106 const pa_buffer_attr *attr, pa_stream_flags_t flags, | |
107 pa_cvolume *volume, pa_stream *sync_stream); | |
108 pa_stream_state_t (*SDL_NAME(pa_stream_get_state))(pa_stream *s); | |
109 size_t (*SDL_NAME(pa_stream_writable_size))(pa_stream *s); | |
110 int (*SDL_NAME(pa_stream_write))(pa_stream *s, const void *data, size_t nbytes, | |
111 pa_free_cb_t free_cb, int64_t offset, pa_seek_mode_t seek); | |
112 pa_operation * (*SDL_NAME(pa_stream_drain))(pa_stream *s, | |
113 pa_stream_success_cb_t cb, void *userdata); | |
114 int (*SDL_NAME(pa_stream_disconnect))(pa_stream *s); | |
115 void (*SDL_NAME(pa_stream_unref))(pa_stream *s); | |
3939
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
116 |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
117 static struct { |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
118 const char *name; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
119 void **func; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
120 } pulse_functions[] = { |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
121 { "pa_simple_new", |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
122 (void **)&SDL_NAME(pa_simple_new) }, |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
123 { "pa_simple_free", |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
124 (void **)&SDL_NAME(pa_simple_free) }, |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
125 { "pa_channel_map_init_auto", |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
126 (void **)&SDL_NAME(pa_channel_map_init_auto) }, |
4216 | 127 { "pa_mainloop_new", |
128 (void **)&SDL_NAME(pa_mainloop_new) }, | |
129 { "pa_mainloop_get_api", | |
130 (void **)&SDL_NAME(pa_mainloop_get_api) }, | |
131 { "pa_mainloop_iterate", | |
132 (void **)&SDL_NAME(pa_mainloop_iterate) }, | |
133 { "pa_mainloop_free", | |
134 (void **)&SDL_NAME(pa_mainloop_free) }, | |
135 { "pa_operation_get_state", | |
136 (void **)&SDL_NAME(pa_operation_get_state) }, | |
137 { "pa_operation_cancel", | |
138 (void **)&SDL_NAME(pa_operation_cancel) }, | |
139 { "pa_operation_unref", | |
140 (void **)&SDL_NAME(pa_operation_unref) }, | |
141 { "pa_context_new", | |
142 (void **)&SDL_NAME(pa_context_new) }, | |
143 { "pa_context_connect", | |
144 (void **)&SDL_NAME(pa_context_connect) }, | |
145 { "pa_context_get_state", | |
146 (void **)&SDL_NAME(pa_context_get_state) }, | |
147 { "pa_context_disconnect", | |
148 (void **)&SDL_NAME(pa_context_disconnect) }, | |
149 { "pa_context_unref", | |
150 (void **)&SDL_NAME(pa_context_unref) }, | |
151 { "pa_stream_new", | |
152 (void **)&SDL_NAME(pa_stream_new) }, | |
153 { "pa_stream_connect_playback", | |
154 (void **)&SDL_NAME(pa_stream_connect_playback) }, | |
155 { "pa_stream_get_state", | |
156 (void **)&SDL_NAME(pa_stream_get_state) }, | |
157 { "pa_stream_writable_size", | |
158 (void **)&SDL_NAME(pa_stream_writable_size) }, | |
159 { "pa_stream_write", | |
160 (void **)&SDL_NAME(pa_stream_write) }, | |
161 { "pa_stream_drain", | |
162 (void **)&SDL_NAME(pa_stream_drain) }, | |
163 { "pa_stream_disconnect", | |
164 (void **)&SDL_NAME(pa_stream_disconnect) }, | |
165 { "pa_stream_unref", | |
166 (void **)&SDL_NAME(pa_stream_unref) }, | |
3939
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
167 }; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
168 |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
169 static void UnloadPulseLibrary() |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
170 { |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
171 if ( pulse_loaded ) { |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
172 SDL_UnloadObject(pulse_handle); |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
173 pulse_handle = NULL; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
174 pulse_loaded = 0; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
175 } |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
176 } |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
177 |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
178 static int LoadPulseLibrary(void) |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
179 { |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
180 int i, retval = -1; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
181 |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
182 pulse_handle = SDL_LoadObject(pulse_library); |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
183 if ( pulse_handle ) { |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
184 pulse_loaded = 1; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
185 retval = 0; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
186 for ( i=0; i<SDL_arraysize(pulse_functions); ++i ) { |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
187 *pulse_functions[i].func = SDL_LoadFunction(pulse_handle, pulse_functions[i].name); |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
188 if ( !*pulse_functions[i].func ) { |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
189 retval = -1; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
190 UnloadPulseLibrary(); |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
191 break; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
192 } |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
193 } |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
194 } |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
195 return retval; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
196 } |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
197 |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
198 #else |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
199 |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
200 static void UnloadPulseLibrary() |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
201 { |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
202 return; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
203 } |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
204 |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
205 static int LoadPulseLibrary(void) |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
206 { |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
207 return 0; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
208 } |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
209 |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
210 #endif /* SDL_AUDIO_DRIVER_PULSE_DYNAMIC */ |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
211 |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
212 /* Audio driver bootstrap functions */ |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
213 |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
214 static int Audio_Available(void) |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
215 { |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
216 pa_sample_spec paspec; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
217 pa_simple *connection; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
218 int available; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
219 |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
220 available = 0; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
221 if ( LoadPulseLibrary() < 0 ) { |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
222 return available; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
223 } |
4211 | 224 |
3939
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
225 /* Connect with a dummy format. */ |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
226 paspec.format = PA_SAMPLE_U8; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
227 paspec.rate = 11025; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
228 paspec.channels = 1; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
229 connection = SDL_NAME(pa_simple_new)( |
4211 | 230 NULL, /* server */ |
3939
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
231 "Test stream", /* application name */ |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
232 PA_STREAM_PLAYBACK, /* playback mode */ |
4211 | 233 NULL, /* device on the server */ |
3939
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
234 "Simple DirectMedia Layer", /* stream description */ |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
235 &paspec, /* sample format spec */ |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
236 NULL, /* channel map */ |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
237 NULL, /* buffering attributes */ |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
238 NULL /* error code */ |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
239 ); |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
240 if ( connection != NULL ) { |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
241 available = 1; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
242 SDL_NAME(pa_simple_free)(connection); |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
243 } |
4211 | 244 |
3939
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
245 UnloadPulseLibrary(); |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
246 return(available); |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
247 } |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
248 |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
249 static void Audio_DeleteDevice(SDL_AudioDevice *device) |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
250 { |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
251 SDL_free(device->hidden); |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
252 SDL_free(device); |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
253 UnloadPulseLibrary(); |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
254 } |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
255 |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
256 static SDL_AudioDevice *Audio_CreateDevice(int devindex) |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
257 { |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
258 SDL_AudioDevice *this; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
259 |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
260 /* Initialize all variables that we clean on shutdown */ |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
261 LoadPulseLibrary(); |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
262 this = (SDL_AudioDevice *)SDL_malloc(sizeof(SDL_AudioDevice)); |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
263 if ( this ) { |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
264 SDL_memset(this, 0, (sizeof *this)); |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
265 this->hidden = (struct SDL_PrivateAudioData *) |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
266 SDL_malloc((sizeof *this->hidden)); |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
267 } |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
268 if ( (this == NULL) || (this->hidden == NULL) ) { |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
269 SDL_OutOfMemory(); |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
270 if ( this ) { |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
271 SDL_free(this); |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
272 } |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
273 return(0); |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
274 } |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
275 SDL_memset(this->hidden, 0, (sizeof *this->hidden)); |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
276 |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
277 /* Set the function pointers */ |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
278 this->OpenAudio = PULSE_OpenAudio; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
279 this->WaitAudio = PULSE_WaitAudio; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
280 this->PlayAudio = PULSE_PlayAudio; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
281 this->GetAudioBuf = PULSE_GetAudioBuf; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
282 this->CloseAudio = PULSE_CloseAudio; |
4216 | 283 this->WaitDone = PULSE_WaitDone; |
3939
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
284 |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
285 this->free = Audio_DeleteDevice; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
286 |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
287 return this; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
288 } |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
289 |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
290 AudioBootStrap PULSE_bootstrap = { |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
291 PULSE_DRIVER_NAME, "PulseAudio", |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
292 Audio_Available, Audio_CreateDevice |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
293 }; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
294 |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
295 /* This function waits until it is possible to write a full sound buffer */ |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
296 static void PULSE_WaitAudio(_THIS) |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
297 { |
4216 | 298 int size; |
299 while(1) { | |
300 if (SDL_NAME(pa_context_get_state)(context) != PA_CONTEXT_READY || | |
301 SDL_NAME(pa_stream_get_state)(stream) != PA_STREAM_READY || | |
302 SDL_NAME(pa_mainloop_iterate)(mainloop, 1, NULL) < 0) { | |
303 this->enabled = 0; | |
304 return; | |
3939
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
305 } |
4216 | 306 size = SDL_NAME(pa_stream_writable_size)(stream); |
307 if (size >= mixlen) | |
308 return; | |
3939
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
309 } |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
310 } |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
311 |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
312 static void PULSE_PlayAudio(_THIS) |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
313 { |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
314 /* Write the audio data */ |
4216 | 315 if (SDL_NAME(pa_stream_write)(stream, mixbuf, mixlen, NULL, 0LL, PA_SEEK_RELATIVE) < 0) |
3939
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
316 this->enabled = 0; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
317 } |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
318 |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
319 static Uint8 *PULSE_GetAudioBuf(_THIS) |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
320 { |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
321 return(mixbuf); |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
322 } |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
323 |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
324 static void PULSE_CloseAudio(_THIS) |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
325 { |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
326 if ( mixbuf != NULL ) { |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
327 SDL_FreeAudioMem(mixbuf); |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
328 mixbuf = NULL; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
329 } |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
330 if ( stream != NULL ) { |
4216 | 331 SDL_NAME(pa_stream_disconnect)(stream); |
332 SDL_NAME(pa_stream_unref)(stream); | |
3939
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
333 stream = NULL; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
334 } |
4216 | 335 if (context != NULL) { |
336 SDL_NAME(pa_context_disconnect)(context); | |
337 SDL_NAME(pa_context_unref)(context); | |
338 context = NULL; | |
339 } | |
340 if (mainloop != NULL) { | |
341 SDL_NAME(pa_mainloop_free)(mainloop); | |
342 mainloop = NULL; | |
343 } | |
3939
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
344 } |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
345 |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
346 /* Try to get the name of the program */ |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
347 static char *get_progname(void) |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
348 { |
4344
14f95e514408
patch-pulse (from ahoka@NetBSD.org):
Sam Lantinga <slouken@libsdl.org>
parents:
4216
diff
changeset
|
349 #ifdef __LINUX__ |
3939
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
350 char *progname = NULL; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
351 FILE *fp; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
352 static char temp[BUFSIZ]; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
353 |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
354 SDL_snprintf(temp, SDL_arraysize(temp), "/proc/%d/cmdline", getpid()); |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
355 fp = fopen(temp, "r"); |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
356 if ( fp != NULL ) { |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
357 if ( fgets(temp, sizeof(temp)-1, fp) ) { |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
358 progname = SDL_strrchr(temp, '/'); |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
359 if ( progname == NULL ) { |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
360 progname = temp; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
361 } else { |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
362 progname = progname+1; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
363 } |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
364 } |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
365 fclose(fp); |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
366 } |
4344
14f95e514408
patch-pulse (from ahoka@NetBSD.org):
Sam Lantinga <slouken@libsdl.org>
parents:
4216
diff
changeset
|
367 return(progname); |
14f95e514408
patch-pulse (from ahoka@NetBSD.org):
Sam Lantinga <slouken@libsdl.org>
parents:
4216
diff
changeset
|
368 #elif defined(__NetBSD__) |
14f95e514408
patch-pulse (from ahoka@NetBSD.org):
Sam Lantinga <slouken@libsdl.org>
parents:
4216
diff
changeset
|
369 return getprogname(); |
14f95e514408
patch-pulse (from ahoka@NetBSD.org):
Sam Lantinga <slouken@libsdl.org>
parents:
4216
diff
changeset
|
370 #else |
14f95e514408
patch-pulse (from ahoka@NetBSD.org):
Sam Lantinga <slouken@libsdl.org>
parents:
4216
diff
changeset
|
371 return("unknown"); |
3939
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
372 #endif |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
373 } |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
374 |
4216 | 375 static void stream_drain_complete(pa_stream *s, int success, void *userdata) { |
376 } | |
377 | |
378 static void PULSE_WaitDone(_THIS) | |
379 { | |
380 pa_operation *o; | |
381 | |
382 o = SDL_NAME(pa_stream_drain)(stream, stream_drain_complete, NULL); | |
383 if (!o) | |
384 return; | |
385 | |
386 while (SDL_NAME(pa_operation_get_state)(o) != PA_OPERATION_DONE) { | |
387 if (SDL_NAME(pa_context_get_state)(context) != PA_CONTEXT_READY || | |
388 SDL_NAME(pa_stream_get_state)(stream) != PA_STREAM_READY || | |
389 SDL_NAME(pa_mainloop_iterate)(mainloop, 1, NULL) < 0) { | |
390 SDL_NAME(pa_operation_cancel)(o); | |
391 break; | |
392 } | |
393 } | |
394 SDL_NAME(pa_operation_unref)(o); | |
395 } | |
396 | |
3939
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
397 static int PULSE_OpenAudio(_THIS, SDL_AudioSpec *spec) |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
398 { |
4216 | 399 int state; |
3939
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
400 Uint16 test_format; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
401 pa_sample_spec paspec; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
402 pa_buffer_attr paattr; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
403 pa_channel_map pacmap; |
4216 | 404 pa_stream_flags_t flags = 0; |
4211 | 405 |
3939
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
406 paspec.format = PA_SAMPLE_INVALID; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
407 for ( test_format = SDL_FirstAudioFormat(spec->format); test_format; ) { |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
408 switch ( test_format ) { |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
409 case AUDIO_U8: |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
410 paspec.format = PA_SAMPLE_U8; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
411 break; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
412 case AUDIO_S16LSB: |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
413 paspec.format = PA_SAMPLE_S16LE; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
414 break; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
415 case AUDIO_S16MSB: |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
416 paspec.format = PA_SAMPLE_S16BE; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
417 break; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
418 } |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
419 if ( paspec.format != PA_SAMPLE_INVALID ) |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
420 break; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
421 } |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
422 if (paspec.format == PA_SAMPLE_INVALID ) { |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
423 SDL_SetError("Couldn't find any suitable audio formats"); |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
424 return(-1); |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
425 } |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
426 spec->format = test_format; |
4211 | 427 |
3939
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
428 paspec.channels = spec->channels; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
429 paspec.rate = spec->freq; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
430 |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
431 /* Calculate the final parameters for this audio specification */ |
4216 | 432 #ifdef PA_STREAM_ADJUST_LATENCY |
433 spec->samples /= 2; /* Mix in smaller chunck to avoid underruns */ | |
434 #endif | |
3939
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
435 SDL_CalculateAudioSpec(spec); |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
436 |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
437 /* Allocate mixing buffer */ |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
438 mixlen = spec->size; |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
439 mixbuf = (Uint8 *)SDL_AllocAudioMem(mixlen); |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
440 if ( mixbuf == NULL ) { |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
441 return(-1); |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
442 } |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
443 SDL_memset(mixbuf, spec->silence, spec->size); |
4211 | 444 |
3939
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
445 /* Reduced prebuffering compared to the defaults. */ |
4216 | 446 #ifdef PA_STREAM_ADJUST_LATENCY |
447 paattr.tlength = mixlen * 4; /* 2x original requested bufsize */ | |
448 paattr.prebuf = -1; | |
449 paattr.maxlength = -1; | |
450 paattr.minreq = mixlen; /* -1 can lead to pa_stream_writable_size() | |
451 >= mixlen never becoming true */ | |
452 flags = PA_STREAM_ADJUST_LATENCY; | |
453 #else | |
4211 | 454 paattr.tlength = mixlen*2; |
455 paattr.prebuf = mixlen*2; | |
456 paattr.maxlength = mixlen*2; | |
4216 | 457 paattr.minreq = mixlen; |
458 #endif | |
4211 | 459 |
3939
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
460 /* The SDL ALSA output hints us that we use Windows' channel mapping */ |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
461 /* http://bugzilla.libsdl.org/show_bug.cgi?id=110 */ |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
462 SDL_NAME(pa_channel_map_init_auto)( |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
463 &pacmap, spec->channels, PA_CHANNEL_MAP_WAVEEX); |
4211 | 464 |
4216 | 465 /* Set up a new main loop */ |
466 if (!(mainloop = SDL_NAME(pa_mainloop_new)())) { | |
467 PULSE_CloseAudio(this); | |
468 SDL_SetError("pa_mainloop_new() failed"); | |
469 return(-1); | |
470 } | |
471 | |
472 mainloop_api = SDL_NAME(pa_mainloop_get_api)(mainloop); | |
473 if (!(context = SDL_NAME(pa_context_new)(mainloop_api, get_progname()))) { | |
474 PULSE_CloseAudio(this); | |
475 SDL_SetError("pa_context_new() failed"); | |
476 return(-1); | |
477 } | |
478 | |
3939
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
479 /* Connect to the PulseAudio server */ |
4216 | 480 if (SDL_NAME(pa_context_connect)(context, NULL, 0, NULL) < 0) { |
481 PULSE_CloseAudio(this); | |
482 SDL_SetError("Could not setup connection to PulseAudio"); | |
483 return(-1); | |
484 } | |
485 | |
486 do { | |
487 if (SDL_NAME(pa_mainloop_iterate)(mainloop, 1, NULL) < 0) { | |
488 PULSE_CloseAudio(this); | |
489 SDL_SetError("pa_mainloop_iterate() failed"); | |
490 return(-1); | |
491 } | |
492 state = SDL_NAME(pa_context_get_state)(context); | |
493 if (!PA_CONTEXT_IS_GOOD(state)) { | |
494 PULSE_CloseAudio(this); | |
495 SDL_SetError("Could not connect to PulseAudio"); | |
496 return(-1); | |
497 } | |
498 } while (state != PA_CONTEXT_READY); | |
499 | |
500 stream = SDL_NAME(pa_stream_new)( | |
501 context, | |
3939
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
502 "Simple DirectMedia Layer", /* stream description */ |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
503 &paspec, /* sample format spec */ |
4216 | 504 &pacmap /* channel map */ |
3939
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
505 ); |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
506 if ( stream == NULL ) { |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
507 PULSE_CloseAudio(this); |
4216 | 508 SDL_SetError("Could not setup PulseAudio stream"); |
509 return(-1); | |
510 } | |
511 | |
512 if (SDL_NAME(pa_stream_connect_playback)(stream, NULL, &paattr, flags, | |
513 NULL, NULL) < 0) { | |
514 PULSE_CloseAudio(this); | |
515 SDL_SetError("Could not connect PulseAudio stream"); | |
3939
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
516 return(-1); |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
517 } |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
518 |
4216 | 519 do { |
520 if (SDL_NAME(pa_mainloop_iterate)(mainloop, 1, NULL) < 0) { | |
521 PULSE_CloseAudio(this); | |
522 SDL_SetError("pa_mainloop_iterate() failed"); | |
523 return(-1); | |
524 } | |
525 state = SDL_NAME(pa_stream_get_state)(stream); | |
526 if (!PA_STREAM_IS_GOOD(state)) { | |
527 PULSE_CloseAudio(this); | |
528 SDL_SetError("Could not create to PulseAudio stream"); | |
529 return(-1); | |
530 } | |
531 } while (state != PA_STREAM_READY); | |
4211 | 532 |
3939
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
533 return(0); |
42e83d81224b
Committed PulseAudio driver. Thanks, Stephan!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
534 } |