21 #include "../../SDL_internal.h"
23 #if SDL_AUDIO_DRIVER_PSP
33 #include "../SDL_audio_c.h"
34 #include "../SDL_audiodev_c.h"
35 #include "../SDL_sysaudio.h"
39 #include <pspthreadman.h>
42 #define PSPAUDIO_DRIVER_NAME "psp"
45 PSPAUDIO_OpenDevice(
_THIS,
void *
handle,
const char *devname,
int iscapture)
50 if (this->hidden ==
NULL) {
74 this->hidden->rawbuf = (
Uint8 *) memalign(64,
mixlen);
75 if (this->hidden->rawbuf ==
NULL) {
81 format = PSP_AUDIO_FORMAT_MONO;
84 format = PSP_AUDIO_FORMAT_STEREO;
86 this->hidden->channel = sceAudioChReserve(PSP_AUDIO_NEXT_CHANNEL, this->
spec.
samples, format);
87 if (this->hidden->channel < 0) {
88 free(this->hidden->rawbuf);
89 this->hidden->rawbuf =
NULL;
90 return SDL_SetError(
"Couldn't reserve hardware channel");
95 this->hidden->mixbufs[
i] = &this->hidden->rawbuf[
i * this->
spec.
size];
98 this->hidden->next_buffer = 0;
102 static void PSPAUDIO_PlayDevice(
_THIS)
104 Uint8 *
mixbuf = this->hidden->mixbufs[this->hidden->next_buffer];
107 sceAudioOutputBlocking(this->hidden->channel, PSP_AUDIO_VOLUME_MAX,
mixbuf);
109 sceAudioOutputPannedBlocking(this->hidden->channel, PSP_AUDIO_VOLUME_MAX, PSP_AUDIO_VOLUME_MAX,
mixbuf);
112 this->hidden->next_buffer = (this->hidden->next_buffer + 1) %
NUM_BUFFERS;
116 static void PSPAUDIO_WaitDevice(
_THIS)
122 return this->hidden->mixbufs[this->hidden->next_buffer];
125 static void PSPAUDIO_CloseDevice(
_THIS)
127 if (this->hidden->channel >= 0) {
128 sceAudioChRelease(this->hidden->channel);
130 free(this->hidden->rawbuf);
134 static void PSPAUDIO_ThreadInit(
_THIS)
139 SceKernelThreadInfo status;
140 thid = sceKernelGetThreadId();
141 status.size =
sizeof(SceKernelThreadInfo);
142 if (sceKernelReferThreadStatus(thid, &status) == 0) {
143 sceKernelChangeThreadPriority(thid, status.currentPriority - 1);
174 "psp",
"PSP audio driver", PSPAUDIO_Init, 0