21 #include "../../SDL_internal.h"
23 #if SDL_AUDIO_DRIVER_HAIKU
27 #include <SoundPlayer.h>
30 #include "../../main/haiku/SDL_BeApp.h"
36 #include "../SDL_audio_c.h"
37 #include "../SDL_sysaudio.h"
48 const media_raw_audio_format &
format)
70 const int ilen = (int)
len;
89 HAIKUAUDIO_CloseDevice(
_THIS)
91 if (
_this->hidden->audio_obj) {
92 _this->hidden->audio_obj->Stop();
93 delete _this->hidden->audio_obj;
100 SIGHUP, SIGINT, SIGQUIT, SIGPIPE, SIGALRM, SIGTERM, SIGWINCH, 0
104 MaskSignals(sigset_t * omask)
113 sigprocmask(SIG_BLOCK, &
mask, omask);
117 UnmaskSignals(sigset_t * omask)
119 sigprocmask(SIG_SETMASK, omask,
NULL);
124 HAIKUAUDIO_OpenDevice(
_THIS,
void *
handle,
const char *devname,
int iscapture)
126 int valid_datatype = 0;
127 media_raw_audio_format
format;
139 format.byte_order = B_MEDIA_LITTLE_ENDIAN;
142 while ((!valid_datatype) && (test_format)) {
144 _this->spec.format = test_format;
145 switch (test_format) {
147 format.format = media_raw_audio_format::B_AUDIO_CHAR;
151 format.format = media_raw_audio_format::B_AUDIO_UCHAR;
155 format.format = media_raw_audio_format::B_AUDIO_SHORT;
159 format.format = media_raw_audio_format::B_AUDIO_SHORT;
160 format.byte_order = B_MEDIA_BIG_ENDIAN;
164 format.format = media_raw_audio_format::B_AUDIO_INT;
168 format.format = media_raw_audio_format::B_AUDIO_INT;
169 format.byte_order = B_MEDIA_BIG_ENDIAN;
173 format.format = media_raw_audio_format::B_AUDIO_FLOAT;
177 format.format = media_raw_audio_format::B_AUDIO_FLOAT;
178 format.byte_order = B_MEDIA_BIG_ENDIAN;
188 if (!valid_datatype) {
200 _this->hidden->audio_obj =
new BSoundPlayer(&
format,
"SDL Audio",
202 UnmaskSignals(&omask);
204 if (
_this->hidden->audio_obj->Start() == B_NO_ERROR) {
205 _this->hidden->audio_obj->SetHasData(
true);
215 HAIKUAUDIO_Deinitialize(
void)
243 "haiku",
"Haiku BSoundPlayer", HAIKUAUDIO_Init, 0