mirror of
https://github.com/hrydgard/ppsspp.git
synced 2024-10-08 03:13:25 +00:00
Init parameters in __UsbMicInit to avoid incorrect initial state when you exit to menu from ingame.
Also use memcpy instead of a loop.
This commit is contained in:
parent
5de721bb4c
commit
e349eb803d
@ -42,13 +42,13 @@ enum {
|
|||||||
int eventUsbMicAudioUpdate = -1;
|
int eventUsbMicAudioUpdate = -1;
|
||||||
|
|
||||||
QueueBuf *audioBuf = nullptr;
|
QueueBuf *audioBuf = nullptr;
|
||||||
u32 numNeedSamples = 0;
|
u32 numNeedSamples;
|
||||||
static std::vector<MicWaitInfo> waitingThreads;
|
static std::vector<MicWaitInfo> waitingThreads;
|
||||||
std::mutex wtMutex;
|
std::mutex wtMutex;
|
||||||
bool isNeedInput = false;
|
bool isNeedInput;
|
||||||
u32 curSampleRate = 44100;
|
u32 curSampleRate;
|
||||||
u32 curChannels = 1;
|
u32 curChannels;
|
||||||
int micState = 0; // 0 means stopped, 1 means started, for save state.
|
int micState; // 0 means stopped, 1 means started, for save state.
|
||||||
|
|
||||||
static void __UsbMicAudioUpdate(u64 userdata, int cyclesLate) {
|
static void __UsbMicAudioUpdate(u64 userdata, int cyclesLate) {
|
||||||
SceUID threadID = (SceUID)userdata;
|
SceUID threadID = (SceUID)userdata;
|
||||||
@ -64,12 +64,7 @@ static void __UsbMicAudioUpdate(u64 userdata, int cyclesLate) {
|
|||||||
if (Microphone::availableAudioBufSize() >= waitingThread.needSize) {
|
if (Microphone::availableAudioBufSize() >= waitingThread.needSize) {
|
||||||
u8 *tempbuf8 = new u8[waitingThread.needSize];
|
u8 *tempbuf8 = new u8[waitingThread.needSize];
|
||||||
Microphone::getAudioData(tempbuf8, waitingThread.needSize);
|
Microphone::getAudioData(tempbuf8, waitingThread.needSize);
|
||||||
u16 *tempbuf16 = (u16*)tempbuf8;
|
Memory::Memcpy(waitingThread.addr, tempbuf8, waitingThread.needSize);
|
||||||
for (u32 i = 0; i < waitingThread.needSize / 2; i++) {
|
|
||||||
if (Memory::IsValidAddress(waitingThread.addr + i * 2)) {
|
|
||||||
Memory::Write_U16(tempbuf16[i] & 0xFFFF, waitingThread.addr + i * 2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
delete[] tempbuf8;
|
delete[] tempbuf8;
|
||||||
u32 ret = __KernelGetWaitValue(threadID, error);
|
u32 ret = __KernelGetWaitValue(threadID, error);
|
||||||
DEBUG_LOG(HLE, "sceUsbMic: Waking up thread(%d)", (int)waitingThread.threadID);
|
DEBUG_LOG(HLE, "sceUsbMic: Waking up thread(%d)", (int)waitingThread.threadID);
|
||||||
@ -101,6 +96,16 @@ static void __UsbMicAudioUpdate(u64 userdata, int cyclesLate) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void __UsbMicInit() {
|
void __UsbMicInit() {
|
||||||
|
if (audioBuf) {
|
||||||
|
delete audioBuf;
|
||||||
|
audioBuf = nullptr;
|
||||||
|
}
|
||||||
|
numNeedSamples = 0;
|
||||||
|
waitingThreads.clear();
|
||||||
|
isNeedInput = false;
|
||||||
|
curSampleRate = 44100;
|
||||||
|
curChannels = 1;
|
||||||
|
micState = 0;
|
||||||
eventUsbMicAudioUpdate = CoreTiming::RegisterEvent("UsbMicAudioUpdate", &__UsbMicAudioUpdate);
|
eventUsbMicAudioUpdate = CoreTiming::RegisterEvent("UsbMicAudioUpdate", &__UsbMicAudioUpdate);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user