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<int32_t> hardwareBufferFrames,
20 AudioEndpointRole role)
87bool QAndroidAudioSinkStream::open()
89 if (!m_stream->isOpen()) {
90 qCWarning(qLcAndroidAudioSink) <<
"Stream null";
95 if (!m_stream->areStreamParametersRespected())
96 qCWarning(qLcAndroidAudioSink) <<
"Stream parameters not correct";
101bool QAndroidAudioSinkStream::
start(QIODevice *device)
103 Q_ASSERT(thread()->isCurrentThread());
104 setQIODevice(device);
106 createQIODeviceConnections(device);
109 if (!m_stream->start()) {
119 auto *writer = createRingbufferWriterDevice();
120 return start(writer) ? writer :
nullptr;
123bool QAndroidAudioSinkStream::
start(AudioCallback cb)
125 Q_ASSERT(thread()->isCurrentThread());
126 m_audioCallback = std::move(cb);
128 if (!m_stream->start()) {
138 Q_ASSERT(thread()->isCurrentThread());
144 Q_ASSERT(thread()->isCurrentThread());
148void QAndroidAudioSinkStream::
stop(ShutdownPolicy policy)
151 disconnectQIODeviceConnections();
154 case ShutdownPolicy::DrainRingbuffer:
157 case ShutdownPolicy::DiscardRingbuffer:
161 Q_UNREACHABLE_RETURN();
165void QAndroidAudioSinkStream::stop()
167 if (isIdle() || m_audioCallback)
171 connectIdleHandler([
this] {
172 Q_ASSERT(thread()->isCurrentThread());
184 m_self = shared_from_this();
187void QAndroidAudioSinkStream::reset()
189 Q_ASSERT(thread()->isCurrentThread());
196 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.