33struct QPulseAudioSinkStream
final : QPlatformAudioSinkStream
37 QPulseAudioSinkStream(QAudioDevice,
const QAudioFormat &format,
38 std::optional<qsizetype> ringbufferSize, QPulseAudioSink *parent,
39 float volume, std::optional<int32_t> hardwareBufferSize,
43 using QPlatformAudioSinkStream::bytesFree;
44 using QPlatformAudioSinkStream::processedDuration;
45 using QPlatformAudioSinkStream::ringbufferSizeInBytes;
46 using QPlatformAudioSinkStream::setVolume;
48 bool start(QIODevice *device);
49 bool start(AudioCallback &&);
52 void stop() { stop(ShutdownPolicy::DrainRingbuffer); }
53 void reset() { stop(ShutdownPolicy::DiscardRingbuffer); }
60 enum class StreamType : uint8_t
66 void installCallbacks(StreamType);
67 void uninstallCallbacks();
69 bool startStream(StreamType);
74 void underflowCallback() { }
75 void overflowCallback() { }
76 void stateCallback() { }
77 void writeCallbackRingbuffer(size_t requestedBytes);
78 void writeCallbackAudioCallback(size_t requestedBytes);
79 void latencyUpdateCallback() { }
81 QPulseAudioSink *m_parent;
82 PAStreamHandle m_stream;
84 std::optional<AudioCallback> m_audioCallback;
89class QPulseAudioSink
final
90 :
public QPlatformAudioSinkImplementation<QPulseAudioSinkStream, QPulseAudioSink>
92 using BaseClass = QPlatformAudioSinkImplementation<QPulseAudioSinkStream, QPulseAudioSink>;
95 QPulseAudioSink(QAudioDevice,
const QAudioFormat &, QObject *parent);
97 void start(QIODevice *device)
override;
99 void start(AudioCallback &&)
override;
102 bool validatePulseaudio();