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);
85 QCoreAudioUtils::DeviceDisconnectMonitor m_disconnectMonitor;
86 QFuture<
void> m_stopOnDisconnected;
89 QCoreAudioUtils::AudioUnitHandle m_audioUnit;
91 std::optional<AudioCallback> m_audioCallback;
92 QCoreAudioSource *m_parent;
94 AudioBufferList m_bufferList{};
95 UInt32 m_bufferCapacity{};
99 std::vector<uint8_t> m_outputBuffer;
100 AudioBufferList m_outputBufferList{};
107 std::optional<QtMultimediaPrivate::QAVAudioSessionManager::ActivationToken> m_sessionActivation;
111class QCoreAudioSource
final
112 :
public QtMultimediaPrivate::QPlatformAudioSourceImplementationWithCallback<
113 QCoreAudioSourceStream, QCoreAudioSource>
115 using BaseClass = QtMultimediaPrivate::QPlatformAudioSourceImplementationWithCallback<
116 QCoreAudioSourceStream, QCoreAudioSource>;
119 QCoreAudioSource(QAudioDevice device,
const QAudioFormat &format, QObject *parent);
129 using BaseClass::updateStreamState;
134 QtMultimediaPrivate::QAVAudioSessionRecovery<QCoreAudioSource> m_recovery{ *
this };
QCoreAudioSourceStream(QAudioDevice, const QAudioFormat &, std::optional< int > ringbufferSize, QCoreAudioSource *parent, float volume, std::optional< QtMultimediaPrivate::NativePeriodFrames > nativePeriodFrames)