Mercurial > sdl-ios-xcode
annotate test/loopwave.c @ 4207:a673f44949d6 SDL-1.2
Fixed bug #562
this patch by Diego Pettenò <flameeyes@gentoo.org> for SDL-1.2:
The attached patch applies over latest ~arch SDL version, and allows to use the
xinerama support to launch an application full screened on the head "0".
The SDL_VIDEO_FULLSCREEN_HEAD environment variable sets the head on which the
full screen will be displayed, but if you set it to 0, the code simply ignores
it as unset. My patch changes the unset value to -1, so that the 0 value can be
used correctly. Without this, trying to get fullscreen on head 0 would get the
same result than not having xinerama enabled at all.
http://sources.gentoo.org/media-libs/libsdl/files/libsdl-1.2.11-xinerama-head-0.patch
SDL-1.3 doesnt seem to have any code like this, but it's still good for SDL-1.2
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Mon, 21 Sep 2009 07:20:51 +0000 |
parents | e905bb5d9bc3 |
children |
rev | line source |
---|---|
0 | 1 |
2 /* Program to load a wave file and loop playing it using SDL sound */ | |
3 | |
4 /* loopwaves.c is much more robust in handling WAVE files -- | |
5 This is only for simple WAVEs | |
6 */ | |
1463
0394f8ebc42d
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
1151
diff
changeset
|
7 #include "SDL_config.h" |
0 | 8 |
9 #include <stdio.h> | |
10 #include <stdlib.h> | |
1463
0394f8ebc42d
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
1151
diff
changeset
|
11 |
0394f8ebc42d
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
1151
diff
changeset
|
12 #if HAVE_SIGNAL_H |
0 | 13 #include <signal.h> |
1463
0394f8ebc42d
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
1151
diff
changeset
|
14 #endif |
0 | 15 |
16 #include "SDL.h" | |
17 #include "SDL_audio.h" | |
18 | |
19 struct { | |
20 SDL_AudioSpec spec; | |
21 Uint8 *sound; /* Pointer to wave data */ | |
22 Uint32 soundlen; /* Length of wave data */ | |
23 int soundpos; /* Current play position */ | |
24 } wave; | |
25 | |
1151
be9c9c8f6d53
Removed atexit() from most of the test programs; atexit(SDL_Quit) isn't safe
Ryan C. Gordon <icculus@icculus.org>
parents:
0
diff
changeset
|
26 |
be9c9c8f6d53
Removed atexit() from most of the test programs; atexit(SDL_Quit) isn't safe
Ryan C. Gordon <icculus@icculus.org>
parents:
0
diff
changeset
|
27 /* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ |
be9c9c8f6d53
Removed atexit() from most of the test programs; atexit(SDL_Quit) isn't safe
Ryan C. Gordon <icculus@icculus.org>
parents:
0
diff
changeset
|
28 static void quit(int rc) |
be9c9c8f6d53
Removed atexit() from most of the test programs; atexit(SDL_Quit) isn't safe
Ryan C. Gordon <icculus@icculus.org>
parents:
0
diff
changeset
|
29 { |
be9c9c8f6d53
Removed atexit() from most of the test programs; atexit(SDL_Quit) isn't safe
Ryan C. Gordon <icculus@icculus.org>
parents:
0
diff
changeset
|
30 SDL_Quit(); |
be9c9c8f6d53
Removed atexit() from most of the test programs; atexit(SDL_Quit) isn't safe
Ryan C. Gordon <icculus@icculus.org>
parents:
0
diff
changeset
|
31 exit(rc); |
be9c9c8f6d53
Removed atexit() from most of the test programs; atexit(SDL_Quit) isn't safe
Ryan C. Gordon <icculus@icculus.org>
parents:
0
diff
changeset
|
32 } |
be9c9c8f6d53
Removed atexit() from most of the test programs; atexit(SDL_Quit) isn't safe
Ryan C. Gordon <icculus@icculus.org>
parents:
0
diff
changeset
|
33 |
be9c9c8f6d53
Removed atexit() from most of the test programs; atexit(SDL_Quit) isn't safe
Ryan C. Gordon <icculus@icculus.org>
parents:
0
diff
changeset
|
34 |
1769 | 35 void SDLCALL fillerup(void *unused, Uint8 *stream, int len) |
0 | 36 { |
37 Uint8 *waveptr; | |
38 int waveleft; | |
39 | |
40 /* Set up the pointers */ | |
41 waveptr = wave.sound + wave.soundpos; | |
42 waveleft = wave.soundlen - wave.soundpos; | |
43 | |
44 /* Go! */ | |
45 while ( waveleft <= len ) { | |
4002
e905bb5d9bc3
Fixed our own test app. :)
Ryan C. Gordon <icculus@icculus.org>
parents:
1769
diff
changeset
|
46 SDL_memcpy(stream, waveptr, waveleft); |
0 | 47 stream += waveleft; |
48 len -= waveleft; | |
49 waveptr = wave.sound; | |
50 waveleft = wave.soundlen; | |
51 wave.soundpos = 0; | |
52 } | |
4002
e905bb5d9bc3
Fixed our own test app. :)
Ryan C. Gordon <icculus@icculus.org>
parents:
1769
diff
changeset
|
53 SDL_memcpy(stream, waveptr, len); |
0 | 54 wave.soundpos += len; |
55 } | |
56 | |
57 static int done = 0; | |
58 void poked(int sig) | |
59 { | |
60 done = 1; | |
61 } | |
62 | |
63 int main(int argc, char *argv[]) | |
64 { | |
65 char name[32]; | |
66 | |
67 /* Load the SDL library */ | |
68 if ( SDL_Init(SDL_INIT_AUDIO) < 0 ) { | |
69 fprintf(stderr, "Couldn't initialize SDL: %s\n",SDL_GetError()); | |
1151
be9c9c8f6d53
Removed atexit() from most of the test programs; atexit(SDL_Quit) isn't safe
Ryan C. Gordon <icculus@icculus.org>
parents:
0
diff
changeset
|
70 return(1); |
0 | 71 } |
72 if ( argv[1] == NULL ) { | |
1463
0394f8ebc42d
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
1151
diff
changeset
|
73 argv[1] = "sample.wav"; |
0 | 74 } |
75 /* Load the wave file into memory */ | |
76 if ( SDL_LoadWAV(argv[1], | |
77 &wave.spec, &wave.sound, &wave.soundlen) == NULL ) { | |
78 fprintf(stderr, "Couldn't load %s: %s\n", | |
79 argv[1], SDL_GetError()); | |
1151
be9c9c8f6d53
Removed atexit() from most of the test programs; atexit(SDL_Quit) isn't safe
Ryan C. Gordon <icculus@icculus.org>
parents:
0
diff
changeset
|
80 quit(1); |
0 | 81 } |
1463
0394f8ebc42d
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
1151
diff
changeset
|
82 |
0 | 83 wave.spec.callback = fillerup; |
1463
0394f8ebc42d
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
1151
diff
changeset
|
84 #if HAVE_SIGNAL_H |
0 | 85 /* Set the signals */ |
86 #ifdef SIGHUP | |
87 signal(SIGHUP, poked); | |
88 #endif | |
89 signal(SIGINT, poked); | |
90 #ifdef SIGQUIT | |
91 signal(SIGQUIT, poked); | |
92 #endif | |
93 signal(SIGTERM, poked); | |
1463
0394f8ebc42d
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
1151
diff
changeset
|
94 #endif /* HAVE_SIGNAL_H */ |
0 | 95 |
96 /* Initialize fillerup() variables */ | |
97 if ( SDL_OpenAudio(&wave.spec, NULL) < 0 ) { | |
98 fprintf(stderr, "Couldn't open audio: %s\n", SDL_GetError()); | |
99 SDL_FreeWAV(wave.sound); | |
1151
be9c9c8f6d53
Removed atexit() from most of the test programs; atexit(SDL_Quit) isn't safe
Ryan C. Gordon <icculus@icculus.org>
parents:
0
diff
changeset
|
100 quit(2); |
0 | 101 } |
102 SDL_PauseAudio(0); | |
103 | |
104 /* Let the audio run */ | |
105 printf("Using audio driver: %s\n", SDL_AudioDriverName(name, 32)); | |
106 while ( ! done && (SDL_GetAudioStatus() == SDL_AUDIO_PLAYING) ) | |
107 SDL_Delay(1000); | |
108 | |
109 /* Clean up on signal */ | |
110 SDL_CloseAudio(); | |
111 SDL_FreeWAV(wave.sound); | |
1151
be9c9c8f6d53
Removed atexit() from most of the test programs; atexit(SDL_Quit) isn't safe
Ryan C. Gordon <icculus@icculus.org>
parents:
0
diff
changeset
|
112 SDL_Quit(); |
0 | 113 return(0); |
114 } |