diff options
Diffstat (limited to 'Src/Winamp/DSP.cpp')
-rw-r--r-- | Src/Winamp/DSP.cpp | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/Src/Winamp/DSP.cpp b/Src/Winamp/DSP.cpp new file mode 100644 index 00000000..88c3dc53 --- /dev/null +++ b/Src/Winamp/DSP.cpp @@ -0,0 +1,85 @@ +#include "Main.h" +#include "dsp.h" + +static int initted=0; +static HINSTANCE hLib=0; +static winampDSPModule *mod=0; + +void dsp_init(void) +{ + if (g_safeMode) + return; + + wchar_t str[1024] = {0}; + + if (initted) + dsp_quit(); + + if (!config_dspplugin_name[0]) + return; + + PathCombineW(str,DSPDIR,config_dspplugin_name); + hLib = LoadLibraryW(str); + + if (!hLib) + return; + + winampDSPGetHeaderType pr = (winampDSPGetHeaderType) GetProcAddress(hLib,"winampDSPGetHeader2"); + + if (!pr || (pr(hMainWindow)->version < DSP_HDRVER && pr(hMainWindow)->version >= DSP_HDRVER+0x10) || !(mod = pr(hMainWindow)->getModule(config_dspplugin_num))) + { + FreeLibrary(hLib); + hLib=0; + return; + } + + mod->hwndParent=hMainWindow; + mod->hDllInstance=hLib; + mod->Init(mod); + initted=1; +} + +void dsp_quit(void) +{ + if (!initted) + return; + + initted=0; + if (mod) + { + if (!(config_no_visseh&2)) + { + try + { + mod->Quit(mod); + } + catch(...) + { + } + } + else + { + mod->Quit(mod); + } + } + + FreeLibrary(hLib); + hLib=0; + mod=0; +} + +int dsp_isactive(void) +{ + return (in_mod && initted && mod); +} + +int dsp_dosamples(short int *samples, int numsamples, int bps, int nch, int srate) +{ + if (dsp_isactive()) + { + if (mod) + return (mod->ModifySamples(mod,samples,numsamples,bps,nch,srate)); + } + + return numsamples; +}
\ No newline at end of file |