12 #ifndef ROC_SNDIO_PULSEAUDIO_SINK_H_
13 #define ROC_SNDIO_PULSEAUDIO_SINK_H_
15 #include <pulse/pulseaudio.h>
36 bool open(
const char* device);
48 static void context_state_cb_(pa_context* context,
void* userdata);
51 sink_info_cb_(pa_context* context,
const pa_sink_info* info,
int eol,
void* userdata);
53 static void stream_state_cb_(pa_stream* stream,
void* userdata);
54 static void stream_write_cb_(pa_stream* stream,
size_t length,
void* userdata);
55 static void stream_latency_cb_(pa_stream* stream,
void* userdata);
57 static void timer_cb_(pa_mainloop_api* mainloop,
59 const struct timeval* tv,
64 bool check_params_()
const;
66 void ensure_started_()
const;
67 void ensure_opened_()
const;
69 bool start_mainloop_();
70 void stop_mainloop_();
74 void set_opened_(
bool opened);
77 void close_context_();
79 bool start_sink_info_op_();
80 void cancel_sink_info_op_();
82 void init_stream_params_(
const pa_sink_info& info);
86 ssize_t wait_stream_();
93 const size_t num_channels_;
94 const size_t frame_size_;
102 pa_threaded_mainloop* mainloop_;
103 pa_context* context_;
104 pa_operation* sink_info_op_;
106 pa_time_event* timer_;
110 pa_sample_spec sample_spec_;
111 pa_buffer_attr buffer_attrs_;
Base class for non-copyable objects.
virtual bool has_clock() const
Check if the sink has own clock.
PulseaudioSink(const Config &config)
Initialize.
bool open(const char *device)
Open output device.
virtual void write(audio::Frame &frame)
Write audio frame.
virtual size_t sample_rate() const
Get sample rate of the sink.
float sample_t
Audio sample.
int64_t nanoseconds_t
Nanoseconds.
Various units used in packets.
Commonly used types and functions.