mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-04-02 11:01:50 -04:00
Makes a distinction between blocking and non blocking modes.
This commit is contained in:
parent
aac4cbb1dc
commit
c70c8cad6e
4 changed files with 17 additions and 7 deletions
|
@ -474,7 +474,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);
|
||||
return __MicInputBlocking(maxSamples, sampleRate, bufAddr);
|
||||
return __MicInput(maxSamples, sampleRate, bufAddr);
|
||||
}
|
||||
|
||||
static u32 sceAudioRoutingSetMode(u32 mode) {
|
||||
|
|
|
@ -134,12 +134,12 @@ static int sceUsbCamStopMic() {
|
|||
|
||||
static int sceUsbCamReadMicBlocking(u32 bufAddr, u32 size) {
|
||||
INFO_LOG(HLE, "UNIMPL sceUsbCamReadMicBlocking: size: %d", size);
|
||||
return __MicInputBlocking(size >> 1, config->micParam.frequency, bufAddr);
|
||||
return __MicInput(size >> 1, config->micParam.frequency, bufAddr);
|
||||
}
|
||||
|
||||
static int sceUsbCamReadMic(u32 bufAddr, u32 size) {
|
||||
INFO_LOG(HLE, "UNIMPL sceUsbCamReadMic: size: %d", size);
|
||||
return __MicInputBlocking(size >> 1, config->micParam.frequency, bufAddr);
|
||||
return __MicInput(size >> 1, config->micParam.frequency, bufAddr, false);
|
||||
}
|
||||
|
||||
static int sceUsbCamSetupVideo(u32 paramAddr, u32 workareaAddr, int wasize) {
|
||||
|
|
|
@ -267,7 +267,7 @@ static int sceUsbMicInputBlocking(u32 maxSamples, u32 sampleRate, u32 bufAddr) {
|
|||
}
|
||||
curSampleRate = sampleRate;
|
||||
curChannels = 1;
|
||||
return __MicInputBlocking(maxSamples, sampleRate, bufAddr);
|
||||
return __MicInput(maxSamples, sampleRate, bufAddr);
|
||||
}
|
||||
|
||||
static int sceUsbMicInputInitEx(u32 paramAddr) {
|
||||
|
@ -390,7 +390,7 @@ void Microphone::onMicDeviceChange() {
|
|||
}
|
||||
}
|
||||
|
||||
u32 __MicInputBlocking(u32 maxSamples, u32 sampleRate, u32 bufAddr) {
|
||||
u32 __MicInput(u32 maxSamples, u32 sampleRate, u32 bufAddr, bool block) {
|
||||
u32 size = maxSamples << 1;
|
||||
if (!audioBuf) {
|
||||
audioBuf = new QueueBuf(size);
|
||||
|
@ -405,6 +405,16 @@ u32 __MicInputBlocking(u32 maxSamples, u32 sampleRate, u32 bufAddr) {
|
|||
std::vector<u32> *param = new std::vector<u32>({ sampleRate, 1 });
|
||||
Microphone::startMic(param);
|
||||
}
|
||||
if (!block) {
|
||||
size = Microphone::availableAudioBufSize();
|
||||
if (size > 0) {
|
||||
u8 *tempbuf8 = new u8[size];
|
||||
Microphone::getAudioData(tempbuf8, Microphone::availableAudioBufSize());
|
||||
Memory::Memcpy(bufAddr, tempbuf8, size);
|
||||
delete[] tempbuf8;
|
||||
}
|
||||
return size;
|
||||
}
|
||||
u64 waitTimeus = 0;
|
||||
if (Microphone::availableAudioBufSize() < size) {
|
||||
waitTimeus = (size - Microphone::availableAudioBufSize()) * 1000000 / 2 / sampleRate;
|
||||
|
@ -419,7 +429,7 @@ u32 __MicInputBlocking(u32 maxSamples, u32 sampleRate, u32 bufAddr) {
|
|||
DEBUG_LOG(HLE, "MicInputBlocking: blocking thread(%d)", (int)__KernelGetCurThread());
|
||||
__KernelWaitCurThread(WAITTYPE_MICINPUT, 1, size, 0, false, "blocking microphone");
|
||||
|
||||
return maxSamples;
|
||||
return size;
|
||||
}
|
||||
|
||||
const HLEFunction sceUsbMic[] =
|
||||
|
|
|
@ -78,4 +78,4 @@ namespace Microphone {
|
|||
void onMicDeviceChange();
|
||||
}
|
||||
|
||||
u32 __MicInputBlocking(u32 maxSamples, u32 sampleRate, u32 bufAddr);
|
||||
u32 __MicInput(u32 maxSamples, u32 sampleRate, u32 bufAddr, bool block = true);
|
||||
|
|
Loading…
Add table
Reference in a new issue