25#include <pulse/pulseaudio.h>
26#include <pulse/stream.h>
82 const std::string& baseline;
94 const std::string& baseline;
127 bool inSinkList(
const std::string& deviceName);
154 virtual int getIndexCapture()
const;
155 virtual int getIndexPlayback()
const;
156 virtual int getIndexRingtone()
const;
158 void waitForDevices();
159 void waitForDeviceList();
161 std::string getPreferredPlaybackDevice()
const;
162 std::string getPreferredRingtoneDevice()
const;
163 std::string getPreferredCaptureDevice()
const;
170 void createStream(std::unique_ptr<AudioStream>& stream,
174 std::function<
void(
size_t)>&&
onData);
191 void disconnectAudioStream();
192 void onStreamReady();
198 const PaDeviceInfos* getDeviceInfos(
const std::vector<PaDeviceInfos>&,
const std::string& name)
const;
200 std::atomic_uint pendingStreams {0};
205 std::unique_ptr<AudioStream> playback_;
210 std::unique_ptr<AudioStream> record_;
215 std::unique_ptr<AudioStream> ringtone_;
225 std::vector<PaDeviceInfos> sinkList_ {};
230 std::vector<PaDeviceInfos> sourceList_ {};
234 std::string defaultSink_ {};
235 std::string defaultSource_ {};
240 bool enumeratingSinks_ {
false};
241 bool enumeratingSources_ {
false};
242 bool gettingServerInfo_ {
false};
243 std::atomic_bool waitingDeviceList_ {
false};
244 std::mutex readyMtx_ {};
245 std::condition_variable readyCv_ {};
246 std::thread streamStarter_ {};
bool operator()(const PaDeviceInfos &arg)
DescriptionComparator(const std::string &ref)
Unary function to search for a device by name in a list using std functions.
bool operator()(const PaDeviceInfos &arg)
NameComparator(const std::string &ref)
virtual void stopStream(AudioDeviceType stream=AudioDeviceType::ALL)
Stop the playback and capture streams.
std::string getAudioDeviceName(int index, AudioDeviceType type) const
virtual void startStream(AudioDeviceType stream)
Start the capture stream and prepare the playback stream.
friend class AudioLayerTest
virtual std::vector< std::string > getPlaybackDeviceList() const
virtual std::vector< std::string > getCaptureDeviceList() const
bool inSourceList(const std::string &deviceName)
virtual void stopCaptureStream(const std::string &id) override
Stop an ongoing capture stream on the given device.
void readFromMic()
Write data from the ring buffer to the hardware and read data from the hardware.
virtual void startCaptureStream(const std::string &id) override
Start a capture stream on the given device (eg.
int getAudioDeviceIndex(const std::string &descr, AudioDeviceType type) const
int getAudioDeviceIndexByName(const std::string &name, AudioDeviceType type) const
bool inSinkList(const std::string &deviceName)
void emitSignal(Args... args)
Simple macro to hide class' copy constructor and assignment operator.
#define NON_COPYABLE(ClassName)
Convenience structure to hold PulseAudio device propreties such as supported channel number etc.
pa_sample_spec sample_spec
pa_channel_map channel_map
PaDeviceInfos(const pa_source_info &source)
PaDeviceInfos(const pa_sink_info &source)