notaz.gp2x.de
/
pcsx_rearmed.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
allow multiple sound drivers to be compiled
[pcsx_rearmed.git]
/
plugins
/
dfsound
/
spu.c
diff --git
a/plugins/dfsound/spu.c
b/plugins/dfsound/spu.c
index
bf02946
..
45a7886
100644
(file)
--- a/
plugins/dfsound/spu.c
+++ b/
plugins/dfsound/spu.c
@@
-24,7
+24,7
@@
#include "externals.h"
#include "registers.h"
#include "externals.h"
#include "registers.h"
-#include "
dsoundoss
.h"
+#include "
out
.h"
#ifdef ENABLE_NLS
#include <libintl.h>
#ifdef ENABLE_NLS
#include <libintl.h>
@@
-243,7
+243,7
@@
INLINE void InterpolateDown(int ch)
// helpers for gauss interpolation
#define gval0 (((short*)(&s_chan[ch].SB[29]))[gpos])
// helpers for gauss interpolation
#define gval0 (((short*)(&s_chan[ch].SB[29]))[gpos])
-#define gval(x) (((short*)(&s_chan[ch].SB[29]))[(gpos+x)&3])
+#define gval(x) ((
int)(
(short*)(&s_chan[ch].SB[29]))[(gpos+x)&3])
#include "gauss_i.h"
#include "gauss_i.h"
@@
-296,8
+296,6
@@
INLINE void StartSound(int ch)
{s_chan[ch].spos=0x30000L;s_chan[ch].SB[28]=0;} // -> start with more decoding
else {s_chan[ch].spos=0x10000L;s_chan[ch].SB[31]=0;} // -> no/simple interpolation starts with one 44100 decoding
{s_chan[ch].spos=0x30000L;s_chan[ch].SB[28]=0;} // -> start with more decoding
else {s_chan[ch].spos=0x10000L;s_chan[ch].SB[31]=0;} // -> no/simple interpolation starts with one 44100 decoding
- check_irq(ch, s_chan[ch].pCurr); // just in case
-
dwNewChannel&=~(1<<ch); // clear new channel bit
}
dwNewChannel&=~(1<<ch); // clear new channel bit
}
@@
-388,7
+386,7
@@
INLINE int iGetInterpolationVal(int ch, int spos)
int vl, vr;int gpos;
vl = (spos >> 6) & ~3;
gpos = s_chan[ch].SB[28];
int vl, vr;int gpos;
vl = (spos >> 6) & ~3;
gpos = s_chan[ch].SB[28];
- vr=(gauss[vl]*gval0)&~2047;
+ vr=(gauss[vl]*
(int)
gval0)&~2047;
vr+=(gauss[vl+1]*gval(1))&~2047;
vr+=(gauss[vl+2]*gval(2))&~2047;
vr+=(gauss[vl+3]*gval(3))&~2047;
vr+=(gauss[vl+1]*gval(1))&~2047;
vr+=(gauss[vl+2]*gval(2))&~2047;
vr+=(gauss[vl+3]*gval(3))&~2047;
@@
-460,6
+458,8
@@
static int decode_block(int ch)
start = s_chan[ch].pLoop;
}
start = s_chan[ch].pLoop;
}
+ else
+ ret = check_irq(ch, start); // hack, see check_irq below..
predict_nr=(int)start[0];
shift_factor=predict_nr&0xf;
predict_nr=(int)start[0];
shift_factor=predict_nr&0xf;
@@
-473,14
+473,14
@@
static int decode_block(int ch)
start+=16;
start+=16;
- if(flags&1)
// 1: stop/loop
+ if(flags&1)
{
// 1: stop/loop
start = s_chan[ch].pLoop;
start = s_chan[ch].pLoop;
+ ret |= check_irq(ch, start); // hack.. :(
+ }
if (start - spuMemC >= 0x80000)
start = spuMemC;
if (start - spuMemC >= 0x80000)
start = spuMemC;
- ret = check_irq(ch, start);
-
s_chan[ch].pCurr = start; // store values for next cycle
s_chan[ch].prevflags = flags;
s_chan[ch].pCurr = start; // store values for next cycle
s_chan[ch].prevflags = flags;
@@
-492,6
+492,7
@@
static int skip_block(int ch)
{
unsigned char *start = s_chan[ch].pCurr;
int flags = start[1];
{
unsigned char *start = s_chan[ch].pCurr;
int flags = start[1];
+ int ret = check_irq(ch, start);
if(s_chan[ch].prevflags & 1)
start = s_chan[ch].pLoop;
if(s_chan[ch].prevflags & 1)
start = s_chan[ch].pLoop;
@@
-507,7
+508,7
@@
static int skip_block(int ch)
s_chan[ch].pCurr = start;
s_chan[ch].prevflags = flags;
s_chan[ch].pCurr = start;
s_chan[ch].prevflags = flags;
- return
check_irq(ch, start)
;
+ return
ret
;
}
#define make_do_samples(name, fmod_code, interp_start, interp1_code, interp2_code, interp_end) \
}
#define make_do_samples(name, fmod_code, interp_start, interp1_code, interp2_code, interp_end) \
@@
-532,10
+533,7
@@
static int do_samples_##name(int ch, int ns, int ns_to) \
sbpos = 0; \
d = decode_block(ch); \
if(d) \
sbpos = 0; \
d = decode_block(ch); \
if(d) \
- { \
- ret = ns; \
- goto out; \
- } \
+ ret = ns_to = ns + 1; \
} \
\
fa = SB[sbpos++]; \
} \
\
fa = SB[sbpos++]; \
@@
-547,7
+545,6
@@
static int do_samples_##name(int ch, int ns, int ns_to) \
spos += sinc; \
} \
\
spos += sinc; \
} \
\
-out: \
s_chan[ch].sinc = sinc; \
s_chan[ch].spos = spos; \
s_chan[ch].iSBPos = sbpos; \
s_chan[ch].sinc = sinc; \
s_chan[ch].spos = spos; \
s_chan[ch].iSBPos = sbpos; \
@@
-584,11
+581,14
@@
make_do_samples(simple, , ,
static int do_samples_noise(int ch, int ns, int ns_to)
{
int level, shift, bit;
static int do_samples_noise(int ch, int ns, int ns_to)
{
int level, shift, bit;
+ int ret = -1, d;
s_chan[ch].spos += s_chan[ch].sinc * (ns_to - ns);
while (s_chan[ch].spos >= 28*0x10000)
{
s_chan[ch].spos += s_chan[ch].sinc * (ns_to - ns);
while (s_chan[ch].spos >= 28*0x10000)
{
- skip_block(ch);
+ d = skip_block(ch);
+ if (d)
+ ret = ns_to;
s_chan[ch].spos -= 28*0x10000;
}
s_chan[ch].spos -= 28*0x10000;
}
@@
-612,7
+612,7
@@
static int do_samples_noise(int ch, int ns, int ns_to)
ChanBuf[ns] = (signed short)dwNoiseVal;
}
ChanBuf[ns] = (signed short)dwNoiseVal;
}
- return
-1
;
+ return
ret
;
}
#ifdef __arm__
}
#ifdef __arm__
@@
-697,7
+697,7
@@
static int do_samples(int forced_updates)
// until enuff free place is available/a new channel gets
// started
// until enuff free place is available/a new channel gets
// started
- if(!forced_updates &&
SoundGetBytesBuffered())
// still enuff data in sound buffer?
+ if(!forced_updates &&
out_current->busy())
// still enuff data in sound buffer?
{
return 0;
}
{
return 0;
}
@@
-740,8
+740,6
@@
static int do_samples(int forced_updates)
bIRQReturn=1;
lastch=ch;
lastns=ns_to=d;
bIRQReturn=1;
lastch=ch;
lastns=ns_to=d;
- if(d==0)
- break;
}
MixADSR(ch, ns_from, ns_to);
}
MixADSR(ch, ns_from, ns_to);
@@
-874,7
+872,7
@@
static int do_samples(int forced_updates)
// wanna have around 1/60 sec (16.666 ms) updates
if (iCycle++ > 16/FRAG_MSECS)
{
// wanna have around 1/60 sec (16.666 ms) updates
if (iCycle++ > 16/FRAG_MSECS)
{
-
SoundFeedStreamData((unsigned char *)
pSpuBuffer,
+
out_current->feed(
pSpuBuffer,
((unsigned char *)pS) - ((unsigned char *)pSpuBuffer));
pS = (short *)pSpuBuffer;
iCycle = 0;
((unsigned char *)pS) - ((unsigned char *)pSpuBuffer));
pS = (short *)pSpuBuffer;
iCycle = 0;
@@
-1058,7
+1056,7
@@
long CALLBACK SPUclose(void)
bSPUIsOpen = 0; // no more open
bSPUIsOpen = 0; // no more open
-
RemoveSound();
// no more sound handling
+
out_current->finish();
// no more sound handling
return 0;
}
return 0;
}