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");
93 memset(this->hidden->rawbuf, 0, mixlen);
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
AudioBootStrap PSPAUDIO_bootstrap
void(* PlayDevice)(_THIS)
void(* WaitDevice)(_THIS)
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
void(* ThreadInit)(_THIS)
int OnlyHasDefaultOutputDevice
EGLImageKHR EGLint EGLint * handle
void SDL_CalculateAudioSpec(SDL_AudioSpec *spec)
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)
Uint8 *(* GetDeviceBuf)(_THIS)