33class QCoreAudioSourceStream
final :
public QtMultimediaPrivate::QPlatformAudioSourceStream
35 using QPlatformAudioSourceStream = QtMultimediaPrivate::QPlatformAudioSourceStream;
41 std::optional<
int> ringbufferSize, QCoreAudioSource *parent,
42 float volume, std::optional<QtMultimediaPrivate::NativePeriodFrames> nativePeriodFrames);
43 Q_DISABLE_COPY_MOVE(QCoreAudioSourceStream)
44 ~QCoreAudioSourceStream();
48 bool start(QIODevice *);
50 bool start(AudioCallback &&);
56 using QPlatformAudioSourceStream::bytesReady;
57 using QPlatformAudioSourceStream::deviceIsRingbufferReader;
58 using QPlatformAudioSourceStream::processedDuration;
59 using QPlatformAudioSourceStream::ringbufferSizeInBytes;
60 using QPlatformAudioSourceStream::setVolume;
70 bool startAudioUnit();
73 OSStatus processInput(AudioUnitRenderActionFlags *ioActionFlags,
74 const AudioTimeStamp *timeStamp, UInt32 inBusNumber,
75 UInt32 inNumberFrames,
76 AudioBufferList *ioData)
noexcept Q_DECL_NONBLOCKING_FUNCTION;
78 OSStatus processRingbuffer(QSpan<
const std::byte> inputSpan,
79 UInt32 inNumberFrames)
noexcept Q_DECL_NONBLOCKING_FUNCTION;
80 OSStatus processAudioCallback(QSpan<
const std::byte> inputSpan)
noexcept Q_DECL_NONBLOCKING_FUNCTION;
83 bool setDisconnectListener(AudioObjectID id);
84 void cancelDisconnectFutures();
86 QCoreAudioUtils::DeviceDisconnectMonitor m_disconnectMonitor;
87 QFuture<
void> m_disconnectFuture;
88 QFuture<
void> m_stopOnDisconnected;
91 QCoreAudioUtils::AudioUnitHandle m_audioUnit;
93 std::optional<AudioCallback> m_audioCallback;
94 QCoreAudioSource *m_parent;
96 AudioBufferList m_bufferList{};
97 UInt32 m_bufferCapacity{};
101 std::vector<uint8_t> m_outputBuffer;
102 AudioBufferList m_outputBufferList{};
109 std::optional<QtMultimediaPrivate::QAVAudioSessionManager::ActivationToken> m_sessionActivation;
113class QCoreAudioSource
final
114 :
public QtMultimediaPrivate::QPlatformAudioSourceImplementationWithCallback<
115 QCoreAudioSourceStream, QCoreAudioSource>
117 using BaseClass = QtMultimediaPrivate::QPlatformAudioSourceImplementationWithCallback<
118 QCoreAudioSourceStream, QCoreAudioSource>;
121 QCoreAudioSource(QAudioDevice device,
const QAudioFormat &format, QObject *parent);
131 using BaseClass::updateStreamState;
136 QtMultimediaPrivate::QAVAudioSessionRecovery<QCoreAudioSource> m_recovery{ *
this };
QCoreAudioSourceStream(QAudioDevice, const QAudioFormat &, std::optional< int > ringbufferSize, QCoreAudioSource *parent, float volume, std::optional< QtMultimediaPrivate::NativePeriodFrames > nativePeriodFrames)