7#include <QtCore/qshareddata.h>
9#include <QtMultimedia/qtmultimediaglobal.h>
11#include <QtMultimedia/qtaudio.h>
12#include <QtMultimedia/qaudioformat.h>
47template <QAudioFormat::ChannelConfig config, QAudioFormat::SampleFormat format>
53 static constexpr int constexprPopcount(quint32 i)
55 i = i - ((i >> 1) & 0x55555555);
56 i = (i & 0x33333333) + ((i >> 2) & 0x33333333);
57 i = (i + (i >> 4)) & 0x0F0F0F0F;
58 return (i * 0x01010101) >> 24;
60 static constexpr int nChannels = constexprPopcount(config);
66 if (!(config & (1u << pos)))
69 uint maskedChannels = config & ((1u << pos) - 1);
70 return qPopulationCount(maskedChannels);
74 value_type
value(QAudioFormat::AudioChannelPosition pos)
const {
75 int idx = positionToIndex(pos);
80 void setValue(QAudioFormat::AudioChannelPosition pos, value_type val) {
81 int idx = positionToIndex(pos);
86 value_type
operator[](QAudioFormat::AudioChannelPosition pos)
const {
90 for (
int i = 0; i < nChannels; ++i)
91 channels[i] = QtPrivate::AudioSampleFormatHelper<format>::Default;
95template <QAudioFormat::SampleFormat Format>
96using QAudioFrameMono = QAudioFrame<QAudioFormat::ChannelConfigMono, Format>;
98template <QAudioFormat::SampleFormat Format>
99using QAudioFrameStereo = QAudioFrame<QAudioFormat::ChannelConfigStereo, Format>;
101template <QAudioFormat::SampleFormat Format>
102using QAudioFrame2Dot1 = QAudioFrame<QAudioFormat::ChannelConfig2Dot1, Format>;
104template <QAudioFormat::SampleFormat Format>
105using QAudioFrameSurround5Dot1 = QAudioFrame<QAudioFormat::ChannelConfigSurround5Dot1, Format>;
107template <QAudioFormat::SampleFormat Format>
108using QAudioFrameSurround7Dot1 = QAudioFrame<QAudioFormat::ChannelConfigSurround7Dot1, Format>;
111class QAudioBufferPrivate;
112QT_DECLARE_QESDP_SPECIALIZATION_DTOR_WITH_EXPORT(QAudioBufferPrivate, Q_MULTIMEDIA_EXPORT)
117 QAudioBuffer()
noexcept;
118 QAudioBuffer(
const QAudioBuffer &other)
noexcept;
119 QAudioBuffer(
const QByteArray &data,
const QAudioFormat &format, qint64 startTime = -1);
120 QAudioBuffer(
int numFrames,
const QAudioFormat &format, qint64 startTime = -1);
123 QAudioBuffer& operator=(
const QAudioBuffer &other);
125 QAudioBuffer(QAudioBuffer &&other)
noexcept =
default;
126 QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QAudioBuffer)
127 void swap(QAudioBuffer &other)
noexcept
130 bool isValid()
const noexcept {
return d !=
nullptr; };
134 QAudioFormat format()
const noexcept;
136 qsizetype frameCount()
const noexcept;
137 qsizetype sampleCount()
const noexcept;
138 qsizetype byteCount()
const noexcept;
140 qint64 duration()
const noexcept;
141 qint64 startTime()
const noexcept;
144 typedef QAudioFrameMono<QAudioFormat::UInt8> U8M;
145 typedef QAudioFrameMono<QAudioFormat::Int16> S16M;
146 typedef QAudioFrameMono<QAudioFormat::Int32> S32M;
147 typedef QAudioFrameMono<QAudioFormat::Float> F32M;
149 typedef QAudioFrameStereo<QAudioFormat::UInt8> U8S;
150 typedef QAudioFrameStereo<QAudioFormat::Int16> S16S;
151 typedef QAudioFrameStereo<QAudioFormat::Int32> S32S;
152 typedef QAudioFrameStereo<QAudioFormat::Float> F32S;
154 template <
typename T>
const T* constData()
const {
155 return static_cast<
const T*>(constData());
157 template <
typename T>
const T* data()
const {
158 return static_cast<
const T*>(data());
160 template <
typename T> T* data() {
161 return static_cast<T*>(data());
164 const void* constData()
const noexcept;
165 const void* data()
const noexcept;
168 QExplicitlySharedDataPointer<QAudioBufferPrivate> d;
QT_DEFINE_QESDP_SPECIALIZATION_DTOR(QAudioBufferPrivate)
static constexpr int positionToIndex(QAudioFormat::AudioChannelPosition pos)
void setValue(QAudioFormat::AudioChannelPosition pos, value_type val)
value_type channels[nChannels]
value_type value(QAudioFormat::AudioChannelPosition pos) const
value_type operator[](QAudioFormat::AudioChannelPosition pos) const