26using namespace std::literals;
50 JAMI_DEBUG(
"{}: Creating stream with device {} ({}, {}Hz, {} channels)",
64 pl.get(),
"filter.apply.echo-cancel.parameters",
65 "use_volume_sharing=0"
66 " use_master_format=1"
68 "digital_gain_control=1"
69 " analog_gain_control=0"
77 ec ?
pl.get() :
nullptr);
80 throw std::runtime_error(
"Unable to create stream\n");
111 infos.
name.empty() ?
nullptr : infos.
name.c_str(),
125 infos.
name.empty() ?
nullptr : infos.
name.c_str(),
170 if (
not audiostream_)
180 audiostream_ =
nullptr;
182 std::unique_lock lock(mutex_);
183 for (
auto op : ongoing_ops)
186 cond_.wait(lock, [
this]{
return ongoing_ops.empty(); });
193 JAMI_LOG(
"[audiostream] Stream moved: {:d}, {:s}",
201 JAMI_ERR(
"[audiostream] moved() unable to get audio stream device");
217 JAMI_ERROR(
"[audiostream] AudioStream pointer became invalid during pa_source_info_cb_t callback!");
223 JAMI_WARNING(
"[audiostream] capture stream using pulse echo cancel module? {} ({})",
230 std::lock_guard lock(mutex_);
234 ongoing_ops.emplace(
op);
241 std::lock_guard lock(mutex_);
242 ongoing_ops.erase(
op);
258 JAMI_DBG(
"Stream is terminating…");
std::function< void()> OnReady
std::function< void(size_t)> OnData
AudioFormat format() const
AudioStream(pa_context *, pa_threaded_mainloop *, const char *, AudioDeviceType, unsigned, pa_sample_format_t, const PaDeviceInfos &, bool, OnReady onReady, OnData onData)
Constructor.
#define JAMI_ERROR(formatstr,...)
#define JAMI_DEBUG(formatstr,...)
#define JAMI_WARNING(formatstr,...)
#define JAMI_LOG(formatstr,...)
void emitSignal(Args... args)
void destroyStream(pa_stream *s)
void disconnectStream(pa_stream *s)
Convenience structure to hold PulseAudio device propreties such as supported channel number etc.
pa_channel_map channel_map