26class QCoreAudioSourceStream
final : QtMultimediaPrivate::QPlatformAudioSourceStream
28 using QPlatformAudioSourceStream = QtMultimediaPrivate::QPlatformAudioSourceStream;
33 explicit QCoreAudioSourceStream(QAudioDevice,
const QAudioFormat &,
34 std::optional<
int> ringbufferSize, QDarwinAudioSource *parent,
35 float volume, std::optional<int32_t> hardwareBufferFrames);
36 Q_DISABLE_COPY_MOVE(QCoreAudioSourceStream)
37 ~QCoreAudioSourceStream();
41 bool start(QIODevice *);
43 bool start(AudioCallback &&);
49 using QPlatformAudioSourceStream::bytesReady;
50 using QPlatformAudioSourceStream::deviceIsRingbufferReader;
51 using QPlatformAudioSourceStream::processedDuration;
52 using QPlatformAudioSourceStream::ringbufferSizeInBytes;
53 using QPlatformAudioSourceStream::setVolume;
61 static OSStatus inputCallback(
void *inRefCon, AudioUnitRenderActionFlags *ioActionFlags,
62 const AudioTimeStamp *inTimeStamp, UInt32 inBusNumber,
63 UInt32 inNumberFrames, AudioBufferList *ioData);
65 OSStatus processRingbuffer(AudioUnitRenderActionFlags *ioActionFlags,
const AudioTimeStamp *,
66 UInt32 inBusNumber, UInt32 inNumberFrames,
67 AudioBufferList *ioData)
noexcept QT_MM_NONBLOCKING;
69 OSStatus processAudioCallback(AudioUnitRenderActionFlags *ioActionFlags,
const AudioTimeStamp *,
70 UInt32 inBusNumber, UInt32 inNumberFrames,
71 AudioBufferList *ioData)
noexcept QT_MM_NONBLOCKING;
74 bool addDisconnectListener(AudioObjectID id);
75 void removeDisconnectListener();
77 QCoreAudioUtils::DeviceDisconnectMonitor m_disconnectMonitor;
78 QFuture<
void> m_stopOnDisconnected;
81 QCoreAudioUtils::AudioUnitHandle m_audioUnit;
82 bool m_audioUnitRunning{};
84 std::optional<AudioCallback> m_audioCallback;
85 QDarwinAudioSource *m_parent;
87 AudioBufferList m_bufferList{};
90class QDarwinAudioSource
final
91 :
public QtMultimediaPrivate::QPlatformAudioSourceImplementationWithCallback<
92 QCoreAudioSourceStream, QDarwinAudioSource>
94 using BaseClass = QtMultimediaPrivate::QPlatformAudioSourceImplementationWithCallback<
95 QCoreAudioSourceStream, QDarwinAudioSource>;
98 QDarwinAudioSource(QAudioDevice device,
const QAudioFormat &format, QObject *parent);