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