4#ifndef QPIPEWIRE_AUDIOSINK_P_H
5#define QPIPEWIRE_AUDIOSINK_P_H
18#include <QtMultimedia/private/qaudio_platform_implementation_support_p.h>
19#include <QtMultimedia/private/qaudiosystem_p.h>
20#include <QtMultimedia/private/qaudiosystem_platform_stream_support_p.h>
21#include <QtMultimedia/private/qpipewire_audiostream_p.h>
22#include <QtCore/qsemaphore.h>
23#include <QtCore/qtclasshelpermacros.h>
31class QPipewireAudioSink;
41 std::optional<qsizetype> ringbufferSize, QPipewireAudioSink *parent,
42 float volume, std::optional<int32_t> hardwareBufferFrames,
54 bool start(QIODevice *device);
63 void createStream(QPipewireAudioStream::StreamType);
64 std::optional<ObjectSerial> findSinkNodeSerial();
73 const char * )
override;
76 template <
typename Functor>
77 void processHelper(Functor &&f);
79 void disconnectStream();
80 QSemaphore m_disconnectSemaphore;
83 QAutoResetEvent m_ringbufferDrained;
90 QtPrivate::QAutoResetEvent m_xrunOccurred;
91 QMetaObject::Connection m_xrunNotification;
93 [[maybe_unused]]
static void fakeXRun();
95 AudioEndpointRole m_role;
96 std::optional<AudioCallback> m_audioCallback;
98 QPipewireAudioSink *m_parent;
103class QPipewireAudioSink
final
104 :
public QPlatformAudioSinkImplementation<QPipewireAudioSinkStream, QPipewireAudioSink>
107 QPlatformAudioSinkImplementation<QPipewireAudioSinkStream, QPipewireAudioSink>;
~QPipewireAudioSink() override
QPipewireAudioSink(QAudioDevice, const QAudioFormat &, QObject *parent)
static constexpr bool pipewireRealtimeTracing
Q_STATIC_LOGGING_CATEGORY(lcPipewireAudioSink, "qt.multimedia.pipewire.audiosink")
static auto resolveHostBuffer(pw_buffer *b, const QAudioFormat &format)
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
void finalizeStream() override