diff options
Diffstat (limited to 'Src/Plugins/SDK/out_null/main.c')
-rw-r--r-- | Src/Plugins/SDK/out_null/main.c | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/Src/Plugins/SDK/out_null/main.c b/Src/Plugins/SDK/out_null/main.c new file mode 100644 index 00000000..55eb9906 --- /dev/null +++ b/Src/Plugins/SDK/out_null/main.c @@ -0,0 +1,159 @@ +#include <windows.h> +#include <shlobj.h> +#include "../winamp/out.h" + +#define PI_VER2 "v1.2" + +/* #ifdef __alpha +#define PI_VER PI_VER2 " (AXP)" +#else +#define PI_VER PI_VER2 " (x86)" +#endif */ + +int getwrittentime(); +int getoutputtime(); + +int srate, numchan, bps, active; +volatile int writtentime, w_offset; + + +BOOL WINAPI _DllMainCRTStartup(HANDLE hInst, ULONG ul_reason_for_call, LPVOID lpReserved) +{ + return TRUE; +} + +Out_Module out; + +static int last_pause=0; + +void config(HWND hwnd) +{ +} + +void about(HWND hwnd) +{ +} + +void init() +{ +} + +void quit() +{ +} + +int start_t; + +int open(int samplerate, int numchannels, int bitspersamp, int bufferlenms, int prebufferms) +{ + start_t=GetTickCount(); + w_offset = writtentime = 0; + active=1; + numchan = numchannels; + srate = samplerate; + bps = bitspersamp; + return 1; +} + +void close() +{ +} + +int write(char *buf, int len) +{ + writtentime += len; + return 0; +} + +int canwrite() +{ + if (last_pause) return 0; + if (getwrittentime() < getoutputtime()+MulDiv(65536,1000,srate*bps*numchan/8)) return 65536; + return 0; +} + +int isplaying() +{ + return 0; +} + +int pause(int pause) +{ + int t=last_pause; + if (!last_pause && pause) { w_offset+=GetTickCount()-start_t; writtentime=0; } + if (last_pause && !pause) { start_t=GetTickCount(); } + last_pause=pause; + return t; +} + +void setvolume(int volume) +{ +} + +void setpan(int pan) +{ +} + +void flush(int t) +{ + w_offset=t; + start_t=GetTickCount(); + writtentime=0; +} + +int getoutputtime() +{ + if (last_pause) + return w_offset; + return GetTickCount()-start_t + w_offset; +} + +int getwrittentime() +{ + int t=srate*numchan,l; + int ms=writtentime; + + if (t) + { + l=ms%t; + ms /= t; + ms *= 1000; + ms += (l*1000)/t; + + ms/=(bps/8); + + return ms + w_offset; + } + else + return ms; +} + +Out_Module out = { + OUT_VER, + "Nullsoft NULL Output " PI_VER2 + + , + 65, + 0, // hmainwindow + 0, // hdllinstance + config, + about, + init, + quit, + open, + close, + write, + canwrite, + isplaying, + pause, + setvolume, + setpan, + flush, + getoutputtime, + getwrittentime +}; + +__declspec( dllexport ) Out_Module * winampGetOutModule() +{ + return &out; +} |