aboutsummaryrefslogtreecommitdiff
path: root/Src/Winamp/DSP.H
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Winamp/DSP.H')
-rw-r--r--Src/Winamp/DSP.H80
1 files changed, 80 insertions, 0 deletions
diff --git a/Src/Winamp/DSP.H b/Src/Winamp/DSP.H
new file mode 100644
index 00000000..0a2c1d58
--- /dev/null
+++ b/Src/Winamp/DSP.H
@@ -0,0 +1,80 @@
+#ifndef NULLSOFT_WINAMP_DSP_H
+#define NULLSOFT_WINAMP_DSP_H
+// DSP plugin interface
+
+typedef struct winampDSPModule
+{
+ char *description; // description
+ HWND hwndParent; // parent window (filled in by calling app)
+ HINSTANCE hDllInstance; // instance handle to this DLL (filled in by calling app)
+
+ void( __cdecl *Config )( struct winampDSPModule *this_mod ); // configuration dialog (if needed)
+ int( __cdecl *Init )( struct winampDSPModule *this_mod ); // 0 on success, creates window, etc (if needed)
+
+ // modify waveform samples: returns number of samples to actually write
+ // (typically numsamples, but no more than twice numsamples, and no less than half numsamples)
+ // numsamples should always be at least 128. should, but I'm not sure
+ int( __cdecl *ModifySamples )( struct winampDSPModule *this_mod, short int *samples, int numsamples, int bps, int nch, int srate );
+
+ void( __cdecl *Quit )( struct winampDSPModule *this_mod ); // called when unloading
+
+ void *userData; // user data, optional
+} winampDSPModule;
+
+typedef struct
+{
+ int version; // DSP_HDRVER
+ char *description; // description of library
+ winampDSPModule *( __cdecl *getModule )( int ); // module retrieval function
+ int( __cdecl *sf )( int key ); // DSP_HDRVER == 0x21
+} winampDSPHeader;
+
+// exported symbols
+#ifdef USE_DSP_HDR_HWND
+typedef winampDSPHeader *( __cdecl *winampDSPGetHeaderType )( HWND );
+#define DSP_HDRVER 0x22
+#else
+// Note: Unless using USE_DSP_HDR_HWND or a Winamp 5.5+ client then winampDSPGetHeaderType(..)
+// will not receive a HWND parameter & with be called as winampDSPGetHeaderType(void).
+// This is only defined with an HWND to allow for correct compiling of the client exe.
+typedef winampDSPHeader *( __cdecl *winampDSPGetHeaderType )( HWND );
+// header version: 0x20 == 0.20 == winamp 2.0
+#define DSP_HDRVER 0x20
+#endif
+
+// These are the return values to be used with the uninstall plugin export function:
+// __declspec(dllexport) int __cdecl winampUninstallPlugin(HINSTANCE hDllInst, HWND hwndDlg, int param)
+// which determines if Winamp can uninstall the plugin immediately or on winamp restart.
+// If this is not exported then Winamp will assume an uninstall with reboot is the only way.
+//
+#define DSP_PLUGIN_UNINSTALL_NOW 0x0
+#define DSP_PLUGIN_UNINSTALL_REBOOT 0x1
+//
+// Uninstall support was added from 5.0+ and uninstall now support from 5.5+ though note
+// that it is down to you to ensure that if uninstall now is returned that it will not
+// cause a crash i.e. don't use if you've been subclassing the main window.
+//
+// The HWND passed in the calling of winampUninstallPlugin(..) is the preference page HWND.
+//
+//
+// Version note:
+//
+// Added passing of Winamp's main hwnd in the call to the exported winampDSPHeader()
+// which allows for primarily the use of localisation features with the bundled plugins.
+// If you want to use the new version then either you can edit you version of dsp.h or
+// you can add USE_DSP_HDR_HWND to your project's defined list or before use of dsp.h
+//
+
+// For a DSP plugin to be correctly detected by Winamp you need to ensure that
+// the exported winampDSPGetHeader2(..) is exported as an undecorated function
+// e.g.
+// #ifdef __cplusplus
+// extern "C" {
+// #endif
+// __declspec(dllexport) winampDSPGetHeaderType * __cdecl winampDSPGetHeader2(){ return &plugin; }
+// #ifdef __cplusplus
+// }
+// #endif
+//
+
+#endif \ No newline at end of file