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)
79bool QAndroidAudioSinkStream::open()
81 if (!m_stream->isOpen()) {
82 qCWarning(qLcAndroidAudioSink) <<
"Stream null";
87 if (!m_stream->areStreamParametersRespected())
88 qCWarning(qLcAndroidAudioSink) <<
"Stream parameters not correct";
93bool QAndroidAudioSinkStream::
start(QIODevice *device)
95 Q_ASSERT(thread()->isCurrentThread());
98 createQIODeviceConnections(device);
101 if (!m_stream->start()) {
111 auto *writer = createRingbufferWriterDevice();
112 return start(writer) ? writer :
nullptr;
115bool QAndroidAudioSinkStream::
start(AudioCallback cb)
117 Q_ASSERT(thread()->isCurrentThread());
118 m_audioCallback = std::move(cb);
120 if (!m_stream->start()) {
130 Q_ASSERT(thread()->isCurrentThread());
136 Q_ASSERT(thread()->isCurrentThread());
140void QAndroidAudioSinkStream::
stop(ShutdownPolicy policy)
143 disconnectQIODeviceConnections();
146 case ShutdownPolicy::DrainRingbuffer:
149 case ShutdownPolicy::DiscardRingbuffer:
153 Q_UNREACHABLE_RETURN();
157void QAndroidAudioSinkStream::stop()
159 if (isIdle() || m_audioCallback)
163 connectIdleHandler([
this] {
164 Q_ASSERT(thread()->isCurrentThread());
176 m_self = shared_from_this();
179void QAndroidAudioSinkStream::reset()
181 Q_ASSERT(thread()->isCurrentThread());
188 m_parent->updateStreamIdle(arg);
bool start(AudioCallback cb)
void stop(ShutdownPolicy policy)
bool start(QIODevice *device)
void updateStreamIdle(bool arg) override