X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=plugins%2Fdfsound%2Fexternals.h;h=909639926bc35de62e0db4c6cbaaa837f4531f25;hp=0146553a324c74acafb0459cbbdcfe8631858524;hb=54933c929d2e418e925ae823e3fa7607b2d5ac85;hpb=f2aec10aa8e3befe7e89070e8559d070835cc23e diff --git a/plugins/dfsound/externals.h b/plugins/dfsound/externals.h index 0146553a..90963992 100644 --- a/plugins/dfsound/externals.h +++ b/plugins/dfsound/externals.h @@ -21,6 +21,14 @@ // generic defines ///////////////////////////////////////////////////////// +#ifdef __GNUC__ +#define noinline __attribute__((noinline)) +#define unlikely(x) __builtin_expect((x), 0) +#else +#define noinline +#define unlikely(x) x +#endif + #define PSE_LT_SPU 4 #define PSE_SPU_ERR_SUCCESS 0 #define PSE_SPU_ERR -60 @@ -38,34 +46,14 @@ // num of channels #define MAXCHAN 24 -// ~ FRAG_MSECS ms of data // note: must be even due to the way reverb works now -#define FRAG_MSECS 2 -#define NSSIZE ((44100 * FRAG_MSECS / 1000 + 1) & ~1) +#define NSSIZE ((44100 / 50 + 16) & ~1) /////////////////////////////////////////////////////////// // struct defines /////////////////////////////////////////////////////////// // ADSR INFOS PER CHANNEL -typedef struct -{ - int AttackModeExp; - long AttackTime; - long DecayTime; - long SustainLevel; - int SustainModeExp; - long SustainModeDec; - long SustainTime; - int ReleaseModeExp; - unsigned long ReleaseVal; - long ReleaseTime; - long ReleaseStartTime; - long ReleaseVol; - long lTime; - long lVolume; -} ADSRInfo; - typedef struct { unsigned char State:2; @@ -100,6 +88,7 @@ typedef struct int iSBPos; // mixing stuff int spos; int sinc; + int sinc_inv; unsigned char * pCurr; // current pos in sound mem unsigned char * pLoop; // loop ptr in sound mem @@ -109,7 +98,7 @@ typedef struct unsigned int bRVBActive:1; // reverb active flag unsigned int bNoise:1; // noise active flag unsigned int bFMod:2; // freq mod (0=off, 1=sound channel, 2=freq channel) - unsigned int bJump:1; // last decoded block jumped + unsigned int prevflags:3; // flags from previous block int iLeftVolume; // left volume int iRightVolume; // right volume @@ -201,16 +190,15 @@ extern int iUseReverb; extern int iUseInterpolation; // MISC -extern int had_dma; +extern int decode_pos; extern SPUCHAN s_chan[]; extern REVERBInfo rvb; -extern unsigned long dwNoiseVal; extern unsigned short spuCtrl; extern unsigned short spuStat; extern unsigned short spuIrq; -extern unsigned long spuAddr; +extern unsigned int spuAddr; extern int bSpuInit; extern unsigned int dwNewChannel; extern unsigned int dwChannelOn; @@ -219,11 +207,21 @@ extern unsigned int dwChannelDead; extern int SSumR[]; extern int SSumL[]; -extern int iCycle; extern short * pS; extern void (CALLBACK *cddavCallback)(unsigned short,unsigned short); +extern unsigned int cycles_played; + +void do_samples(unsigned int cycles_to); +void schedule_next_irq(void); + +#define do_samples_if_needed(c) \ + do { \ + if ((int)((c) - cycles_played) >= 16 * 768) \ + do_samples(c); \ + } while (0) + #endif /////////////////////////////////////////////////////////// @@ -239,9 +237,6 @@ extern uint32_t * XAPlay; extern uint32_t * XAStart; extern uint32_t * XAEnd; -extern uint32_t XARepeat; -extern uint32_t XALastVal; - extern uint32_t * CDDAFeed; extern uint32_t * CDDAPlay; extern uint32_t * CDDAStart;