aboutsummaryrefslogtreecommitdiff
path: root/plugins/dfsound
diff options
context:
space:
mode:
authornotaz2013-01-05 00:55:59 +0200
committernotaz2013-01-05 04:06:39 +0200
commite34a4bd3b3eec3f95f5ce0cac1c4d47bf03a0409 (patch)
treeb62d37a38d36a6bb2f87a01fdfe40412ebc4c06d /plugins/dfsound
parent97e07db913cf94c05b338a86a0525476472fddb2 (diff)
downloadpcsx_rearmed-e34a4bd3b3eec3f95f5ce0cac1c4d47bf03a0409.tar.gz
pcsx_rearmed-e34a4bd3b3eec3f95f5ce0cac1c4d47bf03a0409.tar.bz2
pcsx_rearmed-e34a4bd3b3eec3f95f5ce0cac1c4d47bf03a0409.zip
spu: check buffer state less often
Diffstat (limited to 'plugins/dfsound')
-rw-r--r--plugins/dfsound/spu.c40
1 files changed, 21 insertions, 19 deletions
diff --git a/plugins/dfsound/spu.c b/plugins/dfsound/spu.c
index 9f91b8b..1456a21 100644
--- a/plugins/dfsound/spu.c
+++ b/plugins/dfsound/spu.c
@@ -689,25 +689,18 @@ static int do_samples(int forced_updates)
int ch,d,silentch;
int bIRQReturn=0;
+ // ok, at the beginning we are looking if there is
+ // enuff free place in the dsound/oss buffer to
+ // fill in new data, or if there is a new channel to start.
+ // if not, we return until enuff free place is available
+ // /a new channel gets started
+
+ if(!forced_updates && out_current->busy()) // still enuff data in sound buffer?
+ return 0;
+
while(!bIRQReturn)
{
- // ok, at the beginning we are looking if there is
- // enuff free place in the dsound/oss buffer to
- // fill in new data, or if there is a new channel to start.
- // if not, we wait (thread) or return (timer/spuasync)
- // until enuff free place is available/a new channel gets
- // started
-
- if(!forced_updates && out_current->busy()) // still enuff data in sound buffer?
- {
- return 0;
- }
-
cycles_since_update = 0;
- if(forced_updates > 0)
- forced_updates--;
-
- //--------------------------------------------------// continue from irq handling in timer mode?
ns_from=0;
ns_to=NSSIZE;
@@ -872,12 +865,21 @@ static int do_samples(int forced_updates)
// feed the sound
// wanna have around 1/60 sec (16.666 ms) updates
- if (iCycle++ > 16/FRAG_MSECS)
+ if (iCycle++ >= 16/FRAG_MSECS)
{
- out_current->feed(pSpuBuffer,
- ((unsigned char *)pS) - ((unsigned char *)pSpuBuffer));
+ out_current->feed(pSpuBuffer, (unsigned char *)pS - pSpuBuffer);
pS = (short *)pSpuBuffer;
iCycle = 0;
+
+ if(!forced_updates && out_current->busy())
+ break;
+ }
+
+ if(forced_updates > 0)
+ {
+ forced_updates--;
+ if(forced_updates == 0 && out_current->busy())
+ break;
}
}