File: plugout.h

package info (click to toggle)
gbsplay 0.0.99-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,044 kB
  • sloc: ansic: 8,360; sh: 1,667; makefile: 534; perl: 99; python: 72; xml: 13
file content (83 lines) | stat: -rw-r--r-- 2,286 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
/*
 * gbsplay is a Gameboy sound player
 *
 * 2004-2021 (C) by Tobias Diedrich <ranma+gbsplay@tdiedrich.de>
 *
 * Licensed under GNU GPL v1 or, at your option, any later version.
 */

#ifndef _PLUGOUT_H_
#define _PLUGOUT_H_

#include <stdint.h>
#include <unistd.h>

#include "config.h"
#include "common.h"
#include "gbhw.h"

#if PLUGOUT_DSOUND == 1
#  define PLUGOUT_DEFAULT "dsound"
#elif PLUGOUT_PIPEWIRE == 1
#  define PLUGOUT_DEFAULT "pipewire"
#elif PLUGOUT_PULSE == 1
#  define PLUGOUT_DEFAULT "pulse"
#elif PLUGOUT_ALSA == 1
#  define PLUGOUT_DEFAULT "alsa"
#elif PLUGOUT_SDL == 1
#  define PLUGOUT_DEFAULT "sdl"
#else
#  define PLUGOUT_DEFAULT "oss"
#endif

enum plugout_endian {
	PLUGOUT_ENDIAN_BIG,
	PLUGOUT_ENDIAN_LITTLE,
	PLUGOUT_ENDIAN_AUTOSELECT,
};

#if GBS_BYTE_ORDER == GBS_ORDER_LITTLE_ENDIAN
#define PLUGOUT_ENDIAN_NATIVE PLUGOUT_ENDIAN_LITTLE
#else
#define PLUGOUT_ENDIAN_NATIVE PLUGOUT_ENDIAN_BIG
#endif

struct plugout_metadata {
	const char * player_name;
	const char * filename;
};

/* Initial open of plugout. */
typedef long    (*plugout_open_fn )(enum plugout_endian *endian, long rate, long *buffer_bytes, const struct plugout_metadata metadata);
/* Notification when next subsong is about to start. */
typedef int     (*plugout_skip_fn )(int subsong);
/* Notification the the player is paused/resumed. */
typedef void    (*plugout_pause_fn)(int pause);
/* Callback for monitoring IO in dumpers. Cycles restarts at 0 when the subsong is changed. */
typedef int     (*plugout_io_fn   )(cycles_t cycles, uint32_t addr, uint8_t val);
/* Callback for monitoring inferred channel status. */
typedef int     (*plugout_step_fn )(const cycles_t cycles, const struct gbs_channel_status[]);
/* Callback for writing sample data. */
typedef ssize_t (*plugout_write_fn)(const void *buf, size_t count);
/* Close called on player exit. */
typedef void    (*plugout_close_fn)(void);

#define PLUGOUT_USES_STDOUT	1

struct output_plugin {
	char	*name;
	char	*description;
	long	flags;
	plugout_open_fn  open;
	plugout_skip_fn  skip;
	plugout_pause_fn pause;
	plugout_io_fn    io;
	plugout_step_fn  step;
	plugout_write_fn write;
	plugout_close_fn close;
};

void plugout_list_plugins(void);
const struct output_plugin* plugout_select_by_name(const char* const name);

#endif