diff options
Diffstat (limited to 'Src/Winamp/VIS.H')
-rw-r--r-- | Src/Winamp/VIS.H | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/Src/Winamp/VIS.H b/Src/Winamp/VIS.H new file mode 100644 index 00000000..779e9d8e --- /dev/null +++ b/Src/Winamp/VIS.H @@ -0,0 +1,96 @@ +#ifndef NULLSOFT_VISH +#define NULLSOFT_VISH +// Visualization plugin interface + +typedef struct winampVisModule +{ + char *description; // description of module + HWND hwndParent; // parent window (filled in by calling app) + HINSTANCE hDllInstance; // instance handle to this DLL (filled in by calling app) + int sRate; // sample rate (filled in by calling app) + int nCh; // number of channels (filled in...) + int latencyMs; // latency from call of RenderFrame to actual drawing + // (calling app looks at this value when getting data) + int delayMs; // delay between calls in ms + + // the data is filled in according to the respective Nch entry + int spectrumNch; + int waveformNch; + unsigned char spectrumData[2][576]; + unsigned char waveformData[2][576]; + + void (__cdecl *Config)(struct winampVisModule *this_mod); // configuration dialog + int (__cdecl *Init)(struct winampVisModule *this_mod); // 0 on success, creates window, etc + int (__cdecl *Render)(struct winampVisModule *this_mod); // returns 0 if successful, 1 if vis should end + void (__cdecl *Quit)(struct winampVisModule *this_mod); // call when done + + void *userData; // user data, optional +} winampVisModule; + +typedef struct +{ + int version; // VID_HDRVER + char *description; // description of library + winampVisModule* (__cdecl *getModule)(int); +} winampVisHeader; + +// exported symbols +#ifdef USE_VIS_HDR_HWND +typedef winampVisHeader* (__cdecl *winampVisGetHeaderType)(HWND); + +// version of current module (0x102 == 1.02) +#define VIS_HDRVER 0x102 + +#else +typedef winampVisHeader* (__cdecl *winampVisGetHeaderType)(); + +// version of current module (0x101 == 1.01) +#define VIS_HDRVER 0x101 + +#endif + +// Version note: +// +// Updated to 1.02 for 5.36+ +// Added passing of Winamp's main hwnd in the call to the exported winampVisGetHeader() +// 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 vis.h or +// you can add USE_VIS_HRD_HWND to your project's defined list or before use of vis.h +// + +// Miscellaneous notes: +// * Any window that remains in foreground should optimally pass keystrokes to the parent +// (Winamp's) window, so that the user can still control it unless escape is pressed or +// some option key specific to the visualization is pressed. +// * Storing configuration can be done any where though it's recommended to use the api +// IPC_GETINIDIRECTORY as the basis of the path to save things to e.g. INIDIR\plugins\plugin.ini +// * ints are 32 bits and structure members are aligned on the default 8 byte boundaries. + +// 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. +// Note: visualization plugins are always uninstalled without a reboot (unlike other plugin types). +// +#define VIS_PLUGIN_UNINSTALL_NOW 0x0 +// +// 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. +// + +// For a vis plugin to be correctly detected by Winamp you need to ensure that +// the exported winampVisGetHeader(..) is exported as an undecorated function +// e.g. +// #ifdef __cplusplus +// extern "C" { +// #endif +// __declspec(dllexport) winampVisHeader * __cdecl winampVisGetHeader(){ return &plugin; } +// #ifdef __cplusplus +// } +// #endif +// + +#endif
\ No newline at end of file |