8#include <QtMultimedia/private/qaudiohelpers_p.h>
16QAndroidAudioSinkStream::QAndroidAudioSinkStream(QAudioDevice device,
const QAudioFormat &format,
17 std::optional<qsizetype> ringbufferSize,
18 QAndroidAudioSink *parent,
float volume,
19 std::optional<NativePeriodFrames> nativePeriodFrames,
20 AudioEndpointRole role)
90bool QAndroidAudioSinkStream::open()
92 if (!m_stream->isOpen()) {
93 qCWarning(qLcAndroidAudioSink) <<
"Stream null";
98 if (!m_stream->areStreamParametersRespected())
99 qCWarning(qLcAndroidAudioSink) <<
"Stream parameters not correct";
104bool QAndroidAudioSinkStream::
start(QIODevice *device)
106 Q_ASSERT(thread()->isCurrentThread());
107 setQIODevice(device);
109 createQIODeviceConnections(device);
112 if (!m_stream->start()) {
122 auto *writer = createRingbufferWriterDevice();
123 return start(writer) ? writer :
nullptr;
126bool QAndroidAudioSinkStream::
start(AudioCallback cb)
128 Q_ASSERT(thread()->isCurrentThread());
129 m_audioCallback = std::move(cb);
131 if (!m_stream->start()) {
141 Q_ASSERT(thread()->isCurrentThread());
147 Q_ASSERT(thread()->isCurrentThread());
151void QAndroidAudioSinkStream::
stop(ShutdownPolicy policy)
154 disconnectQIODeviceConnections();
157 case ShutdownPolicy::DrainRingbuffer:
160 case ShutdownPolicy::DiscardRingbuffer:
164 Q_UNREACHABLE_RETURN();
168void QAndroidAudioSinkStream::stop()
170 if (isIdle() || m_audioCallback)
174 connectIdleHandler([
this] {
175 Q_ASSERT(thread()->isCurrentThread());
187 m_self = shared_from_this();
190void QAndroidAudioSinkStream::reset()
192 Q_ASSERT(thread()->isCurrentThread());
199 m_parent->updateStreamIdle(arg);
bool start(AudioCallback cb)
void stop(ShutdownPolicy policy)
bool start(QIODevice *device)
void updateStreamIdle(bool arg) override
Combined button and popup list for selecting options.