Mercurial > sdl-ios-xcode
annotate sdl.m4 @ 4216:5b99971a27b4 SDL-1.2
Fixed bug #698
Hans de Goede 2009-02-13 01:10:52 PST
Since the new "glitch free" version of pulseaudio (used in Fedora 10 amongst
others), the sound of SDL using apps (like a simple playmus call) has been
crackling.
While looking in to fixing this I noticed that the current pulseaudio code in
SDL uses pa_simple. However pa_simple uses a thread to pump pulseaudio events
and ipc, given that SDL already has its own thread for audio handling this is
clearly suboptimal, leading to unnecessary context switching IPC, etc. Also
pa_simple does not allow one to implement the WaitAudio() callback for SDL
audiodrivers properly.
Given that my work is mostly a rewrite (although some original pieces remain)
I'm attaching the new .c and .h file, as that is easier to review then the huge
diff.
Let me know if you also want the diff.
This new version has the following features:
-no longer use an additional thread next to the SDL sound thread
-do not crackle with glitch free audio
-when used with a newer pulse, which does glitch free audio, the total latency
is
the same as with the alsa driver
-proper WaitAudio() implementation, saving another mixlen worth of latency
-adds a WaitDone() implementation
This patch has been written in consultancy with Lennart Poetering (the
pulseaudio author) and has been reviewed by him for correct use of the pa API.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Mon, 21 Sep 2009 09:27:08 +0000 |
parents | cd98d1dc385c |
children | 3d75acd08339 7bb8f748a14d |
rev | line source |
---|---|
0 | 1 # Configure paths for SDL |
2 # Sam Lantinga 9/21/99 | |
3 # stolen from Manish Singh | |
4 # stolen back from Frank Belew | |
5 # stolen from Manish Singh | |
6 # Shamelessly stolen from Owen Taylor | |
7 | |
8 dnl AM_PATH_SDL([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) | |
9 dnl Test for SDL, and define SDL_CFLAGS and SDL_LIBS | |
10 dnl | |
794
a5defa3b93e1
Updated for the latest version of automake
Sam Lantinga <slouken@libsdl.org>
parents:
489
diff
changeset
|
11 AC_DEFUN([AM_PATH_SDL], |
0 | 12 [dnl |
13 dnl Get the cflags and libraries from the sdl-config script | |
14 dnl | |
15 AC_ARG_WITH(sdl-prefix,[ --with-sdl-prefix=PFX Prefix where SDL is installed (optional)], | |
16 sdl_prefix="$withval", sdl_prefix="") | |
17 AC_ARG_WITH(sdl-exec-prefix,[ --with-sdl-exec-prefix=PFX Exec prefix where SDL is installed (optional)], | |
18 sdl_exec_prefix="$withval", sdl_exec_prefix="") | |
19 AC_ARG_ENABLE(sdltest, [ --disable-sdltest Do not try to compile and run a test SDL program], | |
20 , enable_sdltest=yes) | |
21 | |
22 if test x$sdl_exec_prefix != x ; then | |
4121 | 23 sdl_config_args="$sdl_config_args --exec-prefix=$sdl_exec_prefix" |
1755
91063c450171
Don't add NONE/bin to the path - inexplicably fixes building on mingw+msys, apparently
Sam Lantinga <slouken@libsdl.org>
parents:
1550
diff
changeset
|
24 if test x${SDL_CONFIG+set} != xset ; then |
91063c450171
Don't add NONE/bin to the path - inexplicably fixes building on mingw+msys, apparently
Sam Lantinga <slouken@libsdl.org>
parents:
1550
diff
changeset
|
25 SDL_CONFIG=$sdl_exec_prefix/bin/sdl-config |
91063c450171
Don't add NONE/bin to the path - inexplicably fixes building on mingw+msys, apparently
Sam Lantinga <slouken@libsdl.org>
parents:
1550
diff
changeset
|
26 fi |
0 | 27 fi |
28 if test x$sdl_prefix != x ; then | |
4121 | 29 sdl_config_args="$sdl_config_args --prefix=$sdl_prefix" |
1755
91063c450171
Don't add NONE/bin to the path - inexplicably fixes building on mingw+msys, apparently
Sam Lantinga <slouken@libsdl.org>
parents:
1550
diff
changeset
|
30 if test x${SDL_CONFIG+set} != xset ; then |
91063c450171
Don't add NONE/bin to the path - inexplicably fixes building on mingw+msys, apparently
Sam Lantinga <slouken@libsdl.org>
parents:
1550
diff
changeset
|
31 SDL_CONFIG=$sdl_prefix/bin/sdl-config |
91063c450171
Don't add NONE/bin to the path - inexplicably fixes building on mingw+msys, apparently
Sam Lantinga <slouken@libsdl.org>
parents:
1550
diff
changeset
|
32 fi |
0 | 33 fi |
34 | |
4135
cd98d1dc385c
Damien Carbery fixed bug #542
Sam Lantinga <slouken@libsdl.org>
parents:
4121
diff
changeset
|
35 as_save_PATH="$PATH" |
1755
91063c450171
Don't add NONE/bin to the path - inexplicably fixes building on mingw+msys, apparently
Sam Lantinga <slouken@libsdl.org>
parents:
1550
diff
changeset
|
36 if test "x$prefix" != xNONE; then |
91063c450171
Don't add NONE/bin to the path - inexplicably fixes building on mingw+msys, apparently
Sam Lantinga <slouken@libsdl.org>
parents:
1550
diff
changeset
|
37 PATH="$prefix/bin:$prefix/usr/bin:$PATH" |
91063c450171
Don't add NONE/bin to the path - inexplicably fixes building on mingw+msys, apparently
Sam Lantinga <slouken@libsdl.org>
parents:
1550
diff
changeset
|
38 fi |
489
d90349051cab
Fixed path problem with sdl.m4 macro file
Sam Lantinga <slouken@libsdl.org>
parents:
452
diff
changeset
|
39 AC_PATH_PROG(SDL_CONFIG, sdl-config, no, [$PATH]) |
4135
cd98d1dc385c
Damien Carbery fixed bug #542
Sam Lantinga <slouken@libsdl.org>
parents:
4121
diff
changeset
|
40 PATH="$as_save_PATH" |
0 | 41 min_sdl_version=ifelse([$1], ,0.11.0,$1) |
42 AC_MSG_CHECKING(for SDL - version >= $min_sdl_version) | |
43 no_sdl="" | |
44 if test "$SDL_CONFIG" = "no" ; then | |
45 no_sdl=yes | |
46 else | |
4121 | 47 SDL_CFLAGS=`$SDL_CONFIG $sdl_config_args --cflags` |
48 SDL_LIBS=`$SDL_CONFIG $sdl_config_args --libs` | |
0 | 49 |
4121 | 50 sdl_major_version=`$SDL_CONFIG $sdl_config_args --version | \ |
0 | 51 sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` |
4121 | 52 sdl_minor_version=`$SDL_CONFIG $sdl_config_args --version | \ |
0 | 53 sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` |
54 sdl_micro_version=`$SDL_CONFIG $sdl_config_args --version | \ | |
55 sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` | |
56 if test "x$enable_sdltest" = "xyes" ; then | |
57 ac_save_CFLAGS="$CFLAGS" | |
1118
65f4b2dd46b7
Date: Wed, 17 Aug 2005 11:23:40 -0400
Ryan C. Gordon <icculus@icculus.org>
parents:
794
diff
changeset
|
58 ac_save_CXXFLAGS="$CXXFLAGS" |
0 | 59 ac_save_LIBS="$LIBS" |
60 CFLAGS="$CFLAGS $SDL_CFLAGS" | |
1118
65f4b2dd46b7
Date: Wed, 17 Aug 2005 11:23:40 -0400
Ryan C. Gordon <icculus@icculus.org>
parents:
794
diff
changeset
|
61 CXXFLAGS="$CXXFLAGS $SDL_CFLAGS" |
0 | 62 LIBS="$LIBS $SDL_LIBS" |
63 dnl | |
64 dnl Now check if the installed SDL is sufficiently new. (Also sanity | |
65 dnl checks the results of sdl-config to some extent | |
66 dnl | |
67 rm -f conf.sdltest | |
68 AC_TRY_RUN([ | |
69 #include <stdio.h> | |
70 #include <stdlib.h> | |
71 #include <string.h> | |
72 #include "SDL.h" | |
73 | |
74 char* | |
75 my_strdup (char *str) | |
76 { | |
77 char *new_str; | |
78 | |
79 if (str) | |
80 { | |
81 new_str = (char *)malloc ((strlen (str) + 1) * sizeof(char)); | |
82 strcpy (new_str, str); | |
83 } | |
84 else | |
85 new_str = NULL; | |
86 | |
87 return new_str; | |
88 } | |
89 | |
90 int main (int argc, char *argv[]) | |
91 { | |
92 int major, minor, micro; | |
93 char *tmp_version; | |
94 | |
95 /* This hangs on some systems (?) | |
96 system ("touch conf.sdltest"); | |
97 */ | |
98 { FILE *fp = fopen("conf.sdltest", "a"); if ( fp ) fclose(fp); } | |
99 | |
100 /* HP/UX 9 (%@#!) writes to sscanf strings */ | |
101 tmp_version = my_strdup("$min_sdl_version"); | |
102 if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { | |
103 printf("%s, bad version string\n", "$min_sdl_version"); | |
104 exit(1); | |
105 } | |
106 | |
107 if (($sdl_major_version > major) || | |
108 (($sdl_major_version == major) && ($sdl_minor_version > minor)) || | |
109 (($sdl_major_version == major) && ($sdl_minor_version == minor) && ($sdl_micro_version >= micro))) | |
110 { | |
111 return 0; | |
112 } | |
113 else | |
114 { | |
115 printf("\n*** 'sdl-config --version' returned %d.%d.%d, but the minimum version\n", $sdl_major_version, $sdl_minor_version, $sdl_micro_version); | |
116 printf("*** of SDL required is %d.%d.%d. If sdl-config is correct, then it is\n", major, minor, micro); | |
117 printf("*** best to upgrade to the required version.\n"); | |
118 printf("*** If sdl-config was wrong, set the environment variable SDL_CONFIG\n"); | |
119 printf("*** to point to the correct copy of sdl-config, and remove the file\n"); | |
120 printf("*** config.cache before re-running configure\n"); | |
121 return 1; | |
122 } | |
123 } | |
124 | |
125 ],, no_sdl=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) | |
126 CFLAGS="$ac_save_CFLAGS" | |
1550 | 127 CXXFLAGS="$ac_save_CXXFLAGS" |
0 | 128 LIBS="$ac_save_LIBS" |
129 fi | |
130 fi | |
131 if test "x$no_sdl" = x ; then | |
132 AC_MSG_RESULT(yes) | |
133 ifelse([$2], , :, [$2]) | |
134 else | |
135 AC_MSG_RESULT(no) | |
136 if test "$SDL_CONFIG" = "no" ; then | |
137 echo "*** The sdl-config script installed by SDL could not be found" | |
138 echo "*** If SDL was installed in PREFIX, make sure PREFIX/bin is in" | |
139 echo "*** your path, or set the SDL_CONFIG environment variable to the" | |
140 echo "*** full path to sdl-config." | |
141 else | |
142 if test -f conf.sdltest ; then | |
143 : | |
144 else | |
145 echo "*** Could not run SDL test program, checking why..." | |
146 CFLAGS="$CFLAGS $SDL_CFLAGS" | |
1118
65f4b2dd46b7
Date: Wed, 17 Aug 2005 11:23:40 -0400
Ryan C. Gordon <icculus@icculus.org>
parents:
794
diff
changeset
|
147 CXXFLAGS="$CXXFLAGS $SDL_CFLAGS" |
0 | 148 LIBS="$LIBS $SDL_LIBS" |
149 AC_TRY_LINK([ | |
150 #include <stdio.h> | |
151 #include "SDL.h" | |
1
cf2af46e9e2a
Changes since SDL 1.2.0 release
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
152 |
cf2af46e9e2a
Changes since SDL 1.2.0 release
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
153 int main(int argc, char *argv[]) |
cf2af46e9e2a
Changes since SDL 1.2.0 release
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
154 { return 0; } |
cf2af46e9e2a
Changes since SDL 1.2.0 release
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
155 #undef main |
cf2af46e9e2a
Changes since SDL 1.2.0 release
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
156 #define main K_and_R_C_main |
0 | 157 ], [ return 0; ], |
158 [ echo "*** The test program compiled, but did not run. This usually means" | |
159 echo "*** that the run-time linker is not finding SDL or finding the wrong" | |
160 echo "*** version of SDL. If it is not finding SDL, you'll need to set your" | |
161 echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" | |
162 echo "*** to the installed location Also, make sure you have run ldconfig if that" | |
163 echo "*** is required on your system" | |
164 echo "***" | |
165 echo "*** If you have an old version installed, it is best to remove it, although" | |
166 echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"], | |
167 [ echo "*** The test program failed to compile or link. See the file config.log for the" | |
168 echo "*** exact error that occured. This usually means SDL was incorrectly installed" | |
169 echo "*** or that you have moved SDL since it was installed. In the latter case, you" | |
170 echo "*** may want to edit the sdl-config script: $SDL_CONFIG" ]) | |
171 CFLAGS="$ac_save_CFLAGS" | |
1118
65f4b2dd46b7
Date: Wed, 17 Aug 2005 11:23:40 -0400
Ryan C. Gordon <icculus@icculus.org>
parents:
794
diff
changeset
|
172 CXXFLAGS="$ac_save_CXXFLAGS" |
0 | 173 LIBS="$ac_save_LIBS" |
174 fi | |
175 fi | |
176 SDL_CFLAGS="" | |
177 SDL_LIBS="" | |
178 ifelse([$3], , :, [$3]) | |
179 fi | |
180 AC_SUBST(SDL_CFLAGS) | |
181 AC_SUBST(SDL_LIBS) | |
182 rm -f conf.sdltest | |
183 ]) |