4#ifndef QPIPEWIRE_AUDIOSOURCE_P_H
5#define QPIPEWIRE_AUDIOSOURCE_P_H
18#include <QtCore/qsemaphore.h>
19#include <QtCore/qtclasshelpermacros.h>
21#include <QtMultimedia/private/qaudio_platform_implementation_support_p.h>
22#include <QtMultimedia/private/qaudiosystem_p.h>
23#include <QtMultimedia/private/qaudiosystem_platform_stream_support_p.h>
24#include <QtMultimedia/private/qpipewire_audiostream_p.h>
32class QPipewireAudioSource;
45 std::optional<qsizetype> ringbufferSize,
46 QPipewireAudioSource *parent,
float volume,
47 std::optional<int32_t> hardwareBufferFrames);
51 bool open() {
return true; }
52 bool start(QIODevice *device);
54 bool start(AudioCallback &&);
66 void createStream(QPipewireAudioStream::StreamType);
76 void disconnectStream();
78 QSemaphore m_streamDisconnected;
82 QtPrivate::QAutoResetEvent m_xrunOccurred;
83 QMetaObject::Connection m_xrunNotification;
85 std::optional<AudioCallback> m_audioCallback;
87 QPipewireAudioSource *m_parent;
92class QPipewireAudioSource
final
93 :
public QPlatformAudioSourceImplementationWithCallback<QPipewireAudioSourceStream,
96 using BaseClass = QPlatformAudioSourceImplementationWithCallback<QPipewireAudioSourceStream,
97 QPipewireAudioSource>;
static bool minimumRequirementMet()
static QAudioDeviceMonitor & deviceMonitor()
static QAudioContextManager * instance()
DeviceLists getDeviceLists(bool verifyThreading=true)
QPlatformAudioSink * createAudioSink(const QAudioDevice &, const QAudioFormat &, QObject *parent) override
~QAudioDevices() override=default
QPlatformAudioSource * createAudioSource(const QAudioDevice &, const QAudioFormat &, QObject *parent) override
static bool isSupported()
QList< QAudioDevice > findAudioOutputs() const override
QList< QAudioDevice > findAudioInputs() const override
QLatin1String backendName() const override
QPipewireAudioSink(QAudioDevice, const QAudioFormat &, QObject *parent)
QPipewireAudioSource(QAudioDevice, const QAudioFormat &, QObject *parent)
StrongIdType< uint64_t, ObjectSerialTag > ObjectSerial
QAudioFormat::SampleFormat SampleFormat
bool start(AudioCallback)
void updateStreamIdle(bool idle) override
QPipewireAudioSinkStream(QAudioDevice, const QAudioFormat &, std::optional< qsizetype > ringbufferSize, QPipewireAudioSink *parent, float volume, std::optional< int32_t > hardwareBufferFrames, AudioEndpointRole)
QPipewireAudioSink SinkType
bool start(QIODevice *device)
void stop(ShutdownPolicy)
void processRingbuffer() noexcept QT_MM_NONBLOCKING override
void handleDeviceRemoved() override
void xrunOccurred(int) override
void stateChanged(pw_stream_state, pw_stream_state state, const char *) override
void processCallback() noexcept QT_MM_NONBLOCKING override
bool start(QIODevice *device)
void stop(ShutdownPolicy)
void handleDeviceRemoved() override
QPipewireAudioSourceStream(QAudioDevice, const QAudioFormat &, std::optional< qsizetype > ringbufferSize, QPipewireAudioSource *parent, float volume, std::optional< int32_t > hardwareBufferFrames)
bool start(AudioCallback &&)
void updateStreamIdle(bool idle) override
void xrunOccurred(int) override
QAudioFormat::SampleFormat SampleFormat
void stateChanged(pw_stream_state old, pw_stream_state state, const char *error) override
void processCallback() noexcept QT_MM_NONBLOCKING override
void processRingbuffer() noexcept QT_MM_NONBLOCKING override
QPipewireAudioSource SourceType