6#include <QtMultimedia/private/qaudiohelpers_p.h>
8#include <QtCore/qloggingcategory.h>
16QOhosAudioSinkStream::QOhosAudioSinkStream(QAudioDevice device,
const QAudioFormat &format,
17 std::optional<qsizetype> ringbufferSize,
18 QOhosAudioSink *parent,
float volume,
19 std::optional<QtMultimediaPrivate::NativePeriodFrames> hardwareBufferFrames,
20 AudioEndpointRole role)
66bool QOhosAudioSinkStream::open()
68 if (!m_stream || !m_stream->isOpen()) {
69 qCWarning(qLcOhosAudioSink) <<
"Stream creation failed";
76bool QOhosAudioSinkStream::
start(QIODevice *device)
78 Q_ASSERT(thread()->isCurrentThread());
81 createQIODeviceConnections(device);
83 if (!m_stream->start()) {
92 auto *writer = createRingbufferWriterDevice();
93 return start(writer) ? writer :
nullptr;
96bool QOhosAudioSinkStream::
start(AudioCallback cb)
98 Q_ASSERT(thread()->isCurrentThread());
99 m_audioCallback = std::move(cb);
101 if (!m_stream->start()) {
110 Q_ASSERT(thread()->isCurrentThread());
116 Q_ASSERT(thread()->isCurrentThread());
120void QOhosAudioSinkStream::
stop(ShutdownPolicy policy)
123 disconnectQIODeviceConnections();
126 case ShutdownPolicy::DrainRingbuffer:
129 case ShutdownPolicy::DiscardRingbuffer:
133 Q_UNREACHABLE_RETURN();
137void QOhosAudioSinkStream::stop()
139 if (isIdle() || m_audioCallback)
143 connectIdleHandler([
this] {
144 Q_ASSERT(thread()->isCurrentThread());
152 m_self = shared_from_this();
155void QOhosAudioSinkStream::reset()
168 m_parent->updateStreamIdle(arg);
void stop(ShutdownPolicy policy)
bool start(AudioCallback cb)
bool start(QIODevice *device)
void updateStreamIdle(bool arg) override
Combined button and popup list for selecting options.