From 730d9f8fd9736758549c95e3bb2f0dcbf6ed684a Mon Sep 17 00:00:00 2001 From: shenweip <1037567878@qq.com> Date: Mon, 23 Nov 2020 15:49:14 +0800 Subject: [PATCH] Clean up. --- Core/HLE/sceAudio.cpp | 2 +- Core/HLE/sceUsbCam.cpp | 4 ++-- Core/HLE/sceUsbMic.cpp | 25 +++++++++++-------------- 3 files changed, 14 insertions(+), 17 deletions(-) diff --git a/Core/HLE/sceAudio.cpp b/Core/HLE/sceAudio.cpp index 0ef9583e1a..37f7eaa3e9 100644 --- a/Core/HLE/sceAudio.cpp +++ b/Core/HLE/sceAudio.cpp @@ -473,7 +473,7 @@ static u32 sceAudioSRCOutputBlocking(u32 vol, u32 buf) { } static int sceAudioInputBlocking(u32 maxSamples, u32 sampleRate, u32 bufAddr) { - ERROR_LOG(HLE, "UNIMPL sceAudioInputBlocking: maxSamples: %d, samplerate: %d, bufAddr: %08x", maxSamples, sampleRate, bufAddr); + INFO_LOG(HLE, "sceAudioInputBlocking: maxSamples: %d, samplerate: %d, bufAddr: %08x", maxSamples, sampleRate, bufAddr); return __MicInput(maxSamples, sampleRate, bufAddr); } diff --git a/Core/HLE/sceUsbCam.cpp b/Core/HLE/sceUsbCam.cpp index d24b6ed2eb..89d73f009f 100644 --- a/Core/HLE/sceUsbCam.cpp +++ b/Core/HLE/sceUsbCam.cpp @@ -133,12 +133,12 @@ static int sceUsbCamStopMic() { } static int sceUsbCamReadMicBlocking(u32 bufAddr, u32 size) { - INFO_LOG(HLE, "UNIMPL sceUsbCamReadMicBlocking: size: %d", size); + INFO_LOG(HLE, "sceUsbCamReadMicBlocking: size: %d", size); return __MicInput(size >> 1, config->micParam.frequency, bufAddr); } static int sceUsbCamReadMic(u32 bufAddr, u32 size) { - INFO_LOG(HLE, "UNIMPL sceUsbCamReadMic: size: %d", size); + INFO_LOG(HLE, "sceUsbCamReadMic: size: %d", size); return __MicInput(size >> 1, config->micParam.frequency, bufAddr, false); } diff --git a/Core/HLE/sceUsbMic.cpp b/Core/HLE/sceUsbMic.cpp index 131edfe40a..f28d524b40 100644 --- a/Core/HLE/sceUsbMic.cpp +++ b/Core/HLE/sceUsbMic.cpp @@ -43,21 +43,19 @@ enum { int eventUsbMicAudioUpdate = -1; -QueueBuf *audioBuf = nullptr; -u32 numNeedSamples; +static QueueBuf *audioBuf = nullptr; +static u32 numNeedSamples; static std::vector waitingThreads; -std::mutex wtMutex; -bool isNeedInput; -u32 curSampleRate; -u32 curChannels; -u32 readMicDataLength; -int micState; // 0 means stopped, 1 means started, for save state. +static bool isNeedInput; +static u32 curSampleRate; +static u32 curChannels; +static u32 readMicDataLength; +static int micState; // 0 means stopped, 1 means started, for save state. static void __UsbMicAudioUpdate(u64 userdata, int cyclesLate) { SceUID threadID = (SceUID)userdata; u32 error; int count = 0; - std::unique_lock lock(wtMutex); for (auto waitingThread : waitingThreads) { if (waitingThread.threadID == threadID) { SceUID waitID = __KernelGetWaitID(threadID, WAITTYPE_MICINPUT, error); @@ -95,7 +93,6 @@ static void __UsbMicAudioUpdate(u64 userdata, int cyclesLate) { } ++count; } - lock.unlock(); } void __UsbMicInit() { @@ -121,7 +118,7 @@ void __UsbMicShutdown() { } void __UsbMicDoState(PointerWrap &p) { - auto s = p.Section("sceUsbMic", 0, 2); + auto s = p.Section("sceUsbMic", 0, 3); if (!s) { return; } @@ -139,7 +136,9 @@ void __UsbMicDoState(PointerWrap &p) { } else { eventUsbMicAudioUpdate = -1; } - + if (s > 2) { + Do(p, readMicDataLength); + } if (!audioBuf && numNeedSamples > 0) { audioBuf = new QueueBuf(numNeedSamples << 1); } @@ -431,9 +430,7 @@ u32 __MicInput(u32 maxSamples, u32 sampleRate, u32 bufAddr, bool block) { eventUsbMicAudioUpdate = CoreTiming::RegisterEvent("UsbMicAudioUpdate", &__UsbMicAudioUpdate); CoreTiming::ScheduleEvent(usToCycles(waitTimeus), eventUsbMicAudioUpdate, __KernelGetCurThread()); MicWaitInfo waitInfo = { __KernelGetCurThread(), bufAddr, size, sampleRate }; - std::unique_lock lock(wtMutex); waitingThreads.push_back(waitInfo); - lock.unlock(); DEBUG_LOG(HLE, "MicInputBlocking: blocking thread(%d)", (int)__KernelGetCurThread()); __KernelWaitCurThread(WAITTYPE_MICINPUT, 1, size, 0, false, "blocking microphone");