PSP2: Fix audio
This commit is contained in:
parent
d8c3306bf2
commit
20ba3d1390
@ -29,7 +29,6 @@ The ports are vaguely usable, but by no means should be considered stable.
|
|||||||
* Hardware acceleration
|
* Hardware acceleration
|
||||||
|
|
||||||
### PS Vita (master)
|
### PS Vita (master)
|
||||||
* Fix audio
|
|
||||||
* Make it faster
|
* Make it faster
|
||||||
* Threaded renderer shim
|
* Threaded renderer shim
|
||||||
* Hardware acceleration
|
* Hardware acceleration
|
||||||
|
@ -55,24 +55,27 @@ static void _mapVitaKey(struct GBAInputMap* map, int pspKey, enum GBAKey key) {
|
|||||||
|
|
||||||
static THREAD_ENTRY _audioThread(void* context) {
|
static THREAD_ENTRY _audioThread(void* context) {
|
||||||
struct GBAPSP2AudioContext* audio = (struct GBAPSP2AudioContext*) context;
|
struct GBAPSP2AudioContext* audio = (struct GBAPSP2AudioContext*) context;
|
||||||
struct GBAStereoSample buffer[PSP2_AUDIO_BUFFER_SIZE];
|
struct GBAStereoSample buffer[PSP2_SAMPLES];
|
||||||
int audioPort = sceAudioOutOpenPort(PSP2_AUDIO_OUT_PORT_TYPE_MAIN, PSP2_AUDIO_BUFFER_SIZE, 48000, PSP2_AUDIO_OUT_MODE_STEREO);
|
int audioPort = sceAudioOutOpenPort(PSP2_AUDIO_OUT_PORT_TYPE_MAIN, PSP2_SAMPLES, 48000, PSP2_AUDIO_OUT_MODE_STEREO);
|
||||||
while (audio->running) {
|
while (audio->running) {
|
||||||
|
memset(buffer, 0, sizeof(buffer));
|
||||||
MutexLock(&audio->mutex);
|
MutexLock(&audio->mutex);
|
||||||
int len = CircleBufferSize(&audio->buffer);
|
int len = CircleBufferSize(&audio->buffer);
|
||||||
len /= sizeof(buffer[0]);
|
len /= sizeof(buffer[0]);
|
||||||
if (len > PSP2_AUDIO_BUFFER_SIZE) {
|
if (len > PSP2_SAMPLES) {
|
||||||
len = PSP2_AUDIO_BUFFER_SIZE;
|
len = PSP2_SAMPLES;
|
||||||
}
|
}
|
||||||
if (len > 0) {
|
if (len > 0) {
|
||||||
len &= ~(PSP2_AUDIO_MIN_LEN - 1);
|
len &= ~(PSP2_AUDIO_MIN_LEN - 1);
|
||||||
CircleBufferRead(&audio->buffer, buffer, len * sizeof(buffer[0]));
|
CircleBufferRead(&audio->buffer, buffer, len * sizeof(buffer[0]));
|
||||||
MutexUnlock(&audio->mutex);
|
MutexUnlock(&audio->mutex);
|
||||||
sceAudioOutSetConfig(audioPort, len, -1, -1);
|
|
||||||
sceAudioOutOutput(audioPort, buffer);
|
sceAudioOutOutput(audioPort, buffer);
|
||||||
MutexLock(&audio->mutex);
|
MutexLock(&audio->mutex);
|
||||||
}
|
}
|
||||||
ConditionWait(&audio->cond, &audio->mutex);
|
|
||||||
|
if (CircleBufferSize(&audio->buffer) < PSP2_SAMPLES) {
|
||||||
|
ConditionWait(&audio->cond, &audio->mutex);
|
||||||
|
}
|
||||||
MutexUnlock(&audio->mutex);
|
MutexUnlock(&audio->mutex);
|
||||||
}
|
}
|
||||||
sceAudioOutReleasePort(audioPort);
|
sceAudioOutReleasePort(audioPort);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user