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);
51 static void context_state_cb_(pa_context* context,
void* userdata);
54 sink_info_cb_(pa_context* context,
const pa_sink_info* info,
int eol,
void* userdata);
56 static void stream_state_cb_(pa_stream* stream,
void* userdata);
57 static void stream_write_cb_(pa_stream* stream,
size_t length,
void* userdata);
58 static void stream_latency_cb_(pa_stream* stream,
void* userdata);
60 static void timer_cb_(pa_mainloop_api* mainloop,
62 const struct timeval* tv,
67 void ensure_started_()
const;
68 void ensure_opened_()
const;
70 bool start_mainloop_();
71 void stop_mainloop_();
75 void set_opened_(
bool opened);
78 void close_context_();
80 bool start_sink_info_op_();
81 void cancel_sink_info_op_();
83 void init_stream_params_(
const pa_sink_info& info);
84 bool check_stream_params_()
const;
88 ssize_t wait_stream_();
104 pa_threaded_mainloop* mainloop_;
105 pa_context* context_;
106 pa_operation* sink_info_op_;
108 pa_time_event* timer_;
112 pa_sample_spec sample_spec_;
113 pa_buffer_attr buffer_attrs_;
Sample stream specification. Defines sample rate and channel layout.
Base class for non-copyable objects.
virtual core::nanoseconds_t latency() const
Get latency of the sink.
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 audio::SampleSpec sample_spec() const
Get sample specification of the sink.
float sample_t
Audio sample.
int64_t nanoseconds_t
Nanoseconds.
Commonly used types and functions.
Various units used in packets.