21 #include "../../SDL_internal.h" 23 #if SDL_AUDIO_DRIVER_PSP 33 #include "../SDL_audiomem.h" 34 #include "../SDL_audio_c.h" 35 #include "../SDL_audiodev_c.h" 36 #include "../SDL_sysaudio.h" 40 #include <pspthreadman.h> 43 #define PSPAUD_DRIVER_NAME "psp" 46 PSPAUD_OpenDevice(
_THIS,
void *handle,
const char *devname,
int iscapture)
51 if (this->hidden ==
NULL) {
54 SDL_memset(this->hidden, 0,
sizeof(*this->hidden));
88 this->hidden->rawbuf = (
Uint8 *) memalign(64, mixlen);
89 if (this->hidden->rawbuf ==
NULL) {
95 format = PSP_AUDIO_FORMAT_MONO;
97 format = PSP_AUDIO_FORMAT_STEREO;
99 this->hidden->channel = sceAudioChReserve(PSP_AUDIO_NEXT_CHANNEL, this->
spec.
samples, format);
100 if (this->hidden->channel < 0) {
101 free(this->hidden->rawbuf);
102 this->hidden->rawbuf =
NULL;
103 return SDL_SetError(
"Couldn't reserve hardware channel");
106 memset(this->hidden->rawbuf, 0, mixlen);
108 this->hidden->mixbufs[
i] = &this->hidden->rawbuf[i * this->
spec.
size];
111 this->hidden->next_buffer = 0;
115 static void PSPAUD_PlayDevice(
_THIS)
117 Uint8 *
mixbuf = this->hidden->mixbufs[this->hidden->next_buffer];
120 sceAudioOutputBlocking(this->hidden->channel, PSP_AUDIO_VOLUME_MAX, mixbuf);
122 sceAudioOutputPannedBlocking(this->hidden->channel, PSP_AUDIO_VOLUME_MAX, PSP_AUDIO_VOLUME_MAX, mixbuf);
125 this->hidden->next_buffer = (this->hidden->next_buffer + 1) %
NUM_BUFFERS;
129 static void PSPAUD_WaitDevice(
_THIS)
135 return this->hidden->mixbufs[this->hidden->next_buffer];
138 static void PSPAUD_CloseDevice(
_THIS)
140 if (this->hidden->channel >= 0) {
141 sceAudioChRelease(this->hidden->channel);
142 this->hidden->channel = -1;
145 if (this->hidden->rawbuf !=
NULL) {
146 free(this->hidden->rawbuf);
147 this->hidden->rawbuf =
NULL;
150 static void PSPAUD_ThreadInit(
_THIS)
155 SceKernelThreadInfo status;
156 thid = sceKernelGetThreadId();
157 status.size =
sizeof(SceKernelThreadInfo);
158 if (sceKernelReferThreadStatus(thid, &status) == 0) {
159 sceKernelChangeThreadPriority(thid, status.currentPriority - 1);
192 "psp",
"PSP audio driver", PSPAUD_Init, 0
void(* PlayDevice)(_THIS)
void(* WaitDevice)(_THIS)
void(* ThreadInit)(_THIS)
int OnlyHasDefaultOutputDevice
uint8_t Uint8
An unsigned 8-bit integer type.
#define SDL_AUDIO_BITSIZE(x)
return Display return Display Bool Bool int int int return Display XEvent Bool(*) XPointer return Display return Display Drawable _Xconst char unsigned int unsigned int return Display Pixmap Pixmap XColor XColor unsigned int unsigned int return Display _Xconst char char int char return Display Visual unsigned int int int char unsigned int unsigned int in i)
int(* OpenDevice)(_THIS, void *handle, const char *devname, int iscapture)
#define SDL_OutOfMemory()
void(* CloseDevice)(_THIS)
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Uint8 *(* GetDeviceBuf)(_THIS)
AudioBootStrap PSPAUD_bootstrap