annotate src/audio/nto/SDL_nto_audio.c @ 1348:40d0975c1769

Date: Mon, 6 Feb 2006 11:41:04 -0500 From: "mystml@adinet.com.uy" Subject: [SDL] ALT-F4 using DirectX My game isn't getting SDL_QUIT when I press ALT-F4 using the DirectX driver; it does get SDL_QUIT when I press the red X in the window. I tracked this down to DX5_HandleMessage() in SDL_dx5events.c; WM_SYSKEYDOWN is being trapped and ignored which causes Windows not to post a WM_CLOSE, hence no SDL_QUIT is being generated. The relevant code is this : /* The keyboard is handled via DirectInput */ case WM_SYSKEYUP: case WM_SYSKEYDOWN: case WM_KEYUP: case WM_KEYDOWN: { /* Ignore windows keyboard messages */; } return(0); If I comment the WM_SYSKEYDOWN case, it falls through DefWindowProc() and ALT-F4 starts working again. I'm not sure about the best way to fix this. One option is handling ALT-F4 as a particular case somehow, but doesn't sound good. Another option would be to handle WM_SYSKEYDOWN separately and breaking instead of returning 0, so processing falls through and goes to DefWindowProc which does The Right Thing (TM). This seems to be the minimal change that makes ALT-F4 work and normal keyboard input continues to work. Does this sound reasonable? Am I overlooking anything? Do I submit a patch? --Gabriel
author Sam Lantinga <slouken@libsdl.org>
date Wed, 08 Feb 2006 17:19:43 +0000
parents 604d73db6802
children c71e05b4dc2e
rev   line source
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1 /*
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
2 SDL - Simple DirectMedia Layer
769
b8d311d90021 Updated copyright information for 2004 (Happy New Year!)
Sam Lantinga <slouken@libsdl.org>
parents: 718
diff changeset
3 Copyright (C) 1997-2004 Sam Lantinga
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
4
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
5 This library is free software; you can redistribute it and/or
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
6 modify it under the terms of the GNU Library General Public
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
7 License as published by the Free Software Foundation; either
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
8 version 2 of the License, or (at your option) any later version.
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
9
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
10 This library is distributed in the hope that it will be useful,
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
13 Library General Public License for more details.
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
14
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
15 You should have received a copy of the GNU Library General Public
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
16 License along with this library; if not, write to the Free
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
18
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
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
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
21 */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
22
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
23 #include <errno.h>
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
24 #include <unistd.h>
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
25 #include <fcntl.h>
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
26 #include <signal.h>
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
27 #include <sys/types.h>
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
28 #include <sys/time.h>
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
29 #include <sched.h>
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
30 #include <sys/select.h>
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
31 #include <sys/neutrino.h>
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
32 #include <sys/asoundlib.h>
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
33
1338
604d73db6802 Removed uses of stdlib.h and string.h
Sam Lantinga <slouken@libsdl.org>
parents: 1336
diff changeset
34 #include "SDL_stdlib.h"
604d73db6802 Removed uses of stdlib.h and string.h
Sam Lantinga <slouken@libsdl.org>
parents: 1336
diff changeset
35 #include "SDL_string.h"
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
36 #include "SDL_audio.h"
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
37 #include "SDL_error.h"
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
38 #include "SDL_audiomem.h"
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
39 #include "SDL_audio_c.h"
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
40 #include "SDL_timer.h"
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
41 #include "SDL_nto_audio.h"
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
42
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
43 /* The tag name used by NTO audio */
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
44 #define DRIVER_NAME "qsa-nto"
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
45
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
46 /* default channel communication parameters */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
47 #define DEFAULT_CPARAMS_RATE 22050
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
48 #define DEFAULT_CPARAMS_VOICES 1
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
49 /* FIXME: need to add in the near future flexible logic with frag_size and frags count */
418
337f3ec4c385 Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents: 297
diff changeset
50 #define DEFAULT_CPARAMS_FRAG_SIZE 4096
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
51 #define DEFAULT_CPARAMS_FRAGS_MIN 1
283
3d8b6b9f1e18 Date: Mon, 18 Feb 2002 16:46:59 +1200
Sam Lantinga <slouken@libsdl.org>
parents: 252
diff changeset
52 #define DEFAULT_CPARAMS_FRAGS_MAX 1
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
53
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
54 /* Open the audio device for playback, and don't block if busy */
418
337f3ec4c385 Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents: 297
diff changeset
55 #define OPEN_FLAGS SND_PCM_OPEN_PLAYBACK
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
56
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
57 #define QSA_NO_WORKAROUNDS 0x00000000
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
58 #define QSA_MMAP_WORKAROUND 0x00000001
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
59
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
60 struct BuggyCards
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
61 {
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
62 char* cardname;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
63 unsigned long bugtype;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
64 };
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
65
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
66 #define QSA_WA_CARDS 3
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
67
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
68 struct BuggyCards buggycards[QSA_WA_CARDS]=
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
69 {
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
70 {"Sound Blaster Live!", QSA_MMAP_WORKAROUND},
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
71 {"Vortex 8820", QSA_MMAP_WORKAROUND},
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
72 {"Vortex 8830", QSA_MMAP_WORKAROUND},
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
73 };
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
74
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
75 /* Audio driver functions */
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
76 static void NTO_ThreadInit(_THIS);
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
77 static int NTO_OpenAudio(_THIS, SDL_AudioSpec* spec);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
78 static void NTO_WaitAudio(_THIS);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
79 static void NTO_PlayAudio(_THIS);
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
80 static Uint8* NTO_GetAudioBuf(_THIS);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
81 static void NTO_CloseAudio(_THIS);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
82
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
83 /* card names check to apply the workarounds */
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
84 static int NTO_CheckBuggyCards(_THIS, unsigned long checkfor)
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
85 {
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
86 char scardname[33];
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
87 int it;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
88
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
89 if (snd_card_get_name(cardno, scardname, 32)<0)
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
90 {
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
91 return 0;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
92 }
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
93
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
94 for (it=0; it<QSA_WA_CARDS; it++)
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
95 {
1336
3692456e7b0f Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
96 if (SDL_strcmp(buggycards[it].cardname, scardname)==0)
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
97 {
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
98 if (buggycards[it].bugtype==checkfor)
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
99 {
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
100 return 1;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
101 }
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
102 }
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
103 }
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
104
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
105 return 0;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
106 }
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
107
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
108 static void NTO_ThreadInit(_THIS)
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
109 {
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
110 int status;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
111 struct sched_param param;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
112
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
113 /* increasing default 10 priority to 25 to avoid jerky sound */
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
114 status=SchedGet(0, 0, &param);
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
115 param.sched_priority=param.sched_curpriority+15;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
116 status=SchedSet(0, 0, SCHED_NOCHANGE, &param);
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
117 }
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
118
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
119 /* PCM transfer channel parameters initialize function */
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
120 static void NTO_InitAudioParams(snd_pcm_channel_params_t* cpars)
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
121 {
1336
3692456e7b0f Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
122 SDL_memset(cpars, 0, sizeof(snd_pcm_channel_params_t));
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
123
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
124 cpars->channel = SND_PCM_CHANNEL_PLAYBACK;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
125 cpars->mode = SND_PCM_MODE_BLOCK;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
126 cpars->start_mode = SND_PCM_START_DATA;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
127 cpars->stop_mode = SND_PCM_STOP_STOP;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
128 cpars->format.format = SND_PCM_SFMT_S16_LE;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
129 cpars->format.interleave = 1;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
130 cpars->format.rate = DEFAULT_CPARAMS_RATE;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
131 cpars->format.voices = DEFAULT_CPARAMS_VOICES;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
132 cpars->buf.block.frag_size = DEFAULT_CPARAMS_FRAG_SIZE;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
133 cpars->buf.block.frags_min = DEFAULT_CPARAMS_FRAGS_MIN;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
134 cpars->buf.block.frags_max = DEFAULT_CPARAMS_FRAGS_MAX;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
135 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
136
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
137 static int NTO_AudioAvailable(void)
418
337f3ec4c385 Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents: 297
diff changeset
138 {
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
139 /* See if we can open a nonblocking channel.
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
140 Return value '1' means we can.
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
141 Return value '0' means we cannot. */
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
142
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
143 int available;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
144 int rval;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
145 snd_pcm_t* handle;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
146
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
147 available = 0;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
148 handle = NULL;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
149
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
150 rval = snd_pcm_open_preferred(&handle, NULL, NULL, OPEN_FLAGS);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
151
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
152 if (rval >= 0)
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
153 {
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
154 available = 1;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
155
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
156 if ((rval = snd_pcm_close(handle)) < 0)
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
157 {
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
158 SDL_SetError("NTO_AudioAvailable(): snd_pcm_close failed: %s\n", snd_strerror(rval));
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
159 available = 0;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
160 }
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
161 }
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
162 else
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
163 {
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
164 SDL_SetError("NTO_AudioAvailable(): there are no available audio devices.\n");
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
165 }
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
166
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
167 return (available);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
168 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
169
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
170 static void NTO_DeleteAudioDevice(SDL_AudioDevice *device)
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
171 {
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
172 if ((device)&&(device->hidden))
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
173 {
1336
3692456e7b0f Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
174 SDL_free(device->hidden);
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
175 }
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
176 if (device)
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
177 {
1336
3692456e7b0f Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
178 SDL_free(device);
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
179 }
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
180 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
181
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
182 static SDL_AudioDevice* NTO_CreateAudioDevice(int devindex)
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
183 {
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
184 SDL_AudioDevice *this;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
185
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
186 /* Initialize all variables that we clean on shutdown */
1336
3692456e7b0f Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
187 this = (SDL_AudioDevice *)SDL_malloc(sizeof(SDL_AudioDevice));
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
188 if (this)
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
189 {
1336
3692456e7b0f Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
190 SDL_memset(this, 0, sizeof(SDL_AudioDevice));
3692456e7b0f Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
191 this->hidden = (struct SDL_PrivateAudioData *)SDL_malloc(sizeof(struct SDL_PrivateAudioData));
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
192 }
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
193 if ((this == NULL) || (this->hidden == NULL))
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
194 {
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
195 SDL_OutOfMemory();
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
196 if (this)
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
197 {
1336
3692456e7b0f Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
198 SDL_free(this);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
199 }
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
200 return (0);
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
201 }
1336
3692456e7b0f Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
202 SDL_memset(this->hidden, 0, sizeof(struct SDL_PrivateAudioData));
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
203 audio_handle = NULL;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
204
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
205 /* Set the function pointers */
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
206 this->ThreadInit = NTO_ThreadInit;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
207 this->OpenAudio = NTO_OpenAudio;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
208 this->WaitAudio = NTO_WaitAudio;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
209 this->PlayAudio = NTO_PlayAudio;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
210 this->GetAudioBuf = NTO_GetAudioBuf;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
211 this->CloseAudio = NTO_CloseAudio;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
212
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
213 this->free = NTO_DeleteAudioDevice;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
214
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
215 return this;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
216 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
217
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
218 AudioBootStrap QNXNTOAUDIO_bootstrap =
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
219 {
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
220 DRIVER_NAME, "QNX6 QSA-NTO Audio",
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
221 NTO_AudioAvailable,
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
222 NTO_CreateAudioDevice
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
223 };
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
224
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
225 /* This function waits until it is possible to write a full sound buffer */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
226 static void NTO_WaitAudio(_THIS)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
227 {
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
228 fd_set wfds;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
229 int selectret;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
230
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
231 FD_ZERO(&wfds);
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
232 FD_SET(audio_fd, &wfds);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
233
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
234 do {
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
235 selectret=select(audio_fd + 1, NULL, &wfds, NULL, NULL);
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
236 switch (selectret)
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
237 {
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
238 case -1:
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
239 case 0: SDL_SetError("NTO_WaitAudio(): select() failed: %s\n", strerror(errno));
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
240 return;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
241 default: if (FD_ISSET(audio_fd, &wfds))
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
242 {
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
243 return;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
244 }
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
245 break;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
246 }
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
247 } while(1);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
248 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
249
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
250 static void NTO_PlayAudio(_THIS)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
251 {
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
252 int written, rval;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
253 int towrite;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
254 void* pcmbuffer;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
255
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
256 if (!this->enabled)
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
257 {
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
258 return;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
259 }
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
260
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
261 towrite = this->spec.size;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
262 pcmbuffer = pcm_buf;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
263
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
264 /* Write the audio data, checking for EAGAIN (buffer full) and underrun */
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
265 do {
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
266 written = snd_pcm_plugin_write(audio_handle, pcm_buf, towrite);
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
267 if (written != towrite)
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
268 {
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
269 if ((errno == EAGAIN) || (errno == EWOULDBLOCK))
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
270 {
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
271 /* Let a little CPU time go by and try to write again */
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
272 SDL_Delay(1);
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
273 /* if we wrote some data */
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
274 towrite -= written;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
275 pcmbuffer += written * this->spec.channels;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
276 continue;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
277 }
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
278 else
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
279 {
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
280 if ((errno == EINVAL) || (errno == EIO))
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
281 {
1336
3692456e7b0f Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
282 SDL_memset(&cstatus, 0, sizeof(cstatus));
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
283 cstatus.channel = SND_PCM_CHANNEL_PLAYBACK;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
284 if ((rval = snd_pcm_plugin_status(audio_handle, &cstatus)) < 0)
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
285 {
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
286 SDL_SetError("NTO_PlayAudio(): snd_pcm_plugin_status failed: %s\n", snd_strerror(rval));
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
287 return;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
288 }
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
289 if ((cstatus.status == SND_PCM_STATUS_UNDERRUN) || (cstatus.status == SND_PCM_STATUS_READY))
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
290 {
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
291 if ((rval = snd_pcm_plugin_prepare(audio_handle, SND_PCM_CHANNEL_PLAYBACK)) < 0)
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
292 {
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
293 SDL_SetError("NTO_PlayAudio(): snd_pcm_plugin_prepare failed: %s\n", snd_strerror(rval));
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
294 return;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
295 }
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
296 }
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
297 continue;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
298 }
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
299 else
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
300 {
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
301 return;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
302 }
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
303 }
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
304 }
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
305 else
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
306 {
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
307 /* we wrote all remaining data */
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
308 towrite -= written;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
309 pcmbuffer += written * this->spec.channels;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
310 }
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
311 } while ((towrite > 0) && (this->enabled));
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
312
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
313 /* If we couldn't write, assume fatal error for now */
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
314 if (towrite != 0)
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
315 {
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
316 this->enabled = 0;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
317 }
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
318
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
319 return;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
320 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
321
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
322 static Uint8* NTO_GetAudioBuf(_THIS)
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
323 {
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
324 return pcm_buf;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
325 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
326
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
327 static void NTO_CloseAudio(_THIS)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
328 {
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
329 int rval;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
330
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
331 this->enabled = 0;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
332
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
333 if (audio_handle != NULL)
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
334 {
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
335 if ((rval = snd_pcm_plugin_flush(audio_handle, SND_PCM_CHANNEL_PLAYBACK)) < 0)
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
336 {
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
337 SDL_SetError("NTO_CloseAudio(): snd_pcm_plugin_flush failed: %s\n", snd_strerror(rval));
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
338 return;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
339 }
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
340 if ((rval = snd_pcm_close(audio_handle)) < 0)
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
341 {
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
342 SDL_SetError("NTO_CloseAudio(): snd_pcm_close failed: %s\n",snd_strerror(rval));
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
343 return;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
344 }
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
345 audio_handle = NULL;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
346 }
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
347 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
348
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
349 static int NTO_OpenAudio(_THIS, SDL_AudioSpec* spec)
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
350 {
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
351 int rval;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
352 int format;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
353 Uint16 test_format;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
354 int found;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
355
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
356 audio_handle = NULL;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
357 this->enabled = 0;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
358
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
359 if (pcm_buf != NULL)
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
360 {
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
361 SDL_FreeAudioMem(pcm_buf);
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
362 pcm_buf = NULL;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
363 }
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
364
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
365 /* initialize channel transfer parameters to default */
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
366 NTO_InitAudioParams(&cparams);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
367
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
368 /* Open the audio device */
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
369 rval = snd_pcm_open_preferred(&audio_handle, &cardno, &deviceno, OPEN_FLAGS);
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
370 if (rval < 0)
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
371 {
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
372 SDL_SetError("NTO_OpenAudio(): snd_pcm_open failed: %s\n", snd_strerror(rval));
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
373 return (-1);
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
374 }
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
375
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
376 if (!NTO_CheckBuggyCards(this, QSA_MMAP_WORKAROUND))
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
377 {
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
378 /* enable count status parameter */
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
379 if ((rval = snd_pcm_plugin_set_disable(audio_handle, PLUGIN_DISABLE_MMAP)) < 0)
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
380 {
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
381 SDL_SetError("snd_pcm_plugin_set_disable failed: %s\n", snd_strerror(rval));
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
382 return (-1);
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
383 }
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
384 }
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
385
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
386 /* Try for a closest match on audio format */
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
387 format = 0;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
388 /* can't use format as SND_PCM_SFMT_U8 = 0 in nto */
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
389 found = 0;
418
337f3ec4c385 Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents: 297
diff changeset
390
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
391 for (test_format=SDL_FirstAudioFormat(spec->format); !found ;)
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
392 {
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
393 /* if match found set format to equivalent ALSA format */
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
394 switch (test_format)
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
395 {
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
396 case AUDIO_U8:
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
397 format = SND_PCM_SFMT_U8;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
398 found = 1;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
399 break;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
400 case AUDIO_S8:
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
401 format = SND_PCM_SFMT_S8;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
402 found = 1;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
403 break;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
404 case AUDIO_S16LSB:
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
405 format = SND_PCM_SFMT_S16_LE;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
406 found = 1;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
407 break;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
408 case AUDIO_S16MSB:
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
409 format = SND_PCM_SFMT_S16_BE;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
410 found = 1;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
411 break;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
412 case AUDIO_U16LSB:
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
413 format = SND_PCM_SFMT_U16_LE;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
414 found = 1;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
415 break;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
416 case AUDIO_U16MSB:
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
417 format = SND_PCM_SFMT_U16_BE;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
418 found = 1;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
419 break;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
420 default:
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
421 break;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
422 }
418
337f3ec4c385 Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents: 297
diff changeset
423
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
424 if (!found)
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
425 {
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
426 test_format = SDL_NextAudioFormat();
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
427 }
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
428 }
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
429
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
430 /* assumes test_format not 0 on success */
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
431 if (test_format == 0)
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
432 {
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
433 SDL_SetError("NTO_OpenAudio(): Couldn't find any hardware audio formats");
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
434 return (-1);
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
435 }
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
436
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
437 spec->format = test_format;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
438
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
439 /* Set the audio format */
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
440 cparams.format.format = format;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
441
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
442 /* Set mono or stereo audio (currently only two channels supported) */
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
443 cparams.format.voices = spec->channels;
418
337f3ec4c385 Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents: 297
diff changeset
444
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
445 /* Set rate */
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
446 cparams.format.rate = spec->freq;
418
337f3ec4c385 Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents: 297
diff changeset
447
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
448 /* Setup the transfer parameters according to cparams */
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
449 rval = snd_pcm_plugin_params(audio_handle, &cparams);
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
450 if (rval < 0)
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
451 {
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
452 SDL_SetError("NTO_OpenAudio(): snd_pcm_channel_params failed: %s\n", snd_strerror(rval));
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
453 return (-1);
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
454 }
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
455
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
456 /* Make sure channel is setup right one last time */
1336
3692456e7b0f Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
457 SDL_memset(&csetup, 0x00, sizeof(csetup));
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
458 csetup.channel = SND_PCM_CHANNEL_PLAYBACK;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
459 if (snd_pcm_plugin_setup(audio_handle, &csetup) < 0)
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
460 {
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
461 SDL_SetError("NTO_OpenAudio(): Unable to setup playback channel\n");
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
462 return -1;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
463 }
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
464
418
337f3ec4c385 Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents: 297
diff changeset
465
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
466 /* Calculate the final parameters for this audio specification */
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
467 SDL_CalculateAudioSpec(spec);
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
468
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
469 pcm_len = spec->size;
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
470
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
471 if (pcm_len==0)
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
472 {
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
473 pcm_len = csetup.buf.block.frag_size * spec->channels * (snd_pcm_format_width(format)/8);
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
474 }
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
475
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
476 /* Allocate memory to the audio buffer and initialize with silence (Note that
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
477 buffer size must be a multiple of fragment size, so find closest multiple)
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
478 */
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
479 pcm_buf = (Uint8*)SDL_AllocAudioMem(pcm_len);
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
480 if (pcm_buf == NULL)
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
481 {
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
482 SDL_SetError("NTO_OpenAudio(): pcm buffer allocation failed\n");
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
483 return (-1);
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
484 }
1336
3692456e7b0f Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
485 SDL_memset(pcm_buf, spec->silence, pcm_len);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
486
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
487 /* get the file descriptor */
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
488 if ((audio_fd = snd_pcm_file_descriptor(audio_handle, SND_PCM_CHANNEL_PLAYBACK)) < 0)
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
489 {
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
490 SDL_SetError("NTO_OpenAudio(): snd_pcm_file_descriptor failed with error code: %s\n", snd_strerror(rval));
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
491 return (-1);
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
492 }
418
337f3ec4c385 Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents: 297
diff changeset
493
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
494 /* Trigger audio playback */
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
495 rval = snd_pcm_plugin_prepare(audio_handle, SND_PCM_CHANNEL_PLAYBACK);
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
496 if (rval < 0)
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
497 {
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
498 SDL_SetError("snd_pcm_plugin_prepare failed: %s\n", snd_strerror(rval));
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
499 return (-1);
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
500 }
418
337f3ec4c385 Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents: 297
diff changeset
501
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
502 this->enabled = 1;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
503
718
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
504 /* Get the parent process id (we're the parent of the audio thread) */
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
505 parent = getpid();
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
506
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
507 /* We're really ready to rock and roll. :-) */
cbc0f7fabd1c Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents: 663
diff changeset
508 return (0);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
509 }