annotate Plugins/Input/modplug/plugin.h @ 278:37316876ef6e trunk

[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
author chainsaw
date Sat, 10 Dec 2005 14:31:13 -0800
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
278
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
1 /* From XMMS... */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
2
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
3 #ifndef PLUGIN_H
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
4 #define PLUGIN_H
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
5
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
6 #include<glib.h>
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
7
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
8 typedef enum
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
9 {
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
10 FMT_U8, FMT_S8, FMT_U16_LE, FMT_U16_BE, FMT_U16_NE, FMT_S16_LE, FMT_S16_BE, FMT_S16_NE
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
11 }
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
12 AFormat;
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
13
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
14 typedef struct
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
15 {
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
16 void *handle; /* Filled in by xmms */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
17 char *filename; /* Filled in by xmms */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
18 char *description; /* The description that is shown in the preferences box */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
19 void (*init) (void);
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
20 void (*about) (void); /* Show the about box */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
21 void (*configure) (void); /* Show the configuration dialog */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
22 void (*get_volume) (int *l, int *r);
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
23 void (*set_volume) (int l, int r); /* Set the volume */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
24 int (*open_audio) (AFormat fmt, int rate, int nch); /* Open the device, if the device can't handle the given
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
25 parameters the plugin is responsible for downmixing
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
26 the data to the right format before outputting it */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
27 void (*write_audio) (void *ptr, int length); /* The input plugin calls this to write data to the output
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
28 buffer */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
29 void (*close_audio) (void); /* No comment... */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
30 void (*flush) (int time); /* Flush the buffer and set the plugins internal timers to time */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
31 void (*pause) (short paused); /* Pause or unpause the output */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
32 int (*buffer_free) (void); /* Return the amount of data that can be written to the buffer,
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
33 two calls to this without a call to write_audio should make
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
34 the plugin output audio directly */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
35 int (*buffer_playing) (void); /* Returns TRUE if the plugin currently is playing some audio,
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
36 otherwise return FALSE */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
37 int (*output_time) (void); /* Return the current playing time */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
38 int (*written_time) (void); /* Return the length of all the data that has been written to
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
39 the buffer */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
40 }
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
41 OutputPlugin;
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
42
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
43 typedef struct
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
44 {
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
45 void *handle; /* Filled in by xmms */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
46 char *filename; /* Filled in by xmms */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
47 char *description; /* The description that is shown in the preferences box */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
48 void (*init) (void); /* Called when the plugin is loaded */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
49 void (*cleanup) (void); /* Called when the plugin is unloaded */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
50 void (*about) (void); /* Show the about box */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
51 void (*configure) (void); /* Show the configure box */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
52 int (*mod_samples) (gpointer *data, gint length, AFormat fmt, gint srate, gint nch); /* Modify samples */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
53 void (*query_format) (AFormat *fmt,gint *rate, gint *nch);
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
54 }
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
55 EffectPlugin;
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
56
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
57 typedef enum
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
58 {
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
59 INPUT_VIS_ANALYZER, INPUT_VIS_SCOPE, INPUT_VIS_VU, INPUT_VIS_OFF
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
60 }
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
61 InputVisType;
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
62
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
63 typedef struct
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
64 {
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
65 void *handle; /* Filled in by xmms */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
66 char *filename; /* Filled in by xmms */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
67 char *description; /* The description that is shown in the preferences box */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
68 void (*init) (void); /* Called when the plugin is loaded */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
69 void (*about) (void); /* Show the about box */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
70 void (*configure) (void);
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
71 int (*is_our_file) (char *filename); /* Return 1 if the plugin can handle the file */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
72 GList *(*scan_dir) (char *dirname); /* Look in Input/cdaudio/cdaudio.c to see how */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
73 /* to use this */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
74 void (*play_file) (char *filename); /* Guess what... */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
75 void (*stop) (void); /* Tricky one */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
76 void (*pause) (short paused); /* Pause or unpause */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
77 void (*seek) (int time); /* Seek to the specified time */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
78 void (*set_eq) (int on, float preamp, float *bands); /* Set the equalizer, most plugins won't be able to do this */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
79 int (*get_time) (void); /* Get the time, usually returns the output plugins output time */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
80 void (*get_volume) (int *l, int *r); /* Input-plugin specific volume functions, just provide a NULL if */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
81 void (*set_volume) (int l, int r); /* you want the output plugin to handle it */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
82 void (*add_vis) (int time, unsigned char *data, InputVisType type); /* OBSOLETE, DO NOT USE! */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
83 InputVisType (*get_vis_type) (void); /* OBSOLETE, DO NOT USE! */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
84 void (*add_vis_pcm) (int time, AFormat fmt, int nch, int length, void *ptr); /* Send data to the visualization plugins
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
85 Preferably 512 samples/block */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
86 void (*set_info) (char *title, int length, int rate, int freq, int nch); /* Fill in the stuff that is shown in the player window
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
87 set length to -1 if it's unknown. Filled in by xmms */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
88 void (*set_info_text) (char *text); /* Show some text in the song title box in the main window,
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
89 call it with NULL as argument to reset it to the song title.
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
90 Filled in by xmms */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
91 void (*get_song_info) (char *filename, char **title, int *length); /* Function to grab the title string */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
92 void (*file_info_box) (char *filename); /* Bring up an info window for the filename passed in */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
93 OutputPlugin *output; /* Handle to the current output plugin. Filled in by xmms */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
94 }
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
95 InputPlugin;
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
96
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
97 /* So that output plugins can communicate with effect plugins */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
98 EffectPlugin *get_current_effect_plugin(void);
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
99 int effects_enabled(void);
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
100
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
101 typedef struct
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
102 {
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
103 void *handle; /* Filled in by xmms */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
104 char *filename; /* Filled in by xmms */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
105 int xmms_session; /* The session ID for attaching to the control socket */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
106 char *description; /* The description that is shown in the preferences box */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
107 void (*init) (void); /* Called when the plugin is enabled */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
108 void (*about) (void); /* Show the about box */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
109 void (*configure) (void);
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
110 void (*cleanup) (void); /* Called when the plugin is disabled or when xmms exits */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
111 }
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
112 GeneralPlugin;
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
113
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
114 typedef struct _VisPlugin
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
115 {
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
116 void *handle; /* Filled in by xmms */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
117 char *filename; /* Filled in by xmms */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
118 int xmms_session; /* The session ID for attaching to the control socket */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
119 char *description; /* The description that is shown in the preferences box */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
120 int num_pcm_chs_wanted; /* Numbers of PCM channels wanted in the call to render_pcm */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
121 int num_freq_chs_wanted; /* Numbers of freq channels wanted in the call to render_freq */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
122 void (*init)(void); /* Called when the plugin is enabled */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
123 void (*cleanup)(void); /* Called when the plugin is disabled */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
124 void (*about)(void); /* Show the about box */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
125 void (*configure)(void); /* Show the configure box */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
126 void (*disable_plugin)(struct _VisPlugin *); /* Call this with a pointer to your plugin to disable the plugin */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
127 void (*playback_start)(void); /* Called when playback starts */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
128 void (*playback_stop)(void); /* Called when playback stops */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
129 void (*render_pcm)(gint16 pcm_data[2][512]); /* Render the PCM data, don't do anything time consuming in here */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
130 void (*render_freq)(gint16 freq_data[2][256]); /* Render the freq data, don't do anything time consuming in here */
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
131 } VisPlugin;
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
132
37316876ef6e [svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff changeset
133 #endif