From a4bbf35e6e2d98e6bf07484840a267606f7a72b1 Mon Sep 17 00:00:00 2001 From: ramapcsx2 Date: Mon, 18 Aug 2008 16:35:49 +0000 Subject: [PATCH] Added an optional "Enable / Disable timestretching" plugin interface. If used correctly on a SPU2 plugin, helps to improve audio quality. (At fullspeed the game shouldn't require timestretching) git-svn-id: http://pcsx2-playground.googlecode.com/svn/trunk@52 a6443dda-0b58-4228-96e9-037be469359c --- pcsx2/Misc.c | 19 ++++++++++++++----- pcsx2/PS2Edefs.h | 3 +++ pcsx2/Plugins.c | 1 + 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/pcsx2/Misc.c b/pcsx2/Misc.c index 7afeebfee6..4a0399af89 100644 --- a/pcsx2/Misc.c +++ b/pcsx2/Misc.c @@ -931,22 +931,31 @@ void ProcessFKeys(int fkey, int shift) switch(CHECK_FRAMELIMIT) { case PCSX2_FRAMELIMIT_NORMAL: - if( CHECK_MULTIGS ) GSRingBufSimplePacket(GS_RINGTYPE_FRAMESKIP, 0, 0, 0); + /*if( CHECK_MULTIGS ) GSRingBufSimplePacket(GS_RINGTYPE_FRAMESKIP, 0, 0, 0); else GSsetFrameSkip(0); - Cpu->ExecuteVU1Block = recExecuteVU1Block; + Cpu->ExecuteVU1Block = recExecuteVU1Block;*/ + if(SPU2setTimeStretcher != NULL) + SPU2setTimeStretcher(1); SysPrintf("Normal - Frame Limit Mode Changed\n"); break; case PCSX2_FRAMELIMIT_LIMIT: - if( CHECK_MULTIGS ) GSRingBufSimplePacket(GS_RINGTYPE_FRAMESKIP, 0, 0, 0); + /*if( CHECK_MULTIGS ) GSRingBufSimplePacket(GS_RINGTYPE_FRAMESKIP, 0, 0, 0); else GSsetFrameSkip(0); - Cpu->ExecuteVU1Block = recExecuteVU1Block; + Cpu->ExecuteVU1Block = recExecuteVU1Block;*/ + //Quality option, turn off timestretching on the SPU2 plugin + if(SPU2setTimeStretcher != NULL) + SPU2setTimeStretcher(0); SysPrintf("Limit - Frame Limit Mode Changed\n"); break; case PCSX2_FRAMELIMIT_SKIP: - Cpu->ExecuteVU1Block = recExecuteVU1Block; + //Cpu->ExecuteVU1Block = recExecuteVU1Block; + if(SPU2setTimeStretcher != NULL) + SPU2setTimeStretcher(1); SysPrintf("Frame Skip - Frame Limit Mode Changed\n"); break; case PCSX2_FRAMELIMIT_VUSKIP: + if(SPU2setTimeStretcher != NULL) + SPU2setTimeStretcher(1); SysPrintf("VU Skip - Frame Limit Mode Changed\n"); break; } diff --git a/pcsx2/PS2Edefs.h b/pcsx2/PS2Edefs.h index 3ced6d4dec..8acc6f9873 100644 --- a/pcsx2/PS2Edefs.h +++ b/pcsx2/PS2Edefs.h @@ -359,6 +359,7 @@ void CALLBACK SPU2irqCallback(void (*SPU2callback)(),void (*DMA4callback)(),void int CALLBACK SPU2setupRecording(int start, void* pData); void CALLBACK SPU2setClockPtr(u32* ptr); +void CALLBACK SPU2setTimeStretcher(short int enable); void CALLBACK SPU2async(u32 cycles); s32 CALLBACK SPU2freeze(int mode, freezeData *data); @@ -592,6 +593,7 @@ typedef void (CALLBACK* _SPU2irqCallback)(void (*SPU2callback)(),void (*DMA4call typedef int (CALLBACK* _SPU2setupRecording)(int, void*); typedef void (CALLBACK* _SPU2setClockPtr)(u32*ptr); +typedef void (CALLBACK* _SPU2setTimeStretcher)(short int enable); typedef u32 (CALLBACK* _SPU2ReadMemAddr)(int core); typedef void (CALLBACK* _SPU2WriteMemAddr)(int core,u32 value); @@ -791,6 +793,7 @@ _SPU2WriteMemAddr SPU2WriteMemAddr; _SPU2irqCallback SPU2irqCallback; _SPU2setClockPtr SPU2setClockPtr; +_SPU2setTimeStretcher SPU2setTimeStretcher; _SPU2async SPU2async; _SPU2freeze SPU2freeze; diff --git a/pcsx2/Plugins.c b/pcsx2/Plugins.c index 6844336f8c..006c0cfc04 100644 --- a/pcsx2/Plugins.c +++ b/pcsx2/Plugins.c @@ -251,6 +251,7 @@ int LoadSPU2plugin(char *filename) { LoadSPU2sym1(irqCallback, "SPU2irqCallback"); LoadSPU2symN(setClockPtr, "SPU2setClockPtr"); + LoadSPU2symN(setTimeStretcher, "SPU2setTimeStretcher"); LoadSPU2symN(setupRecording, "SPU2setupRecording");