author | Darren Alton <dalton@stevens.edu> |
Tue, 10 Jun 2008 06:45:39 +0000 | |
branch | gsoc2008_nds |
changeset 2669 | e27bdcc80744 |
parent 2060 | 866052b01ee5 |
child 2859 | 99210400e8b9 |
permissions | -rw-r--r-- |
0 | 1 |
/* |
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 | 4 |
|
5 |
This library is free software; you can redistribute it and/or |
|
6 |
modify it under the terms of the GNU Library General Public |
|
7 |
License as published by the Free Software Foundation; either |
|
8 |
version 2 of the License, or (at your option) any later version. |
|
9 |
||
10 |
This library is distributed in the hope that it will be useful, |
|
11 |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
12 |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
13 |
Library General Public License for more details. |
|
14 |
||
15 |
You should have received a copy of the GNU Library General Public |
|
16 |
License along with this library; if not, write to the Free |
|
17 |
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
|
18 |
||
19 |
Sam Lantinga |
|
252
e8157fcb3114
Updated the source with the correct e-mail address
Sam Lantinga <slouken@libsdl.org>
parents:
0
diff
changeset
|
20 |
slouken@libsdl.org |
0 | 21 |
*/ |
1402
d910939febfa
Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents:
1361
diff
changeset
|
22 |
#include "SDL_config.h" |
0 | 23 |
|
24 |
#include <errno.h> |
|
25 |
#include <unistd.h> |
|
26 |
#include <fcntl.h> |
|
27 |
#include <signal.h> |
|
28 |
#include <sys/types.h> |
|
29 |
#include <sys/time.h> |
|
30 |
#include <sched.h> |
|
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
31 |
#include <sys/select.h> |
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
32 |
#include <sys/neutrino.h> |
0 | 33 |
#include <sys/asoundlib.h> |
34 |
||
1358
c71e05b4dc2e
More header massaging... works great on Windows. ;-)
Sam Lantinga <slouken@libsdl.org>
parents:
1338
diff
changeset
|
35 |
#include "SDL_timer.h" |
0 | 36 |
#include "SDL_audio.h" |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
37 |
#include "../SDL_audiomem.h" |
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
38 |
#include "../SDL_audio_c.h" |
0 | 39 |
#include "SDL_nto_audio.h" |
40 |
||
41 |
/* 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
|
42 |
#define DRIVER_NAME "qsa-nto" |
0 | 43 |
|
44 |
/* default channel communication parameters */ |
|
45 |
#define DEFAULT_CPARAMS_RATE 22050 |
|
46 |
#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
|
47 |
/* 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
|
48 |
#define DEFAULT_CPARAMS_FRAG_SIZE 4096 |
0 | 49 |
#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
|
50 |
#define DEFAULT_CPARAMS_FRAGS_MAX 1 |
0 | 51 |
|
52 |
/* 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
|
53 |
#define OPEN_FLAGS SND_PCM_OPEN_PLAYBACK |
0 | 54 |
|
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
55 |
#define QSA_NO_WORKAROUNDS 0x00000000 |
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
56 |
#define QSA_MMAP_WORKAROUND 0x00000001 |
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
57 |
|
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
58 |
struct BuggyCards |
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
59 |
{ |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
60 |
char *cardname; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
61 |
unsigned long bugtype; |
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
62 |
}; |
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
63 |
|
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
64 |
#define QSA_WA_CARDS 3 |
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
65 |
|
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
66 |
struct BuggyCards buggycards[QSA_WA_CARDS] = { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
67 |
{"Sound Blaster Live!", QSA_MMAP_WORKAROUND}, |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
68 |
{"Vortex 8820", QSA_MMAP_WORKAROUND}, |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
69 |
{"Vortex 8830", QSA_MMAP_WORKAROUND}, |
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
70 |
}; |
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
71 |
|
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
72 |
|
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
73 |
static inline void |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
74 |
NTO_SetError(const char *fn, int rval) |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
75 |
{ |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
76 |
SDL_SetError("NTO: %s failed: %s", fn, snd_strerror(rval)); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
77 |
} |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
78 |
|
0 | 79 |
|
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
80 |
/* card names check to apply the workarounds */ |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
81 |
static int |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
82 |
NTO_CheckBuggyCards(_THIS, unsigned long checkfor) |
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
83 |
{ |
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
84 |
char scardname[33]; |
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
85 |
int it; |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
86 |
|
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
87 |
if (snd_card_get_name(this->hidden->cardno, scardname, 32) < 0) { |
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
88 |
return 0; |
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
89 |
} |
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
90 |
|
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
91 |
for (it = 0; it < QSA_WA_CARDS; it++) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
92 |
if (SDL_strcmp(buggycards[it].cardname, scardname) == 0) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
93 |
if (buggycards[it].bugtype == checkfor) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
94 |
return 1; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
95 |
} |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
96 |
} |
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 |
|
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
99 |
return 0; |
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
100 |
} |
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
101 |
|
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
102 |
static void |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
103 |
NTO_ThreadInit(_THIS) |
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
104 |
{ |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
105 |
struct sched_param param; |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
106 |
int status = SchedGet(0, 0, ¶m); |
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
107 |
|
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
108 |
/* increasing default 10 priority to 25 to avoid jerky sound */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
109 |
param.sched_priority = param.sched_curpriority + 15; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
110 |
status = SchedSet(0, 0, SCHED_NOCHANGE, ¶m); |
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
111 |
} |
0 | 112 |
|
113 |
/* PCM transfer channel parameters initialize function */ |
|
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
114 |
static void |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
115 |
NTO_InitAudioParams(snd_pcm_channel_params_t * cpars) |
0 | 116 |
{ |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
117 |
SDL_memset(cpars, 0, sizeof(snd_pcm_channel_params_t)); |
0 | 118 |
|
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
119 |
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
|
120 |
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
|
121 |
cpars->start_mode = SND_PCM_START_DATA; |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
122 |
cpars->stop_mode = SND_PCM_STOP_STOP; |
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
123 |
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
|
124 |
cpars->format.interleave = 1; |
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
125 |
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
|
126 |
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
|
127 |
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
|
128 |
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
|
129 |
cpars->buf.block.frags_max = DEFAULT_CPARAMS_FRAGS_MAX; |
0 | 130 |
} |
131 |
||
132 |
||
133 |
/* This function waits until it is possible to write a full sound buffer */ |
|
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
134 |
static void |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
135 |
NTO_WaitDevice(_THIS) |
0 | 136 |
{ |
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
137 |
fd_set wfds; |
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
138 |
int selectret; |
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
139 |
|
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
140 |
FD_ZERO(&wfds); |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
141 |
FD_SET(this->hidden->audio_fd, &wfds); |
0 | 142 |
|
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
143 |
do { |
2060 | 144 |
selectret = |
145 |
select(this->hidden->audio_fd + 1, NULL, &wfds, NULL, NULL); |
|
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
146 |
switch (selectret) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
147 |
case -1: |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
148 |
case 0: |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
149 |
SDL_SetError("NTO: select() failed: %s\n", strerror(errno)); |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
150 |
return; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
151 |
default: |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
152 |
if (FD_ISSET(this->hidden->audio_fd, &wfds)) { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
153 |
return; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
154 |
} |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
155 |
break; |
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
156 |
} |
2669
e27bdcc80744
First commit. Added header configs for DS as well as a Makefile. Initial work on framebuffer video driver, currently not functioning as desired.
Darren Alton <dalton@stevens.edu>
parents:
2060
diff
changeset
|
157 |
} while (1); |
0 | 158 |
} |
159 |
||
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
160 |
static void |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
161 |
NTO_PlayDevice(_THIS) |
0 | 162 |
{ |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
163 |
snd_pcm_channel_status_t cstatus; |
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
164 |
int written, rval; |
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
165 |
int towrite; |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
166 |
void *pcmbuffer; |
0 | 167 |
|
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
168 |
if ((!this->enabled) || (!this->hidden)) { |
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
169 |
return; |
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
170 |
} |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
171 |
|
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
172 |
towrite = this->spec.size; |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
173 |
pcmbuffer = this->hidden->pcm_buf; |
0 | 174 |
|
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
175 |
/* 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
|
176 |
do { |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
177 |
written = snd_pcm_plugin_write(this->hidden->audio_handle, |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
178 |
pcmbuffer, towrite); |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
179 |
if (written != towrite) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
180 |
if ((errno == EAGAIN) || (errno == EWOULDBLOCK)) { |
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
181 |
/* 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
|
182 |
SDL_Delay(1); |
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
183 |
/* if we wrote some data */ |
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
184 |
towrite -= written; |
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
185 |
pcmbuffer += written * this->spec.channels; |
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
186 |
continue; |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
187 |
} else if ((errno == EINVAL) || (errno == EIO)) { |
2060 | 188 |
SDL_memset(&cstatus, 0, sizeof(cstatus)); |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
189 |
cstatus.channel = SND_PCM_CHANNEL_PLAYBACK; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
190 |
rval = snd_pcm_plugin_status(this->hidden->audio_handle, |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
191 |
&cstatus); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
192 |
if (rval < 0) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
193 |
NTO_SetError("snd_pcm_plugin_status", rval); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
194 |
return; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
195 |
} |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
196 |
|
2060 | 197 |
if ((cstatus.status == SND_PCM_STATUS_UNDERRUN) || |
198 |
(cstatus.status == SND_PCM_STATUS_READY)) { |
|
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
199 |
rval = snd_pcm_plugin_prepare(this->hidden->audio_handle, |
2060 | 200 |
SND_PCM_CHANNEL_PLAYBACK); |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
201 |
if (rval < 0) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
202 |
NTO_SetError("snd_pcm_plugin_prepare", rval); |
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
203 |
return; |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
204 |
} |
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
205 |
} |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
206 |
continue; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
207 |
} else { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
208 |
return; |
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
209 |
} |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
210 |
} else { |
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
211 |
/* we wrote all remaining data */ |
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
212 |
towrite -= written; |
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
213 |
pcmbuffer += written * this->spec.channels; |
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
214 |
} |
2669
e27bdcc80744
First commit. Added header configs for DS as well as a Makefile. Initial work on framebuffer video driver, currently not functioning as desired.
Darren Alton <dalton@stevens.edu>
parents:
2060
diff
changeset
|
215 |
} while ((towrite > 0) && (this->enabled)); |
0 | 216 |
|
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
217 |
/* If we couldn't write, assume fatal error for now */ |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
218 |
if (towrite != 0) { |
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
219 |
this->enabled = 0; |
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
220 |
} |
0 | 221 |
} |
222 |
||
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
223 |
static Uint8 * |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
224 |
NTO_GetDeviceBuf(_THIS) |
0 | 225 |
{ |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
226 |
return this->hidden->pcm_buf; |
0 | 227 |
} |
228 |
||
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
229 |
static void |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
230 |
NTO_CloseDevice(_THIS) |
0 | 231 |
{ |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
232 |
if (this->hidden != NULL) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
233 |
if (this->hidden->audio_handle != NULL) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
234 |
snd_pcm_plugin_flush(this->hidden->audio_handle, |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
235 |
SND_PCM_CHANNEL_PLAYBACK); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
236 |
snd_pcm_close(this->hidden->audio_handle); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
237 |
this->hidden->audio_handle = NULL; |
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
238 |
} |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
239 |
if (this->hidden->pcm_buf != NULL) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
240 |
SDL_FreeAudioMem(this->hidden->pcm_buf); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
241 |
this->hidden->pcm_buf = NULL; |
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
242 |
} |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
243 |
SDL_free(this->hidden); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
244 |
this->hidden = NULL; |
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
245 |
} |
0 | 246 |
} |
247 |
||
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
248 |
static int |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
249 |
NTO_OpenDevice(_THIS, const char *devname, int iscapture) |
0 | 250 |
{ |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
251 |
int rval = 0; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
252 |
int format = 0; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
253 |
SDL_AudioFormat test_format = 0; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
254 |
int found = 0; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
255 |
snd_pcm_channel_setup_t csetup; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
256 |
snd_pcm_channel_params_t cparams; |
0 | 257 |
|
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
258 |
/* Initialize all variables that we clean on shutdown */ |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
259 |
this->hidden = (struct SDL_PrivateAudioData *) |
2060 | 260 |
SDL_malloc((sizeof *this->hidden)); |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
261 |
if (this->hidden == NULL) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
262 |
SDL_OutOfMemory(); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
263 |
return 0; |
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
264 |
} |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
265 |
SDL_memset(this->hidden, 0, (sizeof *this->hidden)); |
0 | 266 |
|
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
267 |
/* 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
|
268 |
NTO_InitAudioParams(&cparams); |
0 | 269 |
|
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
270 |
/* Open the audio device */ |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
271 |
rval = snd_pcm_open_preferred(&this->hidden->audio_handle, |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
272 |
&this->hidden->cardno, |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
273 |
&this->hidden->deviceno, OPEN_FLAGS); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
274 |
|
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
275 |
if (rval < 0) { |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
276 |
NTO_CloseDevice(this); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
277 |
NTO_SetError("snd_pcm_open", rval); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
278 |
return 0; |
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
279 |
} |
0 | 280 |
|
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
281 |
if (!NTO_CheckBuggyCards(this, QSA_MMAP_WORKAROUND)) { |
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
282 |
/* enable count status parameter */ |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
283 |
rval = snd_pcm_plugin_set_disable(this->hidden->audio_handle, |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
284 |
PLUGIN_DISABLE_MMAP); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
285 |
if (rval < 0) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
286 |
NTO_CloseDevice(this); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
287 |
NTO_SetError("snd_pcm_plugin_set_disable", rval); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
288 |
return 0; |
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
289 |
} |
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
290 |
} |
0 | 291 |
|
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
292 |
/* 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
|
293 |
format = 0; |
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
294 |
/* 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
|
295 |
found = 0; |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
296 |
|
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
297 |
for (test_format = SDL_FirstAudioFormat(this->spec.format); !found;) { |
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
298 |
/* if match found set format to equivalent ALSA format */ |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
299 |
switch (test_format) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
300 |
case AUDIO_U8: |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
301 |
format = SND_PCM_SFMT_U8; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
302 |
found = 1; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
303 |
break; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
304 |
case AUDIO_S8: |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
305 |
format = SND_PCM_SFMT_S8; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
306 |
found = 1; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
307 |
break; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
308 |
case AUDIO_S16LSB: |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
309 |
format = SND_PCM_SFMT_S16_LE; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
310 |
found = 1; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
311 |
break; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
312 |
case AUDIO_S16MSB: |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
313 |
format = SND_PCM_SFMT_S16_BE; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
314 |
found = 1; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
315 |
break; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
316 |
case AUDIO_U16LSB: |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
317 |
format = SND_PCM_SFMT_U16_LE; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
318 |
found = 1; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
319 |
break; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
320 |
case AUDIO_U16MSB: |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
321 |
format = SND_PCM_SFMT_U16_BE; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
322 |
found = 1; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
323 |
break; |
2007
cff63f857ff3
QNX6 support for int32/float32 (isn't this just ALSA?!)
Ryan C. Gordon <icculus@icculus.org>
parents:
1982
diff
changeset
|
324 |
case AUDIO_S32LSB: |
cff63f857ff3
QNX6 support for int32/float32 (isn't this just ALSA?!)
Ryan C. Gordon <icculus@icculus.org>
parents:
1982
diff
changeset
|
325 |
format = SND_PCM_SFMT_S32_LE; |
cff63f857ff3
QNX6 support for int32/float32 (isn't this just ALSA?!)
Ryan C. Gordon <icculus@icculus.org>
parents:
1982
diff
changeset
|
326 |
found = 1; |
cff63f857ff3
QNX6 support for int32/float32 (isn't this just ALSA?!)
Ryan C. Gordon <icculus@icculus.org>
parents:
1982
diff
changeset
|
327 |
break; |
cff63f857ff3
QNX6 support for int32/float32 (isn't this just ALSA?!)
Ryan C. Gordon <icculus@icculus.org>
parents:
1982
diff
changeset
|
328 |
case AUDIO_S32MSB: |
cff63f857ff3
QNX6 support for int32/float32 (isn't this just ALSA?!)
Ryan C. Gordon <icculus@icculus.org>
parents:
1982
diff
changeset
|
329 |
format = SND_PCM_SFMT_S32_BE; |
cff63f857ff3
QNX6 support for int32/float32 (isn't this just ALSA?!)
Ryan C. Gordon <icculus@icculus.org>
parents:
1982
diff
changeset
|
330 |
found = 1; |
cff63f857ff3
QNX6 support for int32/float32 (isn't this just ALSA?!)
Ryan C. Gordon <icculus@icculus.org>
parents:
1982
diff
changeset
|
331 |
break; |
cff63f857ff3
QNX6 support for int32/float32 (isn't this just ALSA?!)
Ryan C. Gordon <icculus@icculus.org>
parents:
1982
diff
changeset
|
332 |
case AUDIO_F32LSB: |
cff63f857ff3
QNX6 support for int32/float32 (isn't this just ALSA?!)
Ryan C. Gordon <icculus@icculus.org>
parents:
1982
diff
changeset
|
333 |
format = SND_PCM_SFMT_FLOAT_LE; |
cff63f857ff3
QNX6 support for int32/float32 (isn't this just ALSA?!)
Ryan C. Gordon <icculus@icculus.org>
parents:
1982
diff
changeset
|
334 |
found = 1; |
cff63f857ff3
QNX6 support for int32/float32 (isn't this just ALSA?!)
Ryan C. Gordon <icculus@icculus.org>
parents:
1982
diff
changeset
|
335 |
break; |
cff63f857ff3
QNX6 support for int32/float32 (isn't this just ALSA?!)
Ryan C. Gordon <icculus@icculus.org>
parents:
1982
diff
changeset
|
336 |
case AUDIO_F32MSB: |
cff63f857ff3
QNX6 support for int32/float32 (isn't this just ALSA?!)
Ryan C. Gordon <icculus@icculus.org>
parents:
1982
diff
changeset
|
337 |
format = SND_PCM_SFMT_FLOAT_BE; |
cff63f857ff3
QNX6 support for int32/float32 (isn't this just ALSA?!)
Ryan C. Gordon <icculus@icculus.org>
parents:
1982
diff
changeset
|
338 |
found = 1; |
cff63f857ff3
QNX6 support for int32/float32 (isn't this just ALSA?!)
Ryan C. Gordon <icculus@icculus.org>
parents:
1982
diff
changeset
|
339 |
break; |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
340 |
default: |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
341 |
break; |
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
342 |
} |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
343 |
|
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
344 |
if (!found) { |
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
345 |
test_format = SDL_NextAudioFormat(); |
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
346 |
} |
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
347 |
} |
0 | 348 |
|
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
349 |
/* assumes test_format not 0 on success */ |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
350 |
if (test_format == 0) { |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
351 |
NTO_CloseDevice(this); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
352 |
SDL_SetError("NTO: Couldn't find any hardware audio formats"); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
353 |
return 0; |
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
354 |
} |
0 | 355 |
|
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
356 |
this->spec.format = test_format; |
0 | 357 |
|
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
358 |
/* Set the audio format */ |
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
359 |
cparams.format.format = format; |
0 | 360 |
|
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
361 |
/* Set mono or stereo audio (currently only two channels supported) */ |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
362 |
cparams.format.voices = this->spec.channels; |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
363 |
|
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
364 |
/* Set rate */ |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
365 |
cparams.format.rate = this->spec.freq; |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
366 |
|
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
367 |
/* Setup the transfer parameters according to cparams */ |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
368 |
rval = snd_pcm_plugin_params(this->hidden->audio_handle, &cparams); |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
369 |
if (rval < 0) { |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
370 |
NTO_CloseDevice(this); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
371 |
NTO_SetError("snd_pcm_channel_params", rval); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
372 |
return 0; |
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
373 |
} |
0 | 374 |
|
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
375 |
/* Make sure channel is setup right one last time */ |
2060 | 376 |
SDL_memset(&csetup, '\0', sizeof(csetup)); |
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
377 |
csetup.channel = SND_PCM_CHANNEL_PLAYBACK; |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
378 |
if (snd_pcm_plugin_setup(this->hidden->audio_handle, &csetup) < 0) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
379 |
NTO_CloseDevice(this); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
380 |
SDL_SetError("NTO: Unable to setup playback channel\n"); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
381 |
return 0; |
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
382 |
} |
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 |
/* Calculate the final parameters for this audio specification */ |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
385 |
SDL_CalculateAudioSpec(&this->spec); |
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
386 |
|
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
387 |
this->hidden->pcm_len = this->spec.size; |
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
388 |
|
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
389 |
if (this->hidden->pcm_len == 0) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
390 |
this->hidden->pcm_len = |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
391 |
csetup.buf.block.frag_size * this->spec.channels * |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
392 |
(snd_pcm_format_width(format) / 8); |
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
393 |
} |
0 | 394 |
|
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
395 |
/* |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
396 |
* Allocate memory to the audio buffer and initialize with silence |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
397 |
* (Note that buffer size must be a multiple of fragment size, so find |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
398 |
* closest multiple) |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
399 |
*/ |
2060 | 400 |
this->hidden->pcm_buf = |
401 |
(Uint8 *) SDL_AllocAudioMem(this->hidden->pcm_len); |
|
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
402 |
if (this->hidden->pcm_buf == NULL) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
403 |
NTO_CloseDevice(this); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
404 |
SDL_OutOfMemory(); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
405 |
return 0; |
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
406 |
} |
2060 | 407 |
SDL_memset(this->hidden->pcm_buf, this->spec.silence, |
408 |
this->hidden->pcm_len); |
|
0 | 409 |
|
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
410 |
/* get the file descriptor */ |
2060 | 411 |
this->hidden->audio_fd = |
412 |
snd_pcm_file_descriptor(this->hidden->audio_handle, |
|
413 |
SND_PCM_CHANNEL_PLAYBACK); |
|
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
414 |
if (this->hidden->audio_fd < 0) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
415 |
NTO_CloseDevice(this); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
416 |
NTO_SetError("snd_pcm_file_descriptor", rval); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
417 |
return 0; |
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
418 |
} |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
419 |
|
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
420 |
/* Trigger audio playback */ |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
421 |
rval = snd_pcm_plugin_prepare(this->hidden->audio_handle, |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
422 |
SND_PCM_CHANNEL_PLAYBACK); |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
423 |
if (rval < 0) { |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
424 |
NTO_CloseDevice(this); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
425 |
NTO_SetError("snd_pcm_plugin_prepare", rval); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
426 |
return 0; |
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
427 |
} |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
428 |
|
718
cbc0f7fabd1c
Date: Sat, 13 Sep 2003 15:50:43 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
663
diff
changeset
|
429 |
/* We're really ready to rock and roll. :-) */ |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
430 |
return 1; |
0 | 431 |
} |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
432 |
|
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
433 |
|
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
434 |
static int |
2060 | 435 |
NTO_Init(SDL_AudioDriverImpl * impl) |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
436 |
{ |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
437 |
/* See if we can open a nonblocking channel. */ |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
438 |
snd_pcm_t *handle = NULL; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
439 |
int rval = snd_pcm_open_preferred(&handle, NULL, NULL, OPEN_FLAGS); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
440 |
if (rval < 0) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
441 |
SDL_SetError("NTO: couldn't open preferred audio device"); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
442 |
return 0; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
443 |
} |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
444 |
if ((rval = snd_pcm_close(handle)) < 0) { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
445 |
SDL_SetError("NTO: couldn't close test audio device"); |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
446 |
return 0; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
447 |
} |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
448 |
|
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
449 |
/* Set the function pointers */ |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
450 |
impl->OpenDevice = NTO_OpenDevice; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
451 |
impl->ThreadInit = NTO_ThreadInit; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
452 |
impl->WaitDevice = NTO_WaitDevice; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
453 |
impl->PlayDevice = NTO_PlayDevice; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
454 |
impl->GetDeviceBuf = NTO_GetDeviceBuf; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
455 |
impl->CloseDevice = NTO_CloseDevice; |
2060 | 456 |
impl->OnlyHasDefaultOutputDevice = 1; /* !!! FIXME: add device enum! */ |
2049
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
457 |
|
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
458 |
return 1; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
459 |
} |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
460 |
|
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
461 |
AudioBootStrap QNXNTOAUDIO_bootstrap = { |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
462 |
DRIVER_NAME, "QNX6 QSA-NTO Audio", NTO_Init, 0 |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
463 |
}; |
5f6550e5184f
Merged SDL-ryan-multiple-audio-device branch r2803:2871 into the trunk.
Ryan C. Gordon <icculus@icculus.org>
parents:
2007
diff
changeset
|
464 |
|
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
465 |
/* vi: set ts=4 sw=4 expandtab: */ |