1
2#ifndef __PLAYER_H__
3#define __PLAYER_H__
4
5#include <stdint.h>
6
7#if defined(__linux__)
8/* AirTunes v2 packet interval in ns */
9# define AIRTUNES_V2_STREAM_PERIOD   7980000
10#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
11/* AirTunes v2 packet interval in ms */
12# define AIRTUNES_V2_STREAM_PERIOD   8
13#endif
14
15/* AirTunes v2 number of samples per packet */
16#define AIRTUNES_V2_PACKET_SAMPLES  352
17
18
19/* Samples to bytes, bytes to samples */
20#define STOB(s) ((s) * 4)
21#define BTOS(b) ((b) / 4)
22
23enum play_status {
24  PLAY_STOPPED = 2,
25  PLAY_PAUSED  = 3,
26  PLAY_PLAYING = 4,
27};
28
29enum repeat_mode {
30  REPEAT_OFF  = 0,
31  REPEAT_SONG = 1,
32  REPEAT_ALL  = 2,
33};
34
35struct spk_flags {
36  unsigned selected:1;
37  unsigned has_password:1;
38
39  unsigned has_video:1;
40};
41
42struct player_status {
43  enum play_status status;
44  enum repeat_mode repeat;
45  char shuffle;
46
47  int volume;
48
49  uint32_t plid;
50  uint32_t id;
51  uint32_t pos_ms;
52  int pos_pl;
53};
54
55typedef void (*spk_enum_cb)(uint64_t id, const char *name, int relvol, struct spk_flags flags, void *arg);
56typedef void (*player_status_handler)(void);
57
58struct player_source;
59
60int
61player_is_playing(void);
62
63int
64player_get_current_pos(uint64_t *pos, struct timespec *ts, int commit);
65
66int
67player_get_status(struct player_status *status);
68
69int
70player_now_playing(uint32_t *id);
71
72
73void
74player_speaker_enumerate(spk_enum_cb cb, void *arg);
75
76int
77player_speaker_set(uint64_t *ids);
78
79int
80player_playback_start(uint32_t *idx_id);
81
82int
83player_playback_stop(void);
84
85int
86player_playback_pause(void);
87
88int
89player_playback_seek(int ms);
90
91int
92player_playback_next(void);
93
94int
95player_playback_prev(void);
96
97
98int
99player_volume_set(int vol);
100
101int
102player_volume_setrel_speaker(uint64_t id, int relvol);
103
104int
105player_volume_setabs_speaker(uint64_t id, int vol);
106
107int
108player_repeat_set(enum repeat_mode mode);
109
110int
111player_shuffle_set(int enable);
112
113
114struct player_source *
115player_queue_make_daap(const char *query, const char *sort);
116
117struct player_source *
118player_queue_make_pl(int plid, uint32_t *id);
119
120int
121player_queue_add(struct player_source *ps);
122
123void
124player_queue_clear(void);
125
126void
127player_queue_plid(uint32_t plid);
128
129
130void
131player_set_update_handler(player_status_handler handler);
132
133int
134player_init(void);
135
136void
137player_deinit(void);
138
139#endif /* !__PLAYER_H__ */
140