3#ifndef IOSAUDIOOUTPUT_H
4#define IOSAUDIOOUTPUT_H
17#include <private/qaudiosystem_p.h>
18#include <private/qaudiostatemachine_p.h>
20#if defined(Q_OS_MACOS)
21# include <CoreAudio/CoreAudio.h>
23#include <AudioUnit/AudioUnit.h>
24#include <CoreAudio/CoreAudioTypes.h>
26#include <QtCore/QIODevice>
67 bool m_deviceError =
false;
68 bool m_fillingEnabled =
false;
69 bool m_deviceAtEnd =
false;
70 const int m_maxPeriodSize = 0;
71 const int m_bytesPerFrame = 0;
72 const int m_periodTime = 0;
74 QTimer *m_fillTimer =
nullptr;
75 std::unique_ptr<CoreAudioRingBuffer> m_buffer;
121 void updateAudioDevice();
124 enum ThreadState { Running, Draining, Stopped };
126 static OSStatus renderCallback(
void *inRefCon,
127 AudioUnitRenderActionFlags *ioActionFlags,
128 const AudioTimeStamp *inTimeStamp,
130 UInt32 inNumberFrames,
131 AudioBufferList *ioData);
135 void onAudioDeviceIdle();
136 void onAudioDeviceError();
137 void onAudioDeviceDrained();
142 static constexpr int DEFAULT_BUFFER_SIZE = 8 * 1024;
144 bool m_isOpen =
false;
145 int m_internalBufferSize = DEFAULT_BUFFER_SIZE;
146 int m_periodSizeBytes = 0;
150#if defined(Q_OS_MACOS)
151 AudioDeviceID m_audioDeviceId;
153 AudioUnit m_audioUnit = 0;
154 bool m_audioUnitStarted =
false;
156 AudioStreamBasicDescription m_streamFormat;
157 std::unique_ptr<QDarwinAudioSinkBuffer> m_audioBuffer;
158 qreal m_cachedVolume = 1.;
159#if defined(Q_OS_MACOS)
162 bool m_pullMode =
false;
IOBluetoothDevice * device
The QAudioDevice class provides an information about audio devices and their functionality.
void setFillingEnabled(bool enabled)
qint64 readFrames(char *data, qint64 maxFrames)
~QDarwinAudioSinkBuffer()
qint64 writeBytes(const char *data, qint64 maxSize)
void setPrefetchDevice(QIODevice *device)
QDarwinAudioSinkBuffer(int bufferSize, int maxPeriodSize, QAudioFormat const &audioFormat)
QIODevice * prefetchDevice() const
QDarwinAudioSinkDevice(QDarwinAudioSinkBuffer *audioBuffer, QObject *parent)
bool isSequential() const
Returns true if this device is sequential; otherwise returns false.
qint64 writeData(const char *data, qint64 len)
Writes up to maxSize bytes from data to the device.
void setFormat(const QAudioFormat &format)
qint64 processedUSecs() const
QAudioFormat format() const
QDarwinAudioSink(const QAudioDevice &device, QObject *parent)
void setBufferSize(qsizetype value)
QAudio::State state() const
QAudio::Error error() const
void setVolume(qreal volume)
qsizetype bytesFree() const
qsizetype bufferSize() const
\inmodule QtCore \reentrant
QObject * parent() const
Returns a pointer to the parent object.
Combined button and popup list for selecting options.
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLenum GLenum GLsizei const GLuint GLboolean enabled
GLint GLsizei GLsizei GLenum format