50static inline int32_t
ap_a2dp_write(audio_sink_t *s,
const int32_t *pcm, uint32_t frames, uint32_t timeout_ms) {
52 int32_t n = a2dp_xq_write_q31(pcm, frames, timeout_ms);
59 a2dp_xq_pause(paused);
69 a2dp_xq_set_volume_db(db);
75 return a2dp_xq_buffered_frames();
80 if (!out || !out_size)
return;
81 a2dp_xq_describe(out, out_size);
92 static audio_sink_t sink;
93 sink.name =
"bluetooth";
static int ap_a2dp_negotiate(audio_sink_t *s, const audio_format_t *src, audio_format_t *out)
The player resamples everything to 44.1 kHz for this sink and keeps its DSP output at 32 bits; the si...
Definition a2dp_sink.h:32
static void audio_player_a2dp_remote(a2dp_xq_remote_t cmd, int value, void *user)
a2dp_xq_config_t.remote_cb with remote_user = the player: the headphone buttons control the player,...
Definition a2dp_sink.h:110
static void ap_a2dp_describe(audio_sink_t *s, char *out, size_t out_size)
Definition a2dp_sink.h:78
static void ap_a2dp_pause(audio_sink_t *s, bool paused)
Definition a2dp_sink.h:57
static int32_t ap_a2dp_write(audio_sink_t *s, const int32_t *pcm, uint32_t frames, uint32_t timeout_ms)
Definition a2dp_sink.h:50
static int ap_a2dp_set_volume_db(audio_sink_t *s, float db)
Definition a2dp_sink.h:67
static audio_sink_t * audio_player_a2dp_sink(void)
The sink. Call after a2dp_xq_init(); it stays valid until a2dp_xq_deinit().
Definition a2dp_sink.h:91
static void ap_a2dp_close(audio_sink_t *s)
Definition a2dp_sink.h:85
static uint32_t ap_a2dp_buffered_frames(audio_sink_t *s)
Definition a2dp_sink.h:73
static void ap_a2dp_flush(audio_sink_t *s)
Definition a2dp_sink.h:62
static int ap_a2dp_open(audio_sink_t *s, const audio_format_t *fmt)
Definition a2dp_sink.h:43
size_t core_strlcpy(char *dst, const char *src, size_t size)
Small string helpers (UTF-8 safe where noted).
@ CORE_EUNSUPPORTED
format or feature not supported
Definition base.h:25
@ CORE_EIO
Definition base.h:24
@ CORE_EINVAL
Definition base.h:23
@ CORE_OK
Definition base.h:19
Playback engine: queue, gapless transitions, DSP, output negotiation, resume.
void player_cmd_resume(player_t *p)
from STOPPED with a non-empty queue: starts the current item
void player_cmd_volume_step(player_t *p, int steps)
void player_cmd_pause(player_t *p)
void player_cmd_next(player_t *p)
void player_cmd_prev(player_t *p)
restart the track if more than 3 s played
void player_cmd_toggle_pause(player_t *p)
struct player player_t
Definition player.h:111
void player_cmd_set_volume_db(player_t *p, float db)
@ SINK_CAP_HW_VOLUME
set_volume_db works; DSP software volume stays off
Definition sink.h:18
@ SINK_CAP_DITHERS
the sink reduces Q31 to its bit depth with its own TPDF dither
Definition sink.h:24