1 /*
2  * gbsplay is a Gameboy sound player
3  *
4  * 2004-2006,2008 (C) by Tobias Diedrich <ranma+gbsplay@tdiedrich.de>
5  * Licensed under GNU GPL v1 or, at your option, any later version.
6  */
7 
8 #ifndef _PLUGOUT_H_
9 #define _PLUGOUT_H_
10 
11 #include <stdint.h>
12 
13 #include "config.h"
14 #include "gbhw.h"
15 
16 #if PLUGOUT_DSOUND == 1
17 #  define PLUGOUT_DEFAULT "dsound"
18 #elif PLUGOUT_PULSE == 1
19 #  define PLUGOUT_DEFAULT "pulse"
20 #elif PLUGOUT_ALSA == 1
21 #  define PLUGOUT_DEFAULT "alsa"
22 #else
23 #  define PLUGOUT_DEFAULT "oss"
24 #endif
25 
26 enum plugout_endian {
27 	PLUGOUT_ENDIAN_BIG,
28 	PLUGOUT_ENDIAN_LITTLE,
29 	PLUGOUT_ENDIAN_NATIVE
30 };
31 
32 typedef long    regparm (*plugout_open_fn )(enum plugout_endian endian, long rate);
33 typedef int     regparm (*plugout_skip_fn )(int subsong);
34 typedef void    regparm (*plugout_pause_fn)(int pause);
35 typedef int     regparm (*plugout_io_fn   )(long cycles, uint32_t addr, uint8_t val);
36 typedef int     regparm (*plugout_step_fn )(const long cycles, const struct gbhw_channel[]);
37 typedef ssize_t regparm (*plugout_write_fn)(const void *buf, size_t count);
38 typedef void    regparm (*plugout_close_fn)(void);
39 
40 #define PLUGOUT_USES_STDOUT	1
41 
42 struct output_plugin {
43 	char	*name;
44 	char	*description;
45 	long	flags;
46 	plugout_open_fn  open;
47 	plugout_skip_fn  skip;
48 	plugout_pause_fn pause;
49 	plugout_io_fn    io;
50 	plugout_step_fn  step;
51 	plugout_write_fn write;
52 	plugout_close_fn close;
53 };
54 
55 regparm void plugout_list_plugins(void);
56 regparm /*@null@*/ /*@temp@*/ const struct output_plugin* plugout_select_by_name(const char *name);
57 
58 #endif
59