aboutsummaryrefslogtreecommitdiffstats
path: root/OpenAL32/alSource.cpp
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2019-02-21 04:57:56 -0800
committerChris Robinson <[email protected]>2019-02-21 04:57:56 -0800
commit169a11dffc459a37c61b1dc6e7d66a303a935c62 (patch)
treeca4f02f68580c0fa1642f603b1513eada93f0918 /OpenAL32/alSource.cpp
parent8ac2d34706d1dea7c33f2b33c156cc23dde7b197 (diff)
Add some preliminary fields for mix-time ambisonic upsampling
Diffstat (limited to 'OpenAL32/alSource.cpp')
-rw-r--r--OpenAL32/alSource.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/OpenAL32/alSource.cpp b/OpenAL32/alSource.cpp
index cf466c32..fbf6bfe6 100644
--- a/OpenAL32/alSource.cpp
+++ b/OpenAL32/alSource.cpp
@@ -41,6 +41,7 @@
#include "alFilter.h"
#include "alAuxEffectSlot.h"
#include "ringbuffer.h"
+#include "bformatdec.h"
#include "backends/base.h"
@@ -2828,6 +2829,19 @@ AL_API ALvoid AL_APIENTRY alSourcePlayv(ALsizei n, const ALuint *sources)
voice->Flags = start_fading ? VOICE_IS_FADING : 0;
if(source->SourceType == AL_STATIC) voice->Flags |= VOICE_IS_STATIC;
+ /* Don't need to set the VOICE_IS_AMBISONIC flag if the device is
+ * mixing in first order. No HF scaling is necessary to mix it.
+ */
+ if(((*buffer)->mFmtChannels == FmtBFormat2D || (*buffer)->mFmtChannels == FmtBFormat3D) &&
+ device->mAmbiOrder > 1)
+ {
+ voice->AmbiScales = AmbiUpsampler::GetHFOrderScales(1, device->mAmbiOrder);
+ voice->AmbiSplitter[0].init(400.0f / static_cast<ALfloat>(device->Frequency));
+ for(ALsizei i{1};i < voice->NumChannels;++i)
+ voice->AmbiSplitter[i] = voice->AmbiSplitter[0];
+ voice->Flags |= VOICE_IS_AMBISONIC;
+ }
+
std::fill_n(std::begin(voice->Direct.Params), voice->NumChannels, DirectParams{});
std::for_each(voice->Send.begin(), voice->Send.end(),
[voice](ALvoice::SendData &send) -> void