7#include <QtMultimedia/qaudioformat.h>
8#include <QtMultimedia/qtaudio.h>
9#include <QtMultimedia/qtmultimediaglobal.h>
10#include <QtCore/qshareddata.h>
45template <QAudioFormat::ChannelConfig config, QAudioFormat::SampleFormat format>
51 static constexpr int constexprPopcount(quint32 i)
53 i = i - ((i >> 1) & 0x55555555);
54 i = (i & 0x33333333) + ((i >> 2) & 0x33333333);
55 i = (i + (i >> 4)) & 0x0F0F0F0F;
56 return (i * 0x01010101) >> 24;
58 static constexpr int nChannels = constexprPopcount(config);
64 if (!(config & (1u << pos)))
67 uint maskedChannels = config & ((1u << pos) - 1);
68 return qPopulationCount(maskedChannels);
73 int idx = positionToIndex(pos);
79 int idx = positionToIndex(pos);
88 for (
int i = 0; i < nChannels; ++i)
89 channels[i] = QtPrivate::AudioSampleFormatHelper<format>::Default;
93template <QAudioFormat::SampleFormat Format>
94using QAudioFrameMono = QAudioFrame<QAudioFormat::ChannelConfigMono, Format>;
96template <QAudioFormat::SampleFormat Format>
97using QAudioFrameStereo = QAudioFrame<QAudioFormat::ChannelConfigStereo, Format>;
99template <QAudioFormat::SampleFormat Format>
100using QAudioFrame2Dot1 = QAudioFrame<QAudioFormat::ChannelConfig2Dot1, Format>;
102template <QAudioFormat::SampleFormat Format>
103using QAudioFrameSurround5Dot1 = QAudioFrame<QAudioFormat::ChannelConfigSurround5Dot1, Format>;
105template <QAudioFormat::SampleFormat Format>
106using QAudioFrameSurround7Dot1 = QAudioFrame<QAudioFormat::ChannelConfigSurround7Dot1, Format>;
109class QAudioBufferPrivate;
110QT_DECLARE_QESDP_SPECIALIZATION_DTOR_WITH_EXPORT(QAudioBufferPrivate, Q_MULTIMEDIA_EXPORT)
115 QAudioBuffer()
noexcept;
116 QAudioBuffer(
const QAudioBuffer &other)
noexcept;
117 QAudioBuffer(
const QByteArray &data,
const QAudioFormat &format, qint64 startTime = -1);
118 QAudioBuffer(
int numFrames,
const QAudioFormat &format, qint64 startTime = -1);
121 QAudioBuffer& operator=(
const QAudioBuffer &other);
123 QAudioBuffer(QAudioBuffer &&other)
noexcept =
default;
124 QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QAudioBuffer)
125 void swap(QAudioBuffer &other)
noexcept
128 bool isValid()
const noexcept {
return d !=
nullptr; };
132 QAudioFormat format()
const noexcept;
134 qsizetype frameCount()
const noexcept;
135 qsizetype sampleCount()
const noexcept;
136 qsizetype byteCount()
const noexcept;
138 qint64 duration()
const noexcept;
139 qint64 startTime()
const noexcept;
142 typedef QAudioFrameMono<QAudioFormat::UInt8> U8M;
143 typedef QAudioFrameMono<QAudioFormat::Int16> S16M;
144 typedef QAudioFrameMono<QAudioFormat::Int32> S32M;
145 typedef QAudioFrameMono<QAudioFormat::Float> F32M;
147 typedef QAudioFrameStereo<QAudioFormat::UInt8> U8S;
148 typedef QAudioFrameStereo<QAudioFormat::Int16> S16S;
149 typedef QAudioFrameStereo<QAudioFormat::Int32> S32S;
150 typedef QAudioFrameStereo<QAudioFormat::Float> F32S;
152 template <
typename T>
const T* constData()
const {
153 return static_cast<
const T*>(constData());
155 template <
typename T>
const T* data()
const {
156 return static_cast<
const T*>(data());
158 template <
typename T> T* data() {
159 return static_cast<T*>(data());
162 const void* constData()
const noexcept;
163 const void* data()
const noexcept;
166 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
typename QtPrivate::AudioSampleFormatHelper< format >::value_type value_type