1 
2 #ifndef CLAMP_INPUT_PLUGIN_H
3 #define CLAMP_INPUT_PLUGIN_H
4 
5 #include <AppKit.h>
6 #include <StorageKit.h>
7 
8 #include "Plugin_Messages.h"
9 #include "Plugin_ConstructorStruct.h"
10 
11 #include "InputPlugin_InfoStruct.h"
12 
13 #define MAX_GETAUDIO_SIZE (10*1024)
14 
15 // The class description of the object that will be returned when CL-Amp ask the AddOn (Plugin) for its object...
16 class InputPlugin {
17 public:
18 // Used by CL-Amp. Don't bother about these functions!
19 					//	InputPlugin(char *label, char *desc, struct InputPluginFuncs *F) { CLAmpHandler=NULL; Label= label; Description= desc; Master= false; }
InputPlugin(char * label,char * desc)20 	InputPlugin(char *label, char *desc) { CLAmpHandler=NULL; Label= label; Description= desc; Master= false; }
~InputPlugin()21 	virtual ~InputPlugin() { }
SetHandler(BHandler * handler)22 	void SetHandler(BHandler *handler) { CLAmpHandler= handler; }
SetMaster()23 	void SetMaster() { Master= true; }
24 
25 // =================================================================
26 // Here comes the functions you have to provide in your plugin code!
27 
28 // No thread considerations with this function!
29 	virtual void Init()=0;
Cleanup()30 	virtual void Cleanup() {};
31 	// 2 special special functions follows, not needed for most plugins!!
GetUserData()32 	virtual void *GetUserData()	{ return(NULL); }
SetUserData(void * UserData)33 	virtual void  SetUserData(void *UserData) { }
34 
35 // These functions will run in thread A, dont let functions from A use data from B or vice verse...
36 	virtual bool About(bool Question)=0;
37 	virtual bool Prefs(bool Question)=0;
38 	virtual bool Edit (const char *FileName, bool Question)=0;
39 	virtual bool GetMimeType(BMimeType *m, int Nr)=0;
40 	virtual bool IsOur(const char *FileName)=0;
41 	virtual bool GetSongInfo(const char *FileName, struct PlayerInfoStruct *Info)=0;
42 	virtual void AbortPlaying()=0;
43 	virtual void Pause(bool On)=0;
44 	virtual void NewSpeed  (long Promille)=0;
45 	virtual void NewVolume (long Promille)=0;
46 	// 2 special functions follows, not needed for most plugins!!
NewPanning(long Promille)47 	virtual void NewPanning(long Promille) {}
CanCrossFade(char * FileName1,char * FileName2)48 	virtual bool CanCrossFade(char *FileName1, char *FileName2) { return(true); }
49 
50 // These functions will run in thread B, dont let functions from B use data from A or vice verse...
51 	virtual bool InitPlaying(const char *FileName, struct PlayerInfoStruct *Info)=0;
52 	virtual int	 GetAudio(char **Buff, int Size)=0;
53 	virtual void JumpTo(long NewTime)=0;
54 	virtual void CleanupPlaying()=0;
55 
56 // End of the functions you have to provide in your plugin code!
57 // =================================================================
58 
59 // Help functions you can call to get data from the InputPlugin class itself
GetLabel()60 	const char *GetLabel() { return Label; }
GetDescription()61 	const char *GetDescription() { return Description; }
GetCLAmpHandler()62 	BHandler *GetCLAmpHandler() { return CLAmpHandler; }
SendToCLAmp(struct PlayerInfoStruct * info)63 	void SendToCLAmp(struct PlayerInfoStruct *info) { BMessage Msg(CLAMP_MSG_PLAYINFO); BLooper *l; if (CLAmpHandler && (l=CLAmpHandler->Looper())) { Msg.AddData(CLAMP_PLAYINFO_LABEL, B_STRING_TYPE, (char *)info, sizeof(*info)); l->PostMessage (&Msg, CLAmpHandler); } }
SendToCLAmp_ChangedFile(const char * FileName)64 	void SendToCLAmp_ChangedFile(const char *FileName) { BMessage Msg(CLAMP_MSG_CHANGED); BLooper *l; if (CLAmpHandler && (l=CLAmpHandler->Looper())) { Msg.AddString(CLAMP_CHANGED_LABEL, FileName); l->PostMessage (&Msg, CLAmpHandler); } }
SendToCLAmp_AddFile(const char * FileName)65 	void SendToCLAmp_AddFile(const char *FileName) { BMessage Msg(CLAMP_MSG_ADD); BLooper *l; if (CLAmpHandler && (l=CLAmpHandler->Looper())) { Msg.AddString(CLAMP_ADD_LABEL, FileName); l->PostMessage (&Msg, CLAmpHandler); } }
SendToCLAmp_AddFile(const char * FileName,long SongId)66 	void SendToCLAmp_AddFile(const char *FileName, long SongId) { BMessage Msg(CLAMP_MSG_ADD); BLooper *l; if (CLAmpHandler && (l=CLAmpHandler->Looper())) { Msg.AddString(CLAMP_ADD_LABEL, FileName); Msg.AddInt32(CLAMP_SONG_ID, SongId); l->PostMessage (&Msg, CLAmpHandler); } }
SendToCLAmp_DelFile(const char * FileName)67 	void SendToCLAmp_DelFile(const char *FileName) { BMessage Msg(CLAMP_MSG_DEL); BLooper *l; if (CLAmpHandler && (l=CLAmpHandler->Looper())) { Msg.AddString(CLAMP_DEL_LABEL, FileName); l->PostMessage (&Msg, CLAmpHandler); } }
SendToCLAmp_DelFile(long SongId)68 	void SendToCLAmp_DelFile(long SongId) { BMessage Msg(CLAMP_MSG_DEL); BLooper *l; if (CLAmpHandler && (l=CLAmpHandler->Looper())) { Msg.AddInt32(CLAMP_SONG_ID, SongId); l->PostMessage (&Msg, CLAmpHandler); } }
IsMaster()69 	bool IsMaster() { return (Master); }
70 private:
71 	char *Label, *Description;
72 	BHandler *CLAmpHandler;
73 	bool Master;
74 };
75 
76 #define CURRENT_INPUT_PLUGIN_VERSION  3
77 #define INPUT_PLUGIN_VERSION_MASK	0x0fff
78 #define PUT_THIS_PLUGIN_LAST 		0x1000
79 
80 #endif
81