4#ifndef QPULSEAUDIO_CONTEXTMANAGER_P_H
5#define QPULSEAUDIO_CONTEXTMANAGER_P_H
18#include <QtCore/qmap.h>
19#include <QtCore/qbytearray.h>
20#include <QtCore/qreadwritelock.h>
21#include <pulse/pulseaudio.h>
23#include <qaudioformat.h>
39 pa_threaded_mainloop *
mainloop() {
return m_mainLoop.get(); }
40 pa_context *
context() {
return m_context.get(); }
45 pa_threaded_mainloop_lock(m_mainLoop.get());
51 pa_threaded_mainloop_unlock(m_mainLoop.get());
54 void wait(
const PAOperationHandle &op);
61 return m_mainLoop && pa_threaded_mainloop_in_thread(m_mainLoop.get());
78 void onContextFailed();
81 static void serverInfoCallback(pa_context *context,
const pa_server_info *info,
void *userdata);
82 static void sinkInfoCallback(pa_context *context,
const pa_sink_info *info,
int isLast,
84 static void sourceInfoCallback(pa_context *context,
const pa_source_info *info,
int isLast,
86 static void eventCallback(pa_context *context, pa_subscription_event_type_t t, uint32_t index,
88 static void contextStateCallbackInit(pa_context *context,
void *userdata);
89 static void contextStateCallback(pa_context *c,
void *userdata);
94 QMap<
int, QAudioDevice> m_sinks;
95 QMap<
int, QAudioDevice> m_sources;
97 QByteArray m_defaultSink;
98 QByteArray m_defaultSource;
100 mutable QReadWriteLock m_sinkLock;
101 mutable QReadWriteLock m_sourceLock;
102 mutable QReadWriteLock m_serverLock;
104 pa_mainloop_api *m_mainLoopApi{};
105 std::unique_ptr<pa_threaded_mainloop, QPulseAudioInternal::PaMainLoopDeleter> m_mainLoop;
106 PAContextHandle m_context;
109 QString m_serverName;
~QPulseAudioContextManager() override
bool isInMainLoop() const
void wait(const PAOperationHandle &op)
QByteArray defaultDevice(QAudioDevice::Mode mode) const
static QPulseAudioContextManager * instance()
bool waitForAsyncOperation(const PAOperationHandle &)
pa_context_state_t getContextState()
bool waitForAsyncOperation(pa_operation *op)
pa_threaded_mainloop * mainloop()
QList< QAudioDevice > availableDevices(QAudioDevice::Mode mode) const
QPulseAudioContextManager(QObject *parent=nullptr)
void audioOutputsChanged()
Combined button and popup list for selecting options.
static bool updateDevicesMap(QReadWriteLock &lock, const QByteArray &defaultDeviceId, QMap< int, QAudioDevice > &devices, QAudioDevice::Mode mode, const Info &info)
Q_GLOBAL_STATIC(QPulseAudioContextManager, pulseEngine)
static std::unique_ptr< QAudioDevicePrivate > makeQAudioDevicePrivate(const char *device, const char *desc, bool isDef, QAudioDevice::Mode mode, const pa_channel_map &map, const pa_sample_spec &spec)
static bool updateDevicesMap(QReadWriteLock &lock, const QByteArray &defaultDeviceId, QMap< int, QAudioDevice > &devices)