Mercurial > sdl-ios-xcode
annotate src/audio/nto/SDL_nto_audio.c @ 663:8bedd6d61642
Date: Sat, 2 Aug 2003 16:22:51 +0300
From: "Mike Gorchak"
Subject: New patches for QNX6
Here my patches for the SDL/QNX:
QNXSDL.diff - diff to non-QNX related sources:
- updated BUGS file, I think QNX6 is now will be officially supported
- configure.in - added shared library support for QNX, and removed dependency between the ALSA and QNX6.
- SDL_audio.c - added QNX NTO sound bootstrap insted of ALSA's.
- SDL_sysaudio.h - the same.
- SDL_nto_audio.c - the same.
- SDL_video.c - right now, QNX doesn't offer any method to obtain pointers to the OpenGL functions by function name, so they must be hardcoded in library, otherwise OpenGL will not be supported.
- testsprite.c - fixed: do not draw vertical red line if we are in non-double-buffered mode.
sdlqnxph.tar.gz - archive of the ./src/video/photon/* . Too many changes in code to make diffs :) :
+ Added stub for support hide/unhide window event
+ Added full YUV overlays support.
+ Added window maximize support.
+ Added mouse wheel events.
+ Added support for some specific key codes in Unicode mode (like ESC).
+ Added more checks to the all memory allocation code.
+ Added SDL_DOUBLEBUF support in all fullscreen modes.
+ Added fallback to window mode, if desired fullscreen mode is not supported.
+ Added stub support for the GL_LoadLibrary and GL_GetProcAddress functions.
+ Added resizable window support without caption.
! Fixed bug in the Ph_EV_EXPOSE event handler, when rectangles to update is 0 and when width or height of the rectangle is 0.
! Fixed bug in the event handler code. Events has not been passed to the window widget handler.
! Fixed codes for Win keys (Super/Hyper/Menu).
! Fixed memory leak, when deallocation palette.
! Fixed palette emulation code bugs.
! Fixed fullscreen and hwsurface handling.
! Fixed CLOSE button bug. First event was passed to the handler, but second terminated the application. Now all events passed to the application correctly.
- Removed all printfs in code, now SDL_SetError used instead of them.
- Disabled ToggleFullScreen function.
README.QNX - updated README.QNX file. Added much more issues.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Mon, 04 Aug 2003 00:52:42 +0000 |
parents | b82518082828 |
children | cbc0f7fabd1c |
rev | line source |
---|---|
0 | 1 /* |
2 SDL - Simple DirectMedia Layer | |
297
f6ffac90895c
Updated copyright information for 2002
Sam Lantinga <slouken@libsdl.org>
parents:
283
diff
changeset
|
3 Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 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 */ |
22 | |
23 #include <stdlib.h> | |
24 #include <stdio.h> | |
25 #include <string.h> | |
26 #include <errno.h> | |
27 #include <unistd.h> | |
28 #include <fcntl.h> | |
29 #include <signal.h> | |
30 #include <sys/types.h> | |
31 #include <sys/time.h> | |
32 #include <sched.h> | |
33 #include <sys/asoundlib.h> | |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
34 #include <sys/select.h> |
0 | 35 |
36 #include "SDL_audio.h" | |
37 #include "SDL_error.h" | |
38 #include "SDL_audiomem.h" | |
39 #include "SDL_audio_c.h" | |
40 #include "SDL_timer.h" | |
41 #include "SDL_nto_audio.h" | |
42 | |
43 /* The tag name used by NTO audio */ | |
44 #define DRIVER_NAME "nto" | |
45 | |
46 /* default channel communication parameters */ | |
47 #define DEFAULT_CPARAMS_RATE 22050 | |
48 #define DEFAULT_CPARAMS_VOICES 1 | |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
49 #define DEFAULT_CPARAMS_FRAG_SIZE 4096 |
0 | 50 #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
|
51 #define DEFAULT_CPARAMS_FRAGS_MAX 1 |
0 | 52 |
53 /* 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
|
54 #define OPEN_FLAGS SND_PCM_OPEN_PLAYBACK |
0 | 55 |
56 /* Audio driver functions */ | |
57 static int NTO_OpenAudio(_THIS, SDL_AudioSpec *spec); | |
58 static void NTO_WaitAudio(_THIS); | |
59 static void NTO_PlayAudio(_THIS); | |
60 static Uint8 *NTO_GetAudioBuf(_THIS); | |
61 static void NTO_CloseAudio(_THIS); | |
62 | |
63 static snd_pcm_channel_status_t cstatus; | |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
64 static snd_pcm_channel_params_t cparams; |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
65 static snd_pcm_channel_setup_t csetup; |
0 | 66 |
67 /* PCM transfer channel parameters initialize function */ | |
68 static void init_pcm_cparams(snd_pcm_channel_params_t* cparams) | |
69 { | |
70 memset(cparams,0,sizeof(snd_pcm_channel_params_t)); | |
71 | |
72 cparams->channel = SND_PCM_CHANNEL_PLAYBACK; | |
73 cparams->mode = SND_PCM_MODE_BLOCK; | |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
74 cparams->start_mode = SND_PCM_START_DATA; |
0 | 75 cparams->stop_mode = SND_PCM_STOP_STOP; |
76 cparams->format.format = SND_PCM_SFMT_S16_LE; | |
77 cparams->format.interleave = 1; | |
78 cparams->format.rate = DEFAULT_CPARAMS_RATE; | |
79 cparams->format.voices = DEFAULT_CPARAMS_VOICES; | |
80 cparams->buf.block.frag_size = DEFAULT_CPARAMS_FRAG_SIZE; | |
81 cparams->buf.block.frags_min = DEFAULT_CPARAMS_FRAGS_MIN; | |
82 cparams->buf.block.frags_max = DEFAULT_CPARAMS_FRAGS_MAX; | |
83 } | |
84 | |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
85 static int Audio_Available(void) |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
86 { |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
87 /* |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
88 See if we can open a nonblocking channel. |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
89 Return value '1' means we can. |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
90 Return value '0' means we cannot. |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
91 */ |
0 | 92 |
93 int available; | |
94 int rval; | |
95 snd_pcm_t *handle; | |
96 | |
97 available = 0; | |
98 handle = NULL; | |
99 | |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
100 rval = snd_pcm_open_preferred(&handle, NULL, NULL, OPEN_FLAGS); |
0 | 101 |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
102 if (rval >= 0){ |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
103 available = 1; |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
104 |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
105 if ((rval = snd_pcm_close(handle)) < 0){ |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
106 SDL_SetError("snd_pcm_close failed: %s\n",snd_strerror(rval)); |
0 | 107 available = 0; |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
108 } |
0 | 109 } |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
110 else{ |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
111 SDL_SetError("snd_pcm_open failed: %s\n", snd_strerror(rval)); |
0 | 112 } |
113 | |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
114 #ifdef DEBUG_AUDIO |
0 | 115 fprintf(stderr,"AudioAvailable rtns %d\n", available); |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
116 #endif |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
117 |
0 | 118 return(available); |
119 } | |
120 | |
121 static void Audio_DeleteDevice(SDL_AudioDevice *device) | |
122 { | |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
123 #ifdef DEBUG_AUDIO |
0 | 124 fprintf(stderr,"Audio_DeleteDevice\n"); |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
125 #endif |
0 | 126 |
127 free(device->hidden); | |
128 free(device); | |
129 } | |
130 | |
131 static SDL_AudioDevice *Audio_CreateDevice(int devindex) | |
132 { | |
133 SDL_AudioDevice *this; | |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
134 #ifdef DEBUG_AUDIO |
0 | 135 fprintf(stderr,"Audio_CreateDevice\n"); |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
136 #endif |
0 | 137 /* Initialize all variables that we clean on shutdown */ |
138 this = (SDL_AudioDevice *)malloc(sizeof(SDL_AudioDevice)); | |
139 if ( this ) { | |
140 memset(this, 0, (sizeof *this)); | |
141 this->hidden = (struct SDL_PrivateAudioData *) | |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
142 malloc((sizeof *this->hidden)); |
0 | 143 } |
144 if ( (this == NULL) || (this->hidden == NULL) ) { | |
145 SDL_OutOfMemory(); | |
146 if ( this ) { | |
147 free(this); | |
148 } | |
149 return(0); | |
150 } | |
151 memset(this->hidden, 0, (sizeof *this->hidden)); | |
152 audio_handle = NULL; | |
153 | |
154 /* Set the function pointers */ | |
155 this->OpenAudio = NTO_OpenAudio; | |
156 this->WaitAudio = NTO_WaitAudio; | |
157 this->PlayAudio = NTO_PlayAudio; | |
158 this->GetAudioBuf = NTO_GetAudioBuf; | |
159 this->CloseAudio = NTO_CloseAudio; | |
160 | |
161 this->free = Audio_DeleteDevice; | |
162 | |
163 return this; | |
164 } | |
165 | |
663
8bedd6d61642
Date: Sat, 2 Aug 2003 16:22:51 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
424
diff
changeset
|
166 AudioBootStrap QNXNTOAUDIO_bootstrap = { |
8bedd6d61642
Date: Sat, 2 Aug 2003 16:22:51 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
424
diff
changeset
|
167 DRIVER_NAME, "QNX6 NTO PCM audio", |
0 | 168 Audio_Available, Audio_CreateDevice |
169 }; | |
170 | |
171 /* This function waits until it is possible to write a full sound buffer */ | |
172 static void NTO_WaitAudio(_THIS) | |
173 { | |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
174 fd_set wfds; |
0 | 175 |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
176 FD_SET( audio_fd, &wfds ); |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
177 switch( select( audio_fd + 1, NULL, &wfds, NULL, NULL ) ) |
0 | 178 { |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
179 case -1: |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
180 case 0: |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
181 /* Error */ |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
182 SDL_SetError("select() in NTO_WaitAudio failed: %s\n", strerror(errno)); |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
183 break; |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
184 default: |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
185 if(FD_ISSET(audio_fd, &wfds)) |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
186 return; |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
187 } |
0 | 188 } |
189 | |
190 static void NTO_PlayAudio(_THIS) | |
191 { | |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
192 int written, rval; |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
193 int towrite; |
0 | 194 |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
195 #ifdef DEBUG_AUDIO |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
196 fprintf(stderr, "NTO_PlayAudio\n"); |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
197 #endif |
0 | 198 |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
199 if( !this->enabled){ |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
200 return; |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
201 } |
0 | 202 |
203 towrite = pcm_len; | |
204 | |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
205 /* Write the audio data, checking for EAGAIN (buffer full) and underrun */ |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
206 do { |
0 | 207 written = snd_pcm_plugin_write(audio_handle, pcm_buf, towrite); |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
208 #ifdef DEBUG_AUDIO |
0 | 209 fprintf(stderr, "NTO_PlayAudio: written = %d towrite = %d\n",written,towrite); |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
210 #endif |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
211 if (written != towrite){ |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
212 if ((errno == EAGAIN) || (errno == EWOULDBLOCK)){ |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
213 SDL_Delay(1); /* Let a little CPU time go by and try to write again */ |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
214 #ifdef DEBUG_AUDIO |
0 | 215 fprintf(stderr, "errno == EAGAIN written %d\n", written); |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
216 #endif |
0 | 217 towrite -= written; //we wrote some data |
218 continue; | |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
219 } |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
220 else if((errno == EINVAL) || (errno == EIO)){ |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
221 if(errno == EIO){ |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
222 #ifdef DEBUG_AUDIO |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
223 fprintf(stderr,"snd_pcm_plugin_write failed EIO: %s\n", snd_strerror(written)); |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
224 #endif |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
225 } |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
226 if(errno == EINVAL){ |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
227 #ifdef DEBUG_AUDIO |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
228 fprintf(stderr,"snd_pcm_plugin_write failed EINVAL: %s\n", snd_strerror(written)); |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
229 #endif |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
230 } |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
231 |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
232 memset(&cstatus, 0, sizeof(cstatus)); |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
233 if( (rval = snd_pcm_plugin_status(audio_handle, &cstatus)) < 0 ){ |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
234 #ifdef DEBUG_AUDIO |
0 | 235 fprintf(stderr, "snd_pcm_plugin_status failed %s\n",snd_strerror(rval)); |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
236 #endif |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
237 SDL_SetError("snd_pcm_plugin_status failed: %s\n", snd_strerror(rval)); |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
238 return; |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
239 } |
0 | 240 |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
241 if ( (cstatus.status == SND_PCM_STATUS_UNDERRUN) || (cstatus.status == SND_PCM_STATUS_READY) ){ |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
242 #ifdef DEBUG_AUDIO |
0 | 243 fprintf(stderr, "buffer underrun\n"); |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
244 #endif |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
245 if ( (rval = snd_pcm_plugin_prepare (audio_handle,SND_PCM_CHANNEL_PLAYBACK)) < 0 ){ |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
246 #ifdef DEBUG_AUDIO |
0 | 247 fprintf(stderr, "NTO_PlayAudio: prepare failed %s\n",snd_strerror(rval)); |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
248 #endif |
0 | 249 SDL_SetError("snd_pcm_plugin_prepare failed: %s\n",snd_strerror(rval) ); |
250 return; | |
251 } | |
252 } | |
253 continue; | |
254 } | |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
255 else{ |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
256 #ifdef DEBUG_AUDIO |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
257 fprintf(stderr, "NTO_PlayAudio: snd_pcm_plugin_write failed unknown errno %d %s\n",errno, snd_strerror(rval)); |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
258 #endif |
0 | 259 return; |
260 } | |
261 | |
262 } | |
263 else | |
264 { | |
265 towrite -= written; //we wrote all remaining data | |
266 } | |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
267 } while ( (towrite > 0) && (this->enabled) ); |
0 | 268 |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
269 /* If we couldn't write, assume fatal error for now */ |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
270 if ( towrite != 0 ) { |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
271 this->enabled = 0; |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
272 } |
0 | 273 return; |
274 } | |
275 | |
276 static Uint8 *NTO_GetAudioBuf(_THIS) | |
277 { | |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
278 #ifdef DEBUG_AUDIO |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
279 fprintf(stderr, "NTO_GetAudioBuf: pcm_buf %X\n",(Uint8 *)pcm_buf); |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
280 #endif |
0 | 281 return(pcm_buf); |
282 } | |
283 | |
284 static void NTO_CloseAudio(_THIS) | |
285 { | |
286 int rval; | |
287 | |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
288 #ifdef DEBUG_AUDIO |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
289 fprintf(stderr, "NTO_CloseAudio\n"); |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
290 #endif |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
291 |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
292 this->enabled = 0; |
0 | 293 |
294 if ( audio_handle != NULL ) { | |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
295 if ((rval = snd_pcm_plugin_flush(audio_handle,SND_PCM_CHANNEL_PLAYBACK)) < 0){ |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
296 SDL_SetError("snd_pcm_plugin_flush failed: %s\n",snd_strerror(rval)); |
0 | 297 return; |
298 } | |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
299 if ((rval = snd_pcm_close(audio_handle)) < 0){ |
0 | 300 SDL_SetError("snd_pcm_close failed: %s\n",snd_strerror(rval)); |
301 return; | |
302 } | |
303 audio_handle = NULL; | |
304 } | |
305 } | |
306 | |
307 static int NTO_OpenAudio(_THIS, SDL_AudioSpec *spec) | |
308 { | |
309 int rval; | |
310 int format; | |
311 Uint16 test_format; | |
312 int twidth; | |
313 int found; | |
314 | |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
315 #ifdef DEBUG_AUDIO |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
316 fprintf(stderr, "NTO_OpenAudio\n"); |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
317 #endif |
0 | 318 |
319 audio_handle = NULL; | |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
320 this->enabled = 0; |
0 | 321 |
322 if ( pcm_buf != NULL ) { | |
323 free((Uint8 *)pcm_buf); | |
324 pcm_buf = NULL; | |
325 } | |
326 | |
327 /* initialize channel transfer parameters to default */ | |
328 init_pcm_cparams(&cparams); | |
329 | |
330 /* Open the audio device */ | |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
331 rval = snd_pcm_open_preferred(&audio_handle, NULL, NULL, OPEN_FLAGS); |
0 | 332 if ( rval < 0 ) { |
333 SDL_SetError("snd_pcm_open failed: %s\n", snd_strerror(rval)); | |
334 return(-1); | |
335 } | |
336 | |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
337 /* enable count status parameter */ |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
338 if ((rval = snd_pcm_plugin_set_disable(audio_handle, PLUGIN_DISABLE_MMAP))<0){ |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
339 SDL_SetError("snd_pcm_plugin_set_disable failed: %s\n", snd_strerror(rval)); |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
340 return(-1); |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
341 } |
0 | 342 |
343 /* Try for a closest match on audio format */ | |
344 format = 0; | |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
345 found = 0; /* can't use format as SND_PCM_SFMT_U8 = 0 in nto */ |
0 | 346 for ( test_format = SDL_FirstAudioFormat(spec->format); !found ; ) |
347 { | |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
348 #ifdef DEBUG_AUDIO |
0 | 349 fprintf(stderr, "Trying format 0x%4.4x spec->samples %d\n", test_format,spec->samples); |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
350 #endif |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
351 |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
352 /* if match found set format to equivalent ALSA format */ |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
353 switch ( test_format ) { |
0 | 354 case AUDIO_U8: |
355 format = SND_PCM_SFMT_U8; | |
356 found = 1; | |
357 break; | |
358 case AUDIO_S8: | |
359 format = SND_PCM_SFMT_S8; | |
360 found = 1; | |
361 break; | |
362 case AUDIO_S16LSB: | |
363 format = SND_PCM_SFMT_S16_LE; | |
364 found = 1; | |
365 break; | |
366 case AUDIO_S16MSB: | |
367 format = SND_PCM_SFMT_S16_BE; | |
368 found = 1; | |
369 break; | |
370 case AUDIO_U16LSB: | |
371 format = SND_PCM_SFMT_U16_LE; | |
372 found = 1; | |
373 break; | |
374 case AUDIO_U16MSB: | |
375 format = SND_PCM_SFMT_U16_BE; | |
376 found = 1; | |
377 break; | |
378 default: | |
379 break; | |
380 } | |
381 if ( ! found ) { | |
382 test_format = SDL_NextAudioFormat(); | |
383 } | |
384 } | |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
385 |
0 | 386 /* assumes test_format not 0 on success */ |
387 if ( test_format == 0 ) { | |
388 SDL_SetError("Couldn't find any hardware audio formats"); | |
389 return(-1); | |
390 } | |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
391 |
0 | 392 spec->format = test_format; |
393 | |
394 /* Set the audio format */ | |
395 cparams.format.format = format; | |
396 | |
397 /* Set mono or stereo audio (currently only two channels supported) */ | |
398 cparams.format.voices = spec->channels; | |
399 | |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
400 #ifdef DEBUG_AUDIO |
0 | 401 fprintf(stderr,"intializing channels %d\n", cparams.format.voices); |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
402 #endif |
0 | 403 |
404 /* Set rate */ | |
405 cparams.format.rate = spec->freq ; | |
406 | |
407 /* Setup the transfer parameters according to cparams */ | |
408 rval = snd_pcm_plugin_params(audio_handle, &cparams); | |
409 if (rval < 0) { | |
410 SDL_SetError("snd_pcm_channel_params failed: %s\n", snd_strerror (rval)); | |
411 return(-1); | |
412 } | |
413 | |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
414 /* Make sure channel is setup right one last time */ |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
415 memset( &csetup, 0, sizeof( csetup ) ); |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
416 csetup.channel = SND_PCM_CHANNEL_PLAYBACK; |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
417 if ( snd_pcm_plugin_setup( audio_handle, &csetup ) < 0 ) |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
418 { |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
419 SDL_SetError("Unable to setup playback channel\n" ); |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
420 return(-1); |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
421 } |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
422 else |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
423 { |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
424 #ifdef DEBUG_AUDIO |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
425 fprintf(stderr,"requested format: %d\n",cparams.format.format); |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
426 fprintf(stderr,"requested frag size: %d\n",cparams.buf.block.frag_size); |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
427 fprintf(stderr,"requested max frags: %d\n\n",cparams.buf.block.frags_max); |
0 | 428 |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
429 fprintf(stderr,"real format: %d\n", csetup.format.format ); |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
430 fprintf(stderr,"real frag size : %d\n", csetup.buf.block.frag_size ); |
0 | 431 fprintf(stderr,"real max frags : %d\n", csetup.buf.block.frags_max ); |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
432 #endif |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
433 } |
0 | 434 |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
435 /* |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
436 Allocate memory to the audio buffer and initialize with silence (Note that |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
437 buffer size must be a multiple of fragment size, so find closest multiple) |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
438 */ |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
439 |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
440 twidth = snd_pcm_format_width(format); |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
441 if (twidth < 0) { |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
442 printf("snd_pcm_format_width failed\n"); |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
443 twidth = 0; |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
444 } |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
445 |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
446 #ifdef DEBUG_AUDIO |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
447 fprintf(stderr,"format is %d bits wide\n",twidth); |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
448 #endif |
0 | 449 |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
450 pcm_len = spec->size ; |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
451 |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
452 #ifdef DEBUG_AUDIO |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
453 fprintf(stderr,"pcm_len set to %d\n", pcm_len); |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
454 #endif |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
455 |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
456 if (pcm_len == 0){ |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
457 pcm_len = csetup.buf.block.frag_size; |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
458 } |
0 | 459 |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
460 pcm_buf = (Uint8*)malloc(pcm_len); |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
461 if (pcm_buf == NULL) { |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
462 SDL_SetError("pcm_buf malloc failed\n"); |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
463 return(-1); |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
464 } |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
465 memset(pcm_buf,spec->silence,pcm_len); |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
466 |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
467 #ifdef DEBUG_AUDIO |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
468 fprintf(stderr,"pcm_buf malloced and silenced.\n"); |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
469 #endif |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
470 |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
471 /* get the file descriptor */ |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
472 if( (audio_fd = snd_pcm_file_descriptor(audio_handle, SND_PCM_CHANNEL_PLAYBACK)) < 0){ |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
473 fprintf(stderr, "snd_pcm_file_descriptor failed with error code: %d\n", audio_fd); |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
474 } |
0 | 475 |
476 /* Trigger audio playback */ | |
477 rval = snd_pcm_plugin_prepare( audio_handle, SND_PCM_CHANNEL_PLAYBACK); | |
478 if (rval < 0) { | |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
479 SDL_SetError("snd_pcm_plugin_prepare failed: %s\n", snd_strerror (rval)); |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
480 return(-1); |
0 | 481 } |
418
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
482 |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
483 this->enabled = 1; |
337f3ec4c385
Updated the QNX audio code for QNX 6.2 (thanks Travis!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
484 |
0 | 485 /* Get the parent process id (we're the parent of the audio thread) */ |
486 parent = getpid(); | |
487 | |
488 /* We're ready to rock and roll. :-) */ | |
489 return(0); | |
490 } |