43 struct sio_hdl *sndHandle;
64 while(!data->killNow && device->
Connected)
67 ALubyte *WritePtr = data->mix_data;
70 while(len > 0 && !data->killNow)
72 wrote = sio_write(data->sndHandle, WritePtr, len);
75 ERR(
"sio_write failed\n");
101 data =
calloc(1,
sizeof(*data));
104 data->sndHandle = sio_open(
NULL, SIO_PLAY, 0);
105 if(data->sndHandle ==
NULL)
108 ERR(
"Could not open device\n");
122 sio_close(data->sndHandle);
165 par.le = SIO_LE_NATIVE;
169 if(!par.appbufsz) par.appbufsz = device->
UpdateSize;
171 if(!sio_setpar(data->sndHandle, &par) || !sio_getpar(data->sndHandle, &par))
173 ERR(
"Failed to set device parameters\n");
177 if(par.bits != par.bps*8)
179 ERR(
"Padded samples not supported (%u of %u bits)\n", par.bits, par.bps*8);
186 if(par.bits == 8 && par.sig == 1)
188 else if(par.bits == 8 && par.sig == 0)
190 else if(par.bits == 16 && par.sig == 1)
192 else if(par.bits == 16 && par.sig == 0)
194 else if(par.bits == 32 && par.sig == 1)
196 else if(par.bits == 32 && par.sig == 0)
200 ERR(
"Unhandled sample format: %s %u-bit\n", (par.sig?
"signed":
"unsigned"), par.bits);
205 device->
NumUpdates = (par.bufsz/par.round) + 1;
216 if(!sio_start(data->sndHandle))
218 ERR(
"Error starting playback\n");
223 data->mix_data =
calloc(1, data->data_size);
226 if(data->thread ==
NULL)
228 sio_stop(data->sndHandle);
229 free(data->mix_data);
230 data->mix_data =
NULL;
249 if(!sio_stop(data->sndHandle))
250 ERR(
"Error stopping device\n");
252 free(data->mix_data);
253 data->mix_data =
NULL;
GLint GLenum GLsizei GLsizei GLsizei GLint GLenum GLenum type
static const ALCchar sndio_device[]
char * strdup(const char *inStr)
static ALCenum sndio_open_playback(ALCdevice *device, const ALCchar *deviceName)
ALvoid aluMixData(ALCdevice *device, ALvoid *buffer, ALsizei size)
static ALCboolean sndio_start_playback(ALCdevice *device)
ALint64 ALCdevice_GetLatencyDefault(ALCdevice *device)
void SetDefaultChannelOrder(ALCdevice *device)
static ALuint sndio_proc(ALvoid *ptr)
ALvoid aluHandleDisconnect(ALCdevice *device)
#define ALCdevice_Unlock(a)
static void sndio_close_playback(ALCdevice *device)
ALuint StopThread(ALvoid *thread)
static ALCboolean sndio_reset_playback(ALCdevice *device)
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
static ALCboolean sndio_load(void)
void alc_sndio_probe(enum DevProbe type)
enum DevFmtChannels FmtChans
static void sndio_stop_playback(ALCdevice *device)
ALCboolean alc_sndio_init(BackendFuncs *func_list)
static SDL_Thread * thread
static const BackendFuncs sndio_funcs
void ALCdevice_LockDefault(ALCdevice *device)
void alc_sndio_deinit(void)
#define ALC_INVALID_VALUE
void ALCdevice_UnlockDefault(ALCdevice *device)
#define ALCdevice_Lock(a)
void AppendAllDevicesList(const ALCchar *name)
ALvoid * StartThread(ALuint(*func)(ALvoid *), ALvoid *ptr)
static __inline ALuint FrameSizeFromDevFmt(enum DevFmtChannels chans, enum DevFmtType type)