48 std::optional<qsizetype> ringbufferSize, QWindowsAudioSource *parent,
49 float volume, std::optional<int32_t> hardwareBufferFrames);
59 bool open() {
return true; }
60 bool start(QIODevice *);
62 bool start(AudioCallback &&);
71 bool openAudioClient(ComPtr<IMMDevice> device);
72 bool startAudioClient();
74 template <
typename Functor>
75 bool visitAudioClientBuffer(Functor &&);
77 void runProcessLoop();
80 void handleAudioClientError();
82 ComPtr<IAudioClient3> m_audioClient;
83 ComPtr<IAudioCaptureClient> m_captureClient;
85 QWindowsAudioUtils::reference_time m_periodSize;
86 qsizetype m_audioClientFrames;
88 std::atomic_bool m_suspended{};
90 QAutoResetEvent m_ringbufferDrained;
92 const QUniqueWin32NullHandle m_wasapiHandle;
93 std::unique_ptr<QThread> m_workerThread;
95 std::optional<AudioCallback> m_audioCallback;
96 QWindowsAudioSource *m_parent;
98 QAudioFormat m_hostFormat;
99 std::unique_ptr<std::pmr::memory_resource> m_memoryResource;
100 std::unique_ptr<QWindowsResampler> m_resampler;