esp32-audio-player 0.1.0
Audio player engine for ESP32
Loading...
Searching...
No Matches
sink.h
Go to the documentation of this file.
1// SPDX-License-Identifier: Apache-2.0
5#pragma once
6
8
9#ifdef __cplusplus
10extern "C" {
11#endif
12
17enum {
19 SINK_CAP_DOP = 1u << 1,
24 SINK_CAP_DITHERS = 1u << 4,
25};
26
27typedef struct audio_sink audio_sink_t;
28
29struct audio_sink {
30 const char *name;
31 uint32_t caps;
32 void *ctx;
33
36 int (*negotiate)(audio_sink_t *s, const audio_format_t *src, audio_format_t *out);
38 int (*open)(audio_sink_t *s, const audio_format_t *fmt);
41 int32_t (*write)(audio_sink_t *s, const int32_t *pcm, uint32_t frames, uint32_t timeout_ms);
42 void (*pause)(audio_sink_t *s, bool paused);
43 void (*flush)(audio_sink_t *s);
44 int (*set_volume_db)(audio_sink_t *s, float db);
45 uint32_t (*buffered_frames)(audio_sink_t *s);
47 void (*describe)(audio_sink_t *s, char *out, size_t out_size);
48 void (*close)(audio_sink_t *s);
49};
50
51#ifdef __cplusplus
52}
53#endif
Audio formats and PCM conventions.
@ SINK_CAP_HW_VOLUME
set_volume_db works; DSP software volume stays off
Definition sink.h:18
@ SINK_CAP_DOP
accepts DoP frames
Definition sink.h:19
@ SINK_CAP_BITPERFECT
Passes the Q31 samples unchanged (at least their top 24 bits, e.g.
Definition sink.h:22
@ SINK_CAP_RATE_SWITCH
can change sample rate between tracks
Definition sink.h:23
@ SINK_CAP_DITHERS
the sink reduces Q31 to its bit depth with its own TPDF dither
Definition sink.h:24
Definition audio.h:23
Definition sink.h:29
void(* pause)(audio_sink_t *s, bool paused)
pause output without dropping data
Definition sink.h:42
void(* close)(audio_sink_t *s)
Definition sink.h:48
int(* set_volume_db)(audio_sink_t *s, float db)
hardware volume; -1 if unsupported
Definition sink.h:44
uint32_t caps
Definition sink.h:31
int32_t(* write)(audio_sink_t *s, const int32_t *pcm, uint32_t frames, uint32_t timeout_ms)
Write interleaved Q31 frames.
Definition sink.h:41
const char * name
"wired", "bluetooth", "null", "wav"
Definition sink.h:30
uint32_t(* buffered_frames)(audio_sink_t *s)
queued but not yet played
Definition sink.h:45
int(* open)(audio_sink_t *s, const audio_format_t *fmt)
Start or reconfigure for fmt. May mute and block briefly (clock switch).
Definition sink.h:38
void(* flush)(audio_sink_t *s)
drop queued audio (seek, skip)
Definition sink.h:43
int(* negotiate)(audio_sink_t *s, const audio_format_t *src, audio_format_t *out)
Given the decoded format, fill *out with the format the sink will accept.
Definition sink.h:36
void(* describe)(audio_sink_t *s, char *out, size_t out_size)
Human-readable detail for the status bar, e.g. "SBC-XQ 452 kbps" or "PCM5102A".
Definition sink.h:47
void * ctx
Definition sink.h:32