From d6f682a32937fc9e1b91dfe120c7951018324d7a Mon Sep 17 00:00:00 2001 From: David Miller Date: Wed, 1 May 2019 12:01:45 -0400 Subject: [PATCH 1/3] audiostream only wait if at speed --- core/oslib/audiostream.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/core/oslib/audiostream.cpp b/core/oslib/audiostream.cpp index ea6845bed..b07666b7a 100644 --- a/core/oslib/audiostream.cpp +++ b/core/oslib/audiostream.cpp @@ -117,10 +117,14 @@ audiobackend_t* GetAudioBackend(std::string slug) return NULL; } +extern double full_rps; + u32 PushAudio(void* frame, u32 amt, bool wait) { + bool do_wait = (full_rps<50.f)?false:wait; + if (audiobackend_current != NULL) { - return audiobackend_current->push(frame, amt, wait); + return audiobackend_current->push(frame, amt, do_wait); } return 0; } From ac9e6d147d67b5da8713e3658f51ed6ad010ede9 Mon Sep 17 00:00:00 2001 From: David Quintana Date: Thu, 2 May 2019 03:21:22 +0200 Subject: [PATCH 2/3] Change speed-dependant limiting to rely on time dilation instead of frame rate. --- core/hw/pvr/spg.cpp | 4 +++- core/oslib/audiostream.cpp | 13 +++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/core/hw/pvr/spg.cpp b/core/hw/pvr/spg.cpp index 0cf4c4d0b..b0970c3f1 100755 --- a/core/hw/pvr/spg.cpp +++ b/core/hw/pvr/spg.cpp @@ -88,6 +88,8 @@ double full_rps; static u32 lightgun_line = 0xffff; static u32 lightgun_hpos; +double mspdf; + u32 fskip=0; //called from sh4 context , should update pvr/ta state and everything else int spg_line_sched(int tag, int cycl, int jit) @@ -174,7 +176,7 @@ int spg_line_sched(int tag, int cycl, int jit) } double frames_done=spd_cpu/2; - double mspdf=1/frames_done*1000; + mspdf=1/frames_done*1000; full_rps=(spd_fps+fskip/ts); diff --git a/core/oslib/audiostream.cpp b/core/oslib/audiostream.cpp index b07666b7a..5e6a981ed 100644 --- a/core/oslib/audiostream.cpp +++ b/core/oslib/audiostream.cpp @@ -117,14 +117,10 @@ audiobackend_t* GetAudioBackend(std::string slug) return NULL; } -extern double full_rps; - u32 PushAudio(void* frame, u32 amt, bool wait) { - bool do_wait = (full_rps<50.f)?false:wait; - if (audiobackend_current != NULL) { - return audiobackend_current->push(frame, amt, do_wait); + return audiobackend_current->push(frame, amt, wait); } return 0; } @@ -144,6 +140,8 @@ u32 asRingFreeCount() return RingBufferSampleCount-asRingUsedCount(); } +extern double mspdf; +double mspdf_smooth; void WriteSample(s16 r, s16 l) { const u32 ptr=(WritePtr+1)%RingBufferSampleCount; @@ -153,7 +151,10 @@ void WriteSample(s16 r, s16 l) if (WritePtr==(SAMPLE_COUNT-1)) { - PushAudio(RingBuffer,SAMPLE_COUNT,settings.aica.LimitFPS); + mspdf_smooth = mspdf_smooth * 0.9 + mspdf * 0.1; + bool do_wait = settings.aica.LimitFPS && (mspdf_smooth <= 11); + + PushAudio(RingBuffer,SAMPLE_COUNT, do_wait); } } From f307f9d5ad47a038fd5967b69bee2563ceb61a7f Mon Sep 17 00:00:00 2001 From: David Quintana Date: Thu, 2 May 2019 03:36:10 +0200 Subject: [PATCH 3/3] Simplify. Smoothing adds no value there. --- core/oslib/audiostream.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/core/oslib/audiostream.cpp b/core/oslib/audiostream.cpp index 5e6a981ed..1d6f4f079 100644 --- a/core/oslib/audiostream.cpp +++ b/core/oslib/audiostream.cpp @@ -141,7 +141,6 @@ u32 asRingFreeCount() } extern double mspdf; -double mspdf_smooth; void WriteSample(s16 r, s16 l) { const u32 ptr=(WritePtr+1)%RingBufferSampleCount; @@ -151,8 +150,7 @@ void WriteSample(s16 r, s16 l) if (WritePtr==(SAMPLE_COUNT-1)) { - mspdf_smooth = mspdf_smooth * 0.9 + mspdf * 0.1; - bool do_wait = settings.aica.LimitFPS && (mspdf_smooth <= 11); + bool do_wait = settings.aica.LimitFPS && (mspdf <= 11); PushAudio(RingBuffer,SAMPLE_COUNT, do_wait); }