15#ifndef QQNXSNDAUDIOSOURCE_P_H
16#define QQNXSNDAUDIOSOURCE_P_H
18#include <alsa/asoundlib.h>
20#include <QtCore/qiodevice.h>
21#include <QtCore/qthread.h>
22#include <QtCore/qtclasshelpermacros.h>
23#include <QtMultimedia/qaudio.h>
24#include <QtMultimedia/qaudiodevice.h>
25#include <QtMultimedia/private/qaudiosystem_p.h>
26#include <QtMultimedia/private/qaudiosystem_platform_stream_support_p.h>
27#include <QtMultimedia/private/qaudio_platform_implementation_support_p.h>
37class QQnxSndAudioSource;
49 std::optional<qsizetype> ringbufferSize, QQnxSndAudioSource *parent,
50 float volume, std::optional<NativePeriodFrames> nativePeriodFrames);
61 bool start(QIODevice *);
73 int recoverFromXrun(
int err);
75 void joinWorkerThread();
76 void runProcessLoop();
77 bool processOnePeriod();
78 void handleSndPcmError(
int err = 0);
79 void closePcmDevice();
81 snd_pcm_t *m_handle =
nullptr;
82 snd_pcm_uframes_t m_periodFrames = 0;
86 QAudioHelperInternal::NativeSampleFormat m_nativeFormat =
89 std::atomic_bool m_suspended =
false;
91 std::unique_ptr<QThread> m_workerThread;
94 std::optional<AudioCallback> m_audioCallback =
std::
nullopt;
98 std::atomic<QQnxSndAudioSource *> m_parent{
nullptr };
101class QQnxSndAudioSource
final
102 :
public QtMultimediaPrivate::QPlatformAudioSourceImplementationWithCallback<
103 QQnxSndAudioSourceStream, QQnxSndAudioSource>
105 using BaseClass = QtMultimediaPrivate::QPlatformAudioSourceImplementationWithCallback<
106 QQnxSndAudioSourceStream, QQnxSndAudioSource>;
QQnxSndAudioSource(QAudioDevice, const QAudioFormat &, QObject *parent)
~QQnxSndAudioSource() override
void setWorkerRealtimePriority(const QLoggingCategory &category)
int startPcm(snd_pcm_t *handle)
int recoverFromXrun(snd_pcm_t *handle, int err)
PollOutcome pollPcm(snd_pcm_t *handle, const WakePipe &wake)
PcmOpenResult openConfiguredPcm(const PcmOpenConfig &config)
QT_BEGIN_NAMESPACE Q_STATIC_LOGGING_CATEGORY(lcSynthesizedIterableAccess, "qt.iterable.synthesized", QtWarningMsg)
void updateStreamIdle(bool) override
bool start(AudioCallback)
QtMultimediaPrivate::QPlatformAudioSourceStream::AudioCallback AudioCallback
void stop(ShutdownPolicy)
QQnxSndAudioSource SourceType
QQnxSndAudioSourceStream(QAudioDevice, const QAudioFormat &, std::optional< qsizetype > ringbufferSize, QQnxSndAudioSource *parent, float volume, std::optional< NativePeriodFrames > nativePeriodFrames)
snd_pcm_uframes_t periodFrames