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)
89bool QAndroidAudioSinkStream::open()
91 if (!m_stream->isOpen()) {
92 qCWarning(qLcAndroidAudioSink) <<
"Stream null";
97 if (!m_stream->areStreamParametersRespected())
98 qCWarning(qLcAndroidAudioSink) <<
"Stream parameters not correct";
103bool QAndroidAudioSinkStream::
start(QIODevice *device)
105 Q_ASSERT(thread()->isCurrentThread());
106 setQIODevice(device);
108 createQIODeviceConnections(device);
111 if (!m_stream->start()) {
121 auto *writer = createRingbufferWriterDevice();
122 return start(writer) ? writer :
nullptr;
125bool QAndroidAudioSinkStream::
start(AudioCallback cb)
127 Q_ASSERT(thread()->isCurrentThread());
128 m_audioCallback = std::move(cb);
130 if (!m_stream->start()) {
140 Q_ASSERT(thread()->isCurrentThread());
146 Q_ASSERT(thread()->isCurrentThread());
150void QAndroidAudioSinkStream::
stop(ShutdownPolicy policy)
153 disconnectQIODeviceConnections();
156 case ShutdownPolicy::DrainRingbuffer:
159 case ShutdownPolicy::DiscardRingbuffer:
163 Q_UNREACHABLE_RETURN();
167void QAndroidAudioSinkStream::stop()
169 if (isIdle() || m_audioCallback)
173 connectIdleHandler([
this] {
174 Q_ASSERT(thread()->isCurrentThread());
186 m_self = shared_from_this();
189void QAndroidAudioSinkStream::reset()
191 Q_ASSERT(thread()->isCurrentThread());
198 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.