notaz.gp2x.de
/
pcsx_rearmed.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
3047dae
)
spu: don't leave garbage in capture buffers
master
github/master
author
notaz
<notasas@gmail.com>
Mon, 25 Mar 2024 21:26:10 +0000
(23:26 +0200)
committer
notaz
<notasas@gmail.com>
Mon, 25 Mar 2024 21:27:32 +0000
(23:27 +0200)
plugins/dfsound/externals.h
patch
|
blob
|
blame
|
history
plugins/dfsound/freeze.c
patch
|
blob
|
blame
|
history
plugins/dfsound/spu.c
patch
|
blob
|
blame
|
history
plugins/dfsound/xa.c
patch
|
blob
|
blame
|
history
diff --git
a/plugins/dfsound/externals.h
b/plugins/dfsound/externals.h
index
ac0960f
..
8e479c5
100644
(file)
--- a/
plugins/dfsound/externals.h
+++ b/
plugins/dfsound/externals.h
@@
-214,6
+214,7
@@
typedef struct
int iLeftXAVol;
\r
int iRightXAVol;
\r
\r
int iLeftXAVol;
\r
int iRightXAVol;
\r
\r
+ int cdClearSamples; // extra samples to clear the capture buffers
\r
struct { // channel volume in the cd controller
\r
unsigned char ll, lr, rl, rr; // see cdr.Attenuator* in cdrom.c
\r
} cdv; // applied on spu side for easier emulation
\r
struct { // channel volume in the cd controller
\r
unsigned char ll, lr, rl, rr; // see cdr.Attenuator* in cdrom.c
\r
} cdv; // applied on spu side for easier emulation
\r
diff --git
a/plugins/dfsound/freeze.c
b/plugins/dfsound/freeze.c
index
bddf0ad
..
36b8995
100644
(file)
--- a/
plugins/dfsound/freeze.c
+++ b/
plugins/dfsound/freeze.c
@@
-338,6
+338,7
@@
long CALLBACK SPUfreeze(unsigned int ulFreezeMode, SPUFreeze_t * pF,
\r
spu.XAPlay = spu.XAFeed = spu.XAStart;
\r
spu.CDDAPlay = spu.CDDAFeed = spu.CDDAStart;
\r
\r
spu.XAPlay = spu.XAFeed = spu.XAStart;
\r
spu.CDDAPlay = spu.CDDAFeed = spu.CDDAStart;
\r
+ spu.cdClearSamples = 512;
\r
if (pFO && pFO->xa_left && pF->xaS.nsamples) { // start xa again
\r
FeedXA(&pF->xaS);
\r
spu.XAPlay = spu.XAFeed - pFO->xa_left;
\r
if (pFO && pFO->xa_left && pF->xaS.nsamples) { // start xa again
\r
FeedXA(&pF->xaS);
\r
spu.XAPlay = spu.XAFeed - pFO->xa_left;
\r
diff --git
a/plugins/dfsound/spu.c
b/plugins/dfsound/spu.c
index
022a1e3
..
ed5b4b5
100644
(file)
--- a/
plugins/dfsound/spu.c
+++ b/
plugins/dfsound/spu.c
@@
-1389,6
+1389,7
@@
void CALLBACK SPUplayADPCMchannel(xa_decode_t *xap, unsigned int cycle, int is_s
FeedXA(xap); // call main XA feeder
spu.xapGlobal = xap; // store info for save states
FeedXA(xap); // call main XA feeder
spu.xapGlobal = xap; // store info for save states
+ spu.cdClearSamples = 512;
}
// CDDA AUDIO
}
// CDDA AUDIO
@@
-1401,6
+1402,7
@@
int CALLBACK SPUplayCDDAchannel(short *pcm, int nbytes, unsigned int cycle, int
do_samples(cycle, 1); // catch up to prevent source underflows later
FeedCDDA((unsigned char *)pcm, nbytes);
do_samples(cycle, 1); // catch up to prevent source underflows later
FeedCDDA((unsigned char *)pcm, nbytes);
+ spu.cdClearSamples = 512;
return 0;
}
return 0;
}
diff --git
a/plugins/dfsound/xa.c
b/plugins/dfsound/xa.c
index
6b5433f
..
380d138
100644
(file)
--- a/
plugins/dfsound/xa.c
+++ b/
plugins/dfsound/xa.c
@@
-152,8
+152,16
@@
INLINE void MixCD(int *SSumLR, int *RVB, int ns_to, int decode_pos)
}
spu.XALastVal = v;
}
}
spu.XALastVal = v;
}
- else
+ else if (spu.cdClearSamples > 0)
+ {
+ for(ns = 0; ns < ns_to; ns++)
+ {
+ spu.spuMem[cursor] = spu.spuMem[cursor + 0x400/2] = 0;
+ cursor = (cursor + 1) & 0x1ff;
+ }
+ spu.cdClearSamples -= ns_to;
spu.XALastVal = 0;
spu.XALastVal = 0;
+ }
}
////////////////////////////////////////////////////////////////////////
}
////////////////////////////////////////////////////////////////////////