15#ifndef QQNXSNDAUDIOSINK_P_H
16#define QQNXSNDAUDIOSINK_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 QQnxSndAudioSink;
55 std::optional<qsizetype> ringbufferSize, QQnxSndAudioSink *parent,
56 float volume, std::optional<NativePeriodFrames> nativePeriodFrames,
68 bool start(QIODevice *);
80 int recoverFromXrun(
int err);
82 void joinWorkerThread();
85 void handleSndPcmError(
int err = 0);
86 void closePcmDevice();
88 snd_pcm_t *m_handle =
nullptr;
89 snd_pcm_uframes_t m_periodFrames = 0;
93 QAudioHelperInternal::NativeSampleFormat m_nativeFormat =
96 std::atomic_bool m_suspended =
false;
98 QtPrivate::QAutoResetEvent m_ringbufferDrained;
100 std::unique_ptr<QThread> m_workerThread;
105 std::optional<AudioCallback> m_audioCallback =
std::
nullopt;
112 std::atomic<QQnxSndAudioSink *> m_parent{
nullptr };
115class QQnxSndAudioSink
final
116 :
public QtMultimediaPrivate::QPlatformAudioSinkImplementation<QQnxSndAudioSinkStream,
119 using BaseClass = QtMultimediaPrivate::QPlatformAudioSinkImplementation<QQnxSndAudioSinkStream,
~QQnxSndAudioSink() override
QQnxSndAudioSink(QAudioDevice, const QAudioFormat &, QObject *parent)
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)
bool start(AudioCallback)
QQnxSndAudioSink SinkType
QtMultimediaPrivate::QPlatformAudioSinkStream::AudioCallback AudioCallback
void updateStreamIdle(bool) override
void stop(ShutdownPolicy)
QQnxSndAudioSinkStream(QAudioDevice, const QAudioFormat &, std::optional< qsizetype > ringbufferSize, QQnxSndAudioSink *parent, float volume, std::optional< NativePeriodFrames > nativePeriodFrames, AudioEndpointRole)
snd_pcm_uframes_t periodFrames