From 3f8c920436b4dd32274240d0ae03e245b63ee948 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Wed, 15 May 2013 22:49:54 -0700 Subject: [PATCH 1/8] Accept any negative channel as autoselect. And fix error codes in sceAudioChReserve(). --- Core/HLE/sceAudio.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/Core/HLE/sceAudio.cpp b/Core/HLE/sceAudio.cpp index 28aea9423c..7bd1d4ab10 100644 --- a/Core/HLE/sceAudio.cpp +++ b/Core/HLE/sceAudio.cpp @@ -163,11 +163,15 @@ static u32 GetFreeChannel() { } u32 sceAudioChReserve(u32 chan, u32 sampleCount, u32 format) { - if (chan == (u32)-1) { + if ((int)chan < 0) { chan = GetFreeChannel(); + if ((int)chan < 0) { + ERROR_LOG(HLE, "sceAudioChReserve - no channels remaining"); + return SCE_ERROR_AUDIO_NO_CHANNELS_AVAILABLE; + } } if (chan >= PSP_AUDIO_CHANNEL_MAX) { - ERROR_LOG(HLE ,"sceAudioChReserve(%08x, %08x, %08x) - bad channel", chan, sampleCount, format); + ERROR_LOG(HLE, "sceAudioChReserve(%08x, %08x, %08x) - bad channel", chan, sampleCount, format); return SCE_ERROR_AUDIO_INVALID_CHANNEL; } if (format != PSP_AUDIO_FORMAT_MONO && format != PSP_AUDIO_FORMAT_STEREO) { @@ -175,8 +179,8 @@ u32 sceAudioChReserve(u32 chan, u32 sampleCount, u32 format) { return SCE_ERROR_AUDIO_INVALID_FORMAT; } if (chans[chan].reserved) { - ERROR_LOG(HLE,"sceAudioChReserve - reserve channel failed"); - return SCE_ERROR_AUDIO_NO_CHANNELS_AVAILABLE; + ERROR_LOG(HLE, "sceAudioChReserve - reserve channel failed"); + return SCE_ERROR_AUDIO_INVALID_CHANNEL; } DEBUG_LOG(HLE, "sceAudioChReserve(%08x, %08x, %08x)", chan, sampleCount, format); From 674cd9c1a1afcb40950b8aa02b9e447230149eb8 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Wed, 15 May 2013 22:51:17 -0700 Subject: [PATCH 2/8] Auto select the highest available channel. This is what tests show, and what the PSP does. It makes sense, since the game might hardcode 0/1 but some library might use autoselect. Or something. --- Core/HLE/sceAudio.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Core/HLE/sceAudio.cpp b/Core/HLE/sceAudio.cpp index 7bd1d4ab10..8396975ac5 100644 --- a/Core/HLE/sceAudio.cpp +++ b/Core/HLE/sceAudio.cpp @@ -156,9 +156,10 @@ int sceAudioGetChannelRestLength(u32 chan) { } static u32 GetFreeChannel() { - for (u32 i = 0; i < PSP_AUDIO_CHANNEL_MAX ; i++) + for (u32 i = PSP_AUDIO_CHANNEL_MAX - 1; i > 0; --i) { if (!chans[i].reserved) return i; + } return -1; } From 8b3b666612526156833b4f2a17fa6a09d45a26a5 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Wed, 15 May 2013 22:56:17 -0700 Subject: [PATCH 3/8] Return an error for invalid audio sample sizes. --- Core/HLE/sceAudio.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Core/HLE/sceAudio.cpp b/Core/HLE/sceAudio.cpp index 8396975ac5..b11cb91db8 100644 --- a/Core/HLE/sceAudio.cpp +++ b/Core/HLE/sceAudio.cpp @@ -24,6 +24,8 @@ #include "__sceAudio.h" #include "HLE.h" +const int PSP_AUDIO_SAMPLE_MAX = 65536 - 64; + void AudioChannel::DoState(PointerWrap &p) { p.Do(reserved); @@ -175,6 +177,10 @@ u32 sceAudioChReserve(u32 chan, u32 sampleCount, u32 format) { ERROR_LOG(HLE, "sceAudioChReserve(%08x, %08x, %08x) - bad channel", chan, sampleCount, format); return SCE_ERROR_AUDIO_INVALID_CHANNEL; } + if ((sampleCount & 63) != 0 || sampleCount == 0 || sampleCount > PSP_AUDIO_SAMPLE_MAX) { + ERROR_LOG(HLE, "sceAudioChReserve(%08x, %08x, %08x) - invalid sample count", chan, sampleCount, format); + return SCE_ERROR_AUDIO_OUTPUT_SAMPLE_DATA_SIZE_NOT_ALIGNED; + } if (format != PSP_AUDIO_FORMAT_MONO && format != PSP_AUDIO_FORMAT_STEREO) { ERROR_LOG(HLE, "sceAudioChReserve(%08x, %08x, %08x) - invalid format", chan, sampleCount, format); return SCE_ERROR_AUDIO_INVALID_FORMAT; @@ -188,7 +194,7 @@ u32 sceAudioChReserve(u32 chan, u32 sampleCount, u32 format) { chans[chan].sampleCount = sampleCount; chans[chan].format = format; chans[chan].reserved = true; - return chan; + return chan; } u32 sceAudioChRelease(u32 chan) { From 0ab30ecb07c46033ac3d6d660239c83bd7c7330c Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Wed, 15 May 2013 23:18:57 -0700 Subject: [PATCH 4/8] Use a separate channel for SRC/Output2. Tests on the PSP show that all 8 channels can be reserved/used at the same time as *either* Output2 or SRC (but SRC and Output2 cannot be used at the same time.) --- Core/HLE/__sceAudio.cpp | 6 ++--- Core/HLE/sceAudio.cpp | 52 ++++++++++++++++++++--------------------- Core/HLE/sceAudio.h | 8 +++++-- 3 files changed, 35 insertions(+), 31 deletions(-) diff --git a/Core/HLE/__sceAudio.cpp b/Core/HLE/__sceAudio.cpp index 6b88e9d37c..46f9897b30 100644 --- a/Core/HLE/__sceAudio.cpp +++ b/Core/HLE/__sceAudio.cpp @@ -83,7 +83,7 @@ void __AudioInit() CoreTiming::ScheduleEvent(usToCycles(audioIntervalUs), eventAudioUpdate, 0); CoreTiming::ScheduleEvent(usToCycles(audioHostIntervalUs), eventHostAudioUpdate, 0); - for (int i = 0; i < 8; i++) + for (int i = 0; i < PSP_AUDIO_CHANNEL_MAX + 1; i++) chans[i].clear(); } @@ -116,7 +116,7 @@ void __AudioDoState(PointerWrap &p) void __AudioShutdown() { - for (int i = 0; i < 8; i++) + for (int i = 0; i < PSP_AUDIO_CHANNEL_MAX + 1; i++) chans[i].clear(); } @@ -200,7 +200,7 @@ void __AudioUpdate() s32 mixBuffer[hwBlockSize * 2]; memset(mixBuffer, 0, sizeof(mixBuffer)); - for (int i = 0; i < PSP_AUDIO_CHANNEL_MAX; i++) + for (int i = 0; i < PSP_AUDIO_CHANNEL_MAX + 1; i++) { if (!chans[i].reserved) continue; diff --git a/Core/HLE/sceAudio.cpp b/Core/HLE/sceAudio.cpp index b11cb91db8..9c40b41d9d 100644 --- a/Core/HLE/sceAudio.cpp +++ b/Core/HLE/sceAudio.cpp @@ -40,10 +40,10 @@ void AudioChannel::DoState(PointerWrap &p) } // There's a second Audio api called Audio2 that only has one channel, I guess the 8 channel api was overkill. -// We simply map it to the first of the 8 channels. +// We simply map it to an extra channel after the 8 channels, since they can be used concurrently. -AudioChannel chans[8]; -int src; //not initialized and default 0 +// The extra channel is for SRC/Output2. +AudioChannel chans[PSP_AUDIO_CHANNEL_MAX + 1]; // Enqueues the buffer pointer on the channel. If channel buffer queue is full (2 items?) will block until it isn't. // For solid audio output we'll need a queue length of 2 buffers at least, we'll try that first. @@ -273,8 +273,8 @@ u32 sceAudioEnd(){ u32 sceAudioOutput2Reserve(u32 sampleCount){ DEBUG_LOG(HLE,"sceAudioOutput2Reserve(%08x)", sampleCount); - chans[0].sampleCount = sampleCount; - chans[0].reserved = true; + chans[PSP_AUDIO_CHANNEL_OUTPUT2].sampleCount = sampleCount; + chans[PSP_AUDIO_CHANNEL_OUTPUT2].reserved = true; return 0; } @@ -285,35 +285,35 @@ u32 sceAudioOutput2OutputBlocking(u32 vol, u32 dataPtr){ return SCE_ERROR_AUDIO_INVALID_VOLUME; } DEBUG_LOG(HLE,"sceAudioOutput2OutputBlocking(%08x, %08x)", vol, dataPtr); - chans[0].leftVolume = vol; - chans[0].rightVolume = vol; - chans[0].sampleAddress = dataPtr; - return __AudioEnqueue(chans[0], 0, true); + chans[PSP_AUDIO_CHANNEL_OUTPUT2].leftVolume = vol; + chans[PSP_AUDIO_CHANNEL_OUTPUT2].rightVolume = vol; + chans[PSP_AUDIO_CHANNEL_OUTPUT2].sampleAddress = dataPtr; + return __AudioEnqueue(chans[PSP_AUDIO_CHANNEL_OUTPUT2], PSP_AUDIO_CHANNEL_OUTPUT2, true); } u32 sceAudioOutput2ChangeLength(u32 sampleCount){ DEBUG_LOG(HLE,"sceAudioOutput2ChangeLength(%08x)", sampleCount); - if (!chans[0].reserved) { + if (!chans[PSP_AUDIO_CHANNEL_OUTPUT2].reserved) { DEBUG_LOG(HLE,"sceAudioOutput2ChangeLength(%08x) - channel not reserved ", sampleCount); return SCE_ERROR_AUDIO_CHANNEL_NOT_RESERVED; } - chans[0].sampleCount = sampleCount; + chans[PSP_AUDIO_CHANNEL_OUTPUT2].sampleCount = sampleCount; return 0; } u32 sceAudioOutput2GetRestSample(){ DEBUG_LOG(HLE,"sceAudioOutput2GetRestSample()"); - if (!chans[0].reserved) { + if (!chans[PSP_AUDIO_CHANNEL_OUTPUT2].reserved) { DEBUG_LOG(HLE,"sceAudioOutput2GetRestSample() - channel not reserved "); return SCE_ERROR_AUDIO_CHANNEL_NOT_RESERVED; } - return (u32) chans[0].sampleQueue.size() * 2; + return (u32) chans[PSP_AUDIO_CHANNEL_OUTPUT2].sampleQueue.size() * 2; } u32 sceAudioOutput2Release(){ DEBUG_LOG(HLE,"sceAudioOutput2Release()"); - chans[0].clear(); - chans[0].reserved = false; + chans[PSP_AUDIO_CHANNEL_OUTPUT2].clear(); + chans[PSP_AUDIO_CHANNEL_OUTPUT2].reserved = false; return 0; } @@ -334,14 +334,14 @@ u32 sceAudioSetVolumeOffset() { } u32 sceAudioSRCChReserve(u32 sampleCount, u32 freq, u32 format) { - if (chans[src].reserved) { + if (chans[PSP_AUDIO_CHANNEL_SRC].reserved) { DEBUG_LOG(HLE, "sceAudioSRCChReserve(%08x, %08x, %08x) - channel already reserved ", sampleCount, freq, format); return SCE_ERROR_AUDIO_CHANNEL_ALREADY_RESERVED; } else { DEBUG_LOG(HLE, "sceAudioSRCChReserve(%08x, %08x, %08x)", sampleCount, freq, format); - chans[src].reserved = true; - chans[src].sampleCount = sampleCount; - chans[src].format = format; + chans[PSP_AUDIO_CHANNEL_SRC].reserved = true; + chans[PSP_AUDIO_CHANNEL_SRC].sampleCount = sampleCount; + chans[PSP_AUDIO_CHANNEL_SRC].format = format; __AudioSetOutputFrequency(freq); } return 0; @@ -349,12 +349,12 @@ u32 sceAudioSRCChReserve(u32 sampleCount, u32 freq, u32 format) { u32 sceAudioSRCChRelease() { DEBUG_LOG(HLE, "sceAudioSRCChRelease()"); - if (!chans[src].reserved) { + if (!chans[PSP_AUDIO_CHANNEL_SRC].reserved) { DEBUG_LOG(HLE, "sceAudioSRCChRelease() - channel already reserved "); return SCE_ERROR_AUDIO_CHANNEL_NOT_RESERVED; } - chans[src].clear(); - chans[src].reserved = false; + chans[PSP_AUDIO_CHANNEL_SRC].clear(); + chans[PSP_AUDIO_CHANNEL_SRC].reserved = false; return 0; } @@ -364,10 +364,10 @@ u32 sceAudioSRCOutputBlocking(u32 vol, u32 buf) { return SCE_ERROR_AUDIO_INVALID_VOLUME; } DEBUG_LOG(HLE, "sceAudioSRCOutputBlocking(%08x, %08x)", vol, buf); - chans[src].leftVolume = vol; - chans[src].rightVolume = vol; - chans[src].sampleAddress = buf; - return __AudioEnqueue(chans[src], src, true); + chans[PSP_AUDIO_CHANNEL_SRC].leftVolume = vol; + chans[PSP_AUDIO_CHANNEL_SRC].rightVolume = vol; + chans[PSP_AUDIO_CHANNEL_SRC].sampleAddress = buf; + return __AudioEnqueue(chans[PSP_AUDIO_CHANNEL_SRC], PSP_AUDIO_CHANNEL_SRC, true); } const HLEFunction sceAudio[] = diff --git a/Core/HLE/sceAudio.h b/Core/HLE/sceAudio.h index dae00e7a48..60a8f0fc64 100644 --- a/Core/HLE/sceAudio.h +++ b/Core/HLE/sceAudio.h @@ -42,7 +42,10 @@ enum PspAudioFrequencies { PSP_AUDIO_FREQ_44K = 44100, PSP_AUDIO_FREQ_48K = 48 #define SCE_ERROR_AUDIO_CHANNEL_ALREADY_RESERVED 0x80268002 -#define PSP_AUDIO_CHANNEL_MAX 8 +const int PSP_AUDIO_CHANNEL_MAX = 8; + +const int PSP_AUDIO_CHANNEL_SRC = 8; +const int PSP_AUDIO_CHANNEL_OUTPUT2 = 8; struct AudioChannel { @@ -83,6 +86,7 @@ struct AudioChannel } }; -extern AudioChannel chans[8]; +// The extra channel is for SRC/Output2. +extern AudioChannel chans[PSP_AUDIO_CHANNEL_MAX + 1]; void Register_sceAudio(); From 4eee3af19bec065002c94e829813ad65d6315ad1 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Wed, 15 May 2013 23:25:51 -0700 Subject: [PATCH 5/8] Error when trying to reserve Output2 twice. --- Core/HLE/sceAudio.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/Core/HLE/sceAudio.cpp b/Core/HLE/sceAudio.cpp index 9c40b41d9d..ae4a027e87 100644 --- a/Core/HLE/sceAudio.cpp +++ b/Core/HLE/sceAudio.cpp @@ -272,9 +272,14 @@ u32 sceAudioEnd(){ } u32 sceAudioOutput2Reserve(u32 sampleCount){ - DEBUG_LOG(HLE,"sceAudioOutput2Reserve(%08x)", sampleCount); - chans[PSP_AUDIO_CHANNEL_OUTPUT2].sampleCount = sampleCount; - chans[PSP_AUDIO_CHANNEL_OUTPUT2].reserved = true; + if (chans[PSP_AUDIO_CHANNEL_OUTPUT2].reserved) { + DEBUG_LOG(HLE, "sceAudioOutput2Reserve(%08x) - channel already reserved ", sampleCount); + return SCE_ERROR_AUDIO_CHANNEL_ALREADY_RESERVED; + } else { + DEBUG_LOG(HLE,"sceAudioOutput2Reserve(%08x)", sampleCount); + chans[PSP_AUDIO_CHANNEL_OUTPUT2].sampleCount = sampleCount; + chans[PSP_AUDIO_CHANNEL_OUTPUT2].reserved = true; + } return 0; } From 8544171a849a3f75152888011d46985b8822429b Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Thu, 16 May 2013 00:06:54 -0700 Subject: [PATCH 6/8] Validate the sample count in SRC and Output2. --- Core/HLE/sceAudio.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/Core/HLE/sceAudio.cpp b/Core/HLE/sceAudio.cpp index ae4a027e87..ce4d741060 100644 --- a/Core/HLE/sceAudio.cpp +++ b/Core/HLE/sceAudio.cpp @@ -271,9 +271,12 @@ u32 sceAudioEnd(){ return 0; } -u32 sceAudioOutput2Reserve(u32 sampleCount){ - if (chans[PSP_AUDIO_CHANNEL_OUTPUT2].reserved) { - DEBUG_LOG(HLE, "sceAudioOutput2Reserve(%08x) - channel already reserved ", sampleCount); +u32 sceAudioOutput2Reserve(u32 sampleCount) { + if (sampleCount < 17 || sampleCount > 4111) { + DEBUG_LOG(HLE, "sceAudioOutput2Reserve(%08x) - invalid sample count", sampleCount); + return SCE_KERNEL_ERROR_INVALID_SIZE; + } else if (chans[PSP_AUDIO_CHANNEL_OUTPUT2].reserved) { + DEBUG_LOG(HLE, "sceAudioOutput2Reserve(%08x) - channel already reserved", sampleCount); return SCE_ERROR_AUDIO_CHANNEL_ALREADY_RESERVED; } else { DEBUG_LOG(HLE,"sceAudioOutput2Reserve(%08x)", sampleCount); @@ -339,7 +342,10 @@ u32 sceAudioSetVolumeOffset() { } u32 sceAudioSRCChReserve(u32 sampleCount, u32 freq, u32 format) { - if (chans[PSP_AUDIO_CHANNEL_SRC].reserved) { + if (sampleCount < 17 || sampleCount > 4111) { + DEBUG_LOG(HLE, "sceAudioSRCChReserve(%08x, %08x, %08x) - invalid sample count", sampleCount, freq, format); + return SCE_KERNEL_ERROR_INVALID_SIZE; + } else if (chans[PSP_AUDIO_CHANNEL_SRC].reserved) { DEBUG_LOG(HLE, "sceAudioSRCChReserve(%08x, %08x, %08x) - channel already reserved ", sampleCount, freq, format); return SCE_ERROR_AUDIO_CHANNEL_ALREADY_RESERVED; } else { From 857e12d27d10f85270faf86d255ae92451a31bd2 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Thu, 16 May 2013 00:28:51 -0700 Subject: [PATCH 7/8] Validate the SRC format, and enforce STEREO. Were these actually outputting audio before? --- Core/HLE/sceAudio.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/Core/HLE/sceAudio.cpp b/Core/HLE/sceAudio.cpp index ce4d741060..7ab4f29ad4 100644 --- a/Core/HLE/sceAudio.cpp +++ b/Core/HLE/sceAudio.cpp @@ -25,6 +25,7 @@ #include "HLE.h" const int PSP_AUDIO_SAMPLE_MAX = 65536 - 64; +const int PSP_AUDIO_ERROR_SRC_FORMAT_4 = 0x80000003; void AudioChannel::DoState(PointerWrap &p) { @@ -281,6 +282,7 @@ u32 sceAudioOutput2Reserve(u32 sampleCount) { } else { DEBUG_LOG(HLE,"sceAudioOutput2Reserve(%08x)", sampleCount); chans[PSP_AUDIO_CHANNEL_OUTPUT2].sampleCount = sampleCount; + chans[PSP_AUDIO_CHANNEL_OUTPUT2].format = PSP_AUDIO_FORMAT_STEREO; chans[PSP_AUDIO_CHANNEL_OUTPUT2].reserved = true; } return 0; @@ -342,7 +344,13 @@ u32 sceAudioSetVolumeOffset() { } u32 sceAudioSRCChReserve(u32 sampleCount, u32 freq, u32 format) { - if (sampleCount < 17 || sampleCount > 4111) { + if (format == 4) { + DEBUG_LOG(HLE, "sceAudioSRCChReserve(%08x, %08x, %08x) - unexpected format", sampleCount, freq, format); + return PSP_AUDIO_ERROR_SRC_FORMAT_4; + } else if (format != 2) { + DEBUG_LOG(HLE, "sceAudioSRCChReserve(%08x, %08x, %08x) - unexpected format", sampleCount, freq, format); + return SCE_KERNEL_ERROR_INVALID_SIZE; + } else if (sampleCount < 17 || sampleCount > 4111) { DEBUG_LOG(HLE, "sceAudioSRCChReserve(%08x, %08x, %08x) - invalid sample count", sampleCount, freq, format); return SCE_KERNEL_ERROR_INVALID_SIZE; } else if (chans[PSP_AUDIO_CHANNEL_SRC].reserved) { @@ -352,7 +360,7 @@ u32 sceAudioSRCChReserve(u32 sampleCount, u32 freq, u32 format) { DEBUG_LOG(HLE, "sceAudioSRCChReserve(%08x, %08x, %08x)", sampleCount, freq, format); chans[PSP_AUDIO_CHANNEL_SRC].reserved = true; chans[PSP_AUDIO_CHANNEL_SRC].sampleCount = sampleCount; - chans[PSP_AUDIO_CHANNEL_SRC].format = format; + chans[PSP_AUDIO_CHANNEL_SRC].format = format == 2 ? PSP_AUDIO_FORMAT_STEREO : PSP_AUDIO_FORMAT_MONO; __AudioSetOutputFrequency(freq); } return 0; From 8a985e36ce88e65395f1f4c365cfe6d189ac6bff Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Thu, 16 May 2013 01:53:38 -0700 Subject: [PATCH 8/8] Correct some logging to use ERROR_LOG. Oops, was just copy and pasting the other wrong ones. --- Core/HLE/sceAudio.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/Core/HLE/sceAudio.cpp b/Core/HLE/sceAudio.cpp index 7ab4f29ad4..73ef01ffbf 100644 --- a/Core/HLE/sceAudio.cpp +++ b/Core/HLE/sceAudio.cpp @@ -274,10 +274,10 @@ u32 sceAudioEnd(){ u32 sceAudioOutput2Reserve(u32 sampleCount) { if (sampleCount < 17 || sampleCount > 4111) { - DEBUG_LOG(HLE, "sceAudioOutput2Reserve(%08x) - invalid sample count", sampleCount); + ERROR_LOG(HLE, "sceAudioOutput2Reserve(%08x) - invalid sample count", sampleCount); return SCE_KERNEL_ERROR_INVALID_SIZE; } else if (chans[PSP_AUDIO_CHANNEL_OUTPUT2].reserved) { - DEBUG_LOG(HLE, "sceAudioOutput2Reserve(%08x) - channel already reserved", sampleCount); + ERROR_LOG(HLE, "sceAudioOutput2Reserve(%08x) - channel already reserved", sampleCount); return SCE_ERROR_AUDIO_CHANNEL_ALREADY_RESERVED; } else { DEBUG_LOG(HLE,"sceAudioOutput2Reserve(%08x)", sampleCount); @@ -302,21 +302,21 @@ u32 sceAudioOutput2OutputBlocking(u32 vol, u32 dataPtr){ } u32 sceAudioOutput2ChangeLength(u32 sampleCount){ - DEBUG_LOG(HLE,"sceAudioOutput2ChangeLength(%08x)", sampleCount); if (!chans[PSP_AUDIO_CHANNEL_OUTPUT2].reserved) { - DEBUG_LOG(HLE,"sceAudioOutput2ChangeLength(%08x) - channel not reserved ", sampleCount); + ERROR_LOG(HLE,"sceAudioOutput2ChangeLength(%08x) - channel not reserved ", sampleCount); return SCE_ERROR_AUDIO_CHANNEL_NOT_RESERVED; } + DEBUG_LOG(HLE,"sceAudioOutput2ChangeLength(%08x)", sampleCount); chans[PSP_AUDIO_CHANNEL_OUTPUT2].sampleCount = sampleCount; return 0; } u32 sceAudioOutput2GetRestSample(){ - DEBUG_LOG(HLE,"sceAudioOutput2GetRestSample()"); if (!chans[PSP_AUDIO_CHANNEL_OUTPUT2].reserved) { - DEBUG_LOG(HLE,"sceAudioOutput2GetRestSample() - channel not reserved "); + ERROR_LOG(HLE,"sceAudioOutput2GetRestSample() - channel not reserved "); return SCE_ERROR_AUDIO_CHANNEL_NOT_RESERVED; } + DEBUG_LOG(HLE,"sceAudioOutput2GetRestSample()"); return (u32) chans[PSP_AUDIO_CHANNEL_OUTPUT2].sampleQueue.size() * 2; } @@ -345,16 +345,16 @@ u32 sceAudioSetVolumeOffset() { u32 sceAudioSRCChReserve(u32 sampleCount, u32 freq, u32 format) { if (format == 4) { - DEBUG_LOG(HLE, "sceAudioSRCChReserve(%08x, %08x, %08x) - unexpected format", sampleCount, freq, format); + ERROR_LOG(HLE, "sceAudioSRCChReserve(%08x, %08x, %08x) - unexpected format", sampleCount, freq, format); return PSP_AUDIO_ERROR_SRC_FORMAT_4; } else if (format != 2) { - DEBUG_LOG(HLE, "sceAudioSRCChReserve(%08x, %08x, %08x) - unexpected format", sampleCount, freq, format); + ERROR_LOG(HLE, "sceAudioSRCChReserve(%08x, %08x, %08x) - unexpected format", sampleCount, freq, format); return SCE_KERNEL_ERROR_INVALID_SIZE; } else if (sampleCount < 17 || sampleCount > 4111) { - DEBUG_LOG(HLE, "sceAudioSRCChReserve(%08x, %08x, %08x) - invalid sample count", sampleCount, freq, format); + ERROR_LOG(HLE, "sceAudioSRCChReserve(%08x, %08x, %08x) - invalid sample count", sampleCount, freq, format); return SCE_KERNEL_ERROR_INVALID_SIZE; } else if (chans[PSP_AUDIO_CHANNEL_SRC].reserved) { - DEBUG_LOG(HLE, "sceAudioSRCChReserve(%08x, %08x, %08x) - channel already reserved ", sampleCount, freq, format); + ERROR_LOG(HLE, "sceAudioSRCChReserve(%08x, %08x, %08x) - channel already reserved ", sampleCount, freq, format); return SCE_ERROR_AUDIO_CHANNEL_ALREADY_RESERVED; } else { DEBUG_LOG(HLE, "sceAudioSRCChReserve(%08x, %08x, %08x)", sampleCount, freq, format); @@ -367,11 +367,11 @@ u32 sceAudioSRCChReserve(u32 sampleCount, u32 freq, u32 format) { } u32 sceAudioSRCChRelease() { - DEBUG_LOG(HLE, "sceAudioSRCChRelease()"); if (!chans[PSP_AUDIO_CHANNEL_SRC].reserved) { - DEBUG_LOG(HLE, "sceAudioSRCChRelease() - channel already reserved "); + ERROR_LOG(HLE, "sceAudioSRCChRelease() - channel already reserved "); return SCE_ERROR_AUDIO_CHANNEL_NOT_RESERVED; } + DEBUG_LOG(HLE, "sceAudioSRCChRelease()"); chans[PSP_AUDIO_CHANNEL_SRC].clear(); chans[PSP_AUDIO_CHANNEL_SRC].reserved = false; return 0;