1// Copyright (C) 2022 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-3.0-only
3#ifndef QAMBISONICDECODER_P_H
4#define QAMBISONICDECODER_P_H
5
6//
7// W A R N I N G
8// -------------
9//
10// This file is not part of the Qt API. It exists purely as an
11// implementation detail. This header file may change from version to
12// version without notice, or even be removed.
13//
14// We mean it.
15//
16
17#include <QtSpatialAudio/private/qtspatialaudioglobal_p.h>
18#include <QtMultimedia/qaudioformat.h>
19
20QT_BEGIN_NAMESPACE
21
22struct QAmbisonicDecoderData;
23class QAmbisonicDecoderFilter;
24
25class QAmbisonicDecoder
26{
27public:
28 enum AmbisonicOrder {
29 Ambisonic1stOrder = 1,
30 LowQuality = Ambisonic1stOrder,
31 Ambisonic2ndOrder = 2,
32 MediumQuality = Ambisonic2ndOrder,
33 Ambisonic3rdOrder = 3,
34 HighQuality = Ambisonic3rdOrder
35 };
36 QAmbisonicDecoder(AmbisonicOrder ambisonicOrder, const QAudioFormat &format);
37 ~QAmbisonicDecoder();
38
39 bool hasValidConfig() const { return outputChannels > 0; }
40
41 int nInputChannels() const { return inputChannels; }
42 int nOutputChannels() const { return outputChannels; }
43
44 int outputSize(int nSamples) const { return outputChannels * nSamples; }
45
46 // input is planar, output interleaved
47 void processBuffer(const float *input[], float *output, int nSamples);
48 void processBuffer(const float *input[], short *output, int nSamples);
49
50 void processBufferWithReverb(const float *input[], const float *reverb[2], short *output, int nSamples);
51
52 static constexpr int maxAmbisonicChannels = 16;
53 static constexpr int maxAmbisonicOrder = 3;
54
55private:
56 QAudioFormat::ChannelConfig channelConfig;
57 AmbisonicOrder order = Ambisonic1stOrder;
58 int inputChannels = 0;
59 int outputChannels = 0;
60 const QAmbisonicDecoderData *decoderData = nullptr;
61 QAmbisonicDecoderFilter *filters = nullptr;
62 float *simpleDecoderFactors = nullptr;
63 const float *reverbFactors = nullptr;
64};
65
66
67QT_END_NAMESPACE
68
69#endif
70

source code of qtmultimedia/src/spatialaudio/qambisonicdecoder_p.h